构造器
构造器的主要作用不是去创建一个对象,而是初始化
构造器是创建java对象的重要途径,当通过new关键字调用构造器时,构造器也确实返回了该类的对象,但这个对象并不是完全由构造器负责创建的。
创建对象流程
首先我们了解一下,一个对象是如何创建出来的
1、分配对象空间,并将对象中属性默认初始化为0(数值类型)、null(引用类型)、false(布尔类型)
2、执行属性值的显式初始化(实例变量初始化和实例代码初始化)
在定义(声明)实例变量的同时,还可以直接对实例变量进行赋值或者使用实例代码块对其进行赋值,这一步骤在调用构造器之前
1 实例变量初始化
2 实例代码初始化
public class Test{
private int i = 1;// 1 直接为成员变量赋值初始化
private int j;//这个就是分配对象后的默认值
{ // 2 实例代码块
j += 3;
}
}
3 Java是按照编程顺序来执行实例变量初始化器和实例初始化器中的代码的
并且不允许顺序靠前的实例代码块初始化在其后面定义的实例变量
3、执行构造器
在构造器的执行体执行之前,系统已经创建了一个对象,只是这个对象还不能被外部程序访问,只能在构造器中,通过this引用它,当构造器的执行体结束之后,该构造器的返回这个对象
虽然构造器返回了这个对象,但构造器不是函数,是不能有返回值的(下文再讲)
4、对象赋值给一个引用的变量,从此外部程序可以访问.
So,构造器的作用就是为成员变量提供初始化,所以是this.xx = xx这样的
注意问题
构造器不是函数,没有返回值
构造器不是一个函数,虽然它确实返回了一个实例对象,但就构造器本身来讲,他是不能有返回值的,也不能void
构造器内部可以有return语句,但不能返回任何值,仅仅作为调用完毕不再执行下面代码的存在
如果返回了对象,Java只会认为他是一个和构造器同名的普通方法而已
访问修饰符 类名 (参数列表) { //访问修饰符仅有 public private protected
}
public Test (int i ,int j) {
this.i = i;
this.j = j;
}
this super
this()是调用本类中含有其他参数列表的构造方法,使用使用this(参数列表)调用本类的另外构造方法。
super()是调用父类构造器时使用的,使用super(参数列表)
1 在一个构造器中你只能使用this()或者super()之中的一个
2 而且调用的位置只能在构造器的第一行
(因为Java要求在实例化类之前,必须先实例化其超类,以保证所创建实例的完整性)