Chapter5_初始化与清理_方法重载
方法重载是java中编译器在方法调用时采用的一个重要机制。起初方法重载的初衷是方便构造器的调用,比如对于一个类,可以实现用不同的方法来初始化它,又由于构造器的名称都是一样的,所以必须使用到方法重载的机制,并且这种机制不仅限于构造器方法。下面这个例子提供了方法重载的构造器和一般方法的例子。
class tree{
int height;
tree(){
System.out.println("无参数构造器");
} tree(int height){
this.height = height;
System.out.println("带参数构造器 " + height);
} public void info(){
System.out.println("height " + this.height);
} public void info(int height){
System.out.println("height " + height);
}
} public class test {
public static void main(String[] args){
tree t1 = new tree();
tree t2 = new tree(10); t1.info(10);
t2.info();
}
}
输出如下:
无参数构造器 带参数构造器 10 height 10 height 10
上面的例子定义了两对重载的方法,分别是构造器方法和显示一些信息的一般方法,很容易看到,重载方法的区分规则很简单:每个重载方法都要有独一无二的参数类型列表,并且参数顺序不同的方法也可以进行区分。要注意的是,不同的是参数类型列表,这说明类型的顺序必须不同,如果类型顺序相同,仅仅是定义时的变量名不同,这样也是不行的。下面是一些演示。
class tree{
int height;
tree(){
System.out.println("无参数构造器");
} tree(int height){
this.height = height;
System.out.println("带参数构造器 " + height);
} public void info(String s, int height){
System.out.println(s + height);
} public void info(int height, String s){
System.out.println(s + height);
} /*public void info(int height, String s2){
System.out.println(s2 + height);
}
报错!*/
} public class test {
public static void main(String[] args){
tree t1 = new tree();
tree t2 = new tree(10); t1.info(10,"height ");
t1.info("height ", 10);
}
}
输出:
无参数构造器 带参数构造器 10 height 10 height 10
这很显然证明了之前的论述,重要的是对参数类型列表的理解。另外需要注意的是用返回值来区分重载方法是不可取的,编译器并未对这个机制提供实现,原因是在编程中,许多人会关注方法的内容,即它们完成了什么事情,而非关注方法的返回值,这被称为“为了副作用而副作用”。
另一个问题就是在方法重载过程中涉及到的类型转化的问题。如果被传入的数据类型小于方法声明中的参数类型,实际数据类型就会被提升,对于char型如果无法找到接受char型参数的方法,会被提升至int类型。如果方法接受的数据类型比参数列表中声明的小,会通过窄化转化来执行操作。
Chapter5_初始化与清理_方法重载的更多相关文章
- Chapter5_初始化与清理_用构造器初始化
接下来进入第五章,java中初始化和清理的问题,这是两个涉及安全的重要命题.初始化的功能主要是为库中的构件(或者说类中的域)初始化一些值,清理的功能主要是清除程序中不再被需要的元素,防止资源过分被垃圾 ...
- Chapter5_初始化与清理_数组初始化与可变参数列表
一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...
- Chapter5_初始化与清理_构造器初始化
一.构造器初始化的基本顺序 在使用构造器进行初始化时,最需要注意的是初始化的顺序,这种方法可以给初始化的顺序带来很大的灵活性.看如下的一个例子. class Window{ Window(int ma ...
- Chapter5_初始化与清理_成员初始化
在java中,成员初始化在使用之前应该都要保证已经完成初始化.对于在方法体中的局部变量,如果没有使用指定初始化的方法对成员变量进行初始化,编译器会提示一个错误.而对于类的数据成员,编译器会对这些成员赋 ...
- Chapter5_初始化与清理_enum关键字
enum关键字虽然只是一个很小的特性,但是它在我们使用枚举类型时,可以很方便的处理.先举一个例子. enum Speciness{ NOT, MILD, MEDIUM, HOT, FLAMING } ...
- Chapter5_初始化与清理_this关键字
this关键字是Java中一类很特殊的关键字,首先它只能在方法内使用,用来表示调用这个方法的对象,在这一点上this和其他对对象的引用的操作是相同的.我们之所以可以在方法内部访问到它是因为编译器在方法 ...
- Java基础03 构造器与方法重载
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在方法与数据成员中,我们提到,Java中的对象在创建的时候会初始化(initial ...
- Java基础03 构造器与方法重载(转载)
显式初始化要求我们在写程序时就确定初始值,这有时很不方便.我们可以使用构造器(constructor)来初始化对象.构造器可以初始化数据成员,还可以规定特定的操作.这些操作会在创建对象时自动执行. 定 ...
- java Vamei快速教程03 构造器和方法重载
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在方法与数据成员中,我们提到,Java中的对象在创建的时候会初始化(initial ...
随机推荐
- Tesseract--主要API功能介绍
tesseract本身代码是由c/c++混编而成的,其中有用的简单的接口函数几乎都是在baseapi.h中. 从其处理过程中,不难得出:它还需要有一个image处理的类,及相关的方法:这样子, ...
- 线程之Callable、Future 和FutureTask使用及源码分析
一.Callable 我们知道启动线程有以下两种方式(jdk源码注释中官方定义只有两种启动方式,callable不算线程启动方式) 原文链接:http://www.studyshare.cn/blog ...
- JEECG 上传插件升级-标签
前言: 现有的uploadify上传是基于swf的,随着H5的普及,flash即将退出历史舞台,JEECG团队本着与时俱进的原则,将全面升级JEECG系统中的上传功能,采用新式上传插件plupload ...
- Abaqus用Dload子程序实现移动载荷
- 不学无术的下场——OO第一单元总结
第一单元OO作业总结 第一次作业 第一次作业的要求是对仅有常数和幂函数的式子进行求导. 由于是第一次接触JAVA,对很多东西都还不熟悉,尤其是正则表达式做得不好.当时我的思路如下: 建立Pol ...
- Django中的视图(view)
视图 1.什么是视图 视图就是Django项目下的view.py文件,它的内部是一系列的函数或者是类,用来专门处理客户端访问请求后处理请求并且返回相应的数据,相当于一个中央情报处理系统 2.具体视图实 ...
- Java 字符串拼接四种方式的性能比较分析
一.简单介绍 编写代码过程中,使用"+"和"contact"比较普遍,但是它们都不能满足大数据量的处理,一般情况下有一下四种方法处理字符串拼接,如下: 1. 加 ...
- Linux安装Intel Threading Building Blocks(TBB)
编译安装: wget https://codeload.github.com/01org/tbb/tar.gz/2019_U3 tar zxvf 2019_U3 cd tbb-2019_U3 make ...
- JAVA企业级服务器应用之Tomcat
Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同开发而 ...
- oralce的function处理考勤时间节点以及计算工作时间
例如: 上班时间为 8:30 到17:30,加班则到21:00:午休时间为1小时,(12:00-13:00): 晚间休息时间为半小时 (17:30-18:00),计算一批考勤数据的上班时间. 思路: ...