Java基础第三篇|Java基础第三篇 构造器与方法重载
目录
- 1、定义构造器
- 2、初始化方法的优先级
- 3、方法重载
- 4、总结
1、定义构造器 构造器是一个方法。像普通方法一样,我们在类中定义构造器。构造器有如下基本特征:
- 构造器的名字和类的名字相同
- 构造器没有返回值
public class Test{public static void main(String[] args){Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); }}class Human{/*** constructor*/Human(int h){this.height = h; System.out.println("I'm born"); }/*** accessor*/int getHeight(){return this.height; }int height; }
上面的程序会打印
I'm born构造器可以像普通方法一样接收参数列表。这里,构造器
160
Human()
接收一个整数作为参数。在方法的主体中,我们将该整数参数赋予给数据成员height
。构造器在对象创建时做了两件事:- 为数据成员提供初始值 this.height = h;
- 执行特定的初始操作 System.out.println("I'm born");
构造器是如何被调用的呢?我们在创建类的时候,采用的都是
new Human()
的方式。实际上,我们就是在调用Human类的构造器。当我们没有定义该方法时,Java会提供一个空白的构造器,以便使用new的时候调用。但当我们定义了构造器时,在创建对象时,Java会调用定义了的构造器。在调用时,我们提供了一个参数160。从最后的运行结果中也可以看到,对象的height确实被初始化为160。2、初始化方法的优先级 在方法与数据成员中,我们可以看到,如果我们提供显式初始值,那么数据成员就会采用显式初始值,而不是默认初始值。但如果我们既提供显式初始值,又在构造器初始化同一数据成员,最终的初始值将
由构造器决定
。比如下面的例子:public class Test{public static void main(String[] args){Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); }}class Human{/*** constructor*/Human(int h){this.height = h; }/*** accessor*/int getHeight(){return this.height; }int height=170; // explicit initialization}
运行结果为:
160对象最终的初始化值与构建方法中的值一致。因此:
构建方法 > 显式初始值 > 默认初始值
(事实上,所谓的优先级与初始化时的执行顺序有关,我将在以后深入这一点)
3、方法重载 一个类中可以定义不止一个构造器,比如:
public class Test{public static void main(String[] args){Human neZha= new Human(150, "shit"); System.out.println(neZha.getHeight()); }}class Human{/*** constructor 1*/Human(int h){this.height = h; System.out.println("I'm born"); }/*** constructor 2*/Human(int h, String s){this.height = h; System.out.println("Ne Zha: I'm born, " + s); }/*** accessor*/int getHeight(){return this.height; }int height; }
运行结果:
Ne Zha: I'm born, shit上面定义了两个构造器,名字都是Human。两个构造器有不同的参数列表。
150
在使用new创建对象时,Java会根据
提供的参数
来决定构建哪一个构造器。比如在构建neZha时,我们提供了两个参数: 整数150和字符串"shit",这对应第二个构建方法的参数列表,所以Java会调用第二个构建方法。在Java中,Java会同时根据
方法名
和参数列表
来决定所要调用的方法,这叫做方法重载(method overloading)。构建方法可以进行重载,普通方法也可以重载,比如下面的breath()方法:public class Test{public static void main(String[] args){Human aPerson = new Human(); aPerson.breath(10); }}class Human{/*** breath() 1*/void breath(){System.out.println("hu...hu..."); }/*** breath() 2*/void breath(int rep){int i; for(i = 0; i < rep; i++) {System.out.println("lu...lu..."); }}int height; }
运行结果:
lu...lu...可以看到,由于在调用的时候提供了一个参数: 整数10,所以调用的是参数列表与之相符的第二个breath()方法。
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
4、总结
constructor特征: 与类同名,无返回值【Java基础第三篇|Java基础第三篇 构造器与方法重载】到此这篇关于Java基础 第三篇 构造器与方法重载的文章就介绍到这了,更多相关Java构造器与方法重载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
constructor目的: 初始化,初始操作
方法重载: 方法名 + 参数列表 -> 实际调用哪一个方法
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 第三节|第三节 快乐和幸福(12)
- android第三方框架(五)ButterKnife
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- thinkphp|thinkphp 3.2 如何调用第三方类库
- 数组常用方法一
- Python基础|Python基础 - 练习1