构造方法是对象被创建时初始化对象的成员方法,它具有和它所在的类完全一样的名字。构造方法只能有入口参数,没有返回类型,因为一个类的构造方法的返回类就是类本身。构造方法定义后,创建对象时就会自动调用它,对新创建的对象分配内存空间和初始化。在
Java
中,构造方法也可以重载,当创建一个对象时,
JVM
会自动根据当前对方法的调用形式在类的定义中匹配形式符合的构造方法,匹配成功后执行该构造方法。
如果省略构造方法的定义,则
Java
会自动调用默认的构造方法。但是如果定义了构造方法,则系统不再提供默认的构造方法。默认的构造方法没有任何参数,不执行任何操作。实际上,默认的构造方法的功能是调用此类的父类中的不带参数的那个构造方法,如果父类中不存在这样的构造方法,编译时会产生错误信息。
Object
是
Java
中所有类的根,定义它的直接子类,可以省略
extends
子句,编译器会自动包含它。
构造方法的方法体定义中,可以调用此类的父类的构造方法,也可以调用此类的另一个构造方法,这种调用必须由方法体的第一个语句完成。但是,构造方法的调用不允许通过方法名,所以,用
this
代表本类中的一个构造方法,而
super
则代表了其父类的一个构造方法。需要注意的是,在构造函数中,如果
this
语句,则必有
super
语句,要么自己编写
super
语句,要么由系统自动调用
super
语句。而且
super
语句调用的总是其父类的缺省构造函数,即无参的那个构造函数,如果其父类中没有缺省的构造函数,则编译出错。所以,子类如果有多个构造函数的时候,父类要么没有构造函数,
让编译器自动产生,那么在执行子类构造函数之前先执行编译器自动产生的父类的缺省构造函数;要么至少要有一个显
式的缺省构造函数可以让子类的构造函数调用。
另外还需要注意的有:
(1)
对象是由
new
运算符创建的,且在任何构造函数执行之前就已经创建完毕了;
(2)
构造函数的执行总是
“
向上
”
的:而且总是先执行完父类的构造函数;
(3)
显式初始化语句总是先于构造函数语句,但后于
super()
或
this()
。