一、构造方法
如果需要创建对象的同时明确对象的属性值,需要使用构造方法来对这些属性值进行初始化操作。
二、创建对象的过程
1.声明一个对象,包括对象的名称和类型。
2.实例化对象,使用new关键字创建对象。
3.初始化赋值,在使用new关键字创建对象时,会自动调用构造方法初始化对象属性。
三、构造方法的特点
1.没有返回值,对象创建完,方法就执行结束。
2.构造方法的名称必须和类名一致。
3.类默认会有一个空参构造方法,如果我们手动添加了构造方法,那么就不会使用默认的构造方法。
4.创建一个对象,构造方法只执行一次。
5.构造方法可以被private修饰,不能创建该类对象。
6.构造方法不能被继承。
四、定义格式
修饰符 构造方法名(参数列表){
}
例:
public class Demo_1 {
//空参构造方法
public Demo_1(){
System.out.println("调用了空参构造方法!");
}
}
//定义测试类
class Test{
public static void main(String[] args){
//创建对象
Demo_1 d1 = new Demo_1();
}
}
有参构造方法,例:
public class Demo_1 {
//成员变量
private int a;
private int b;
//空参构造方法
public Demo_1(){
System.out.println("调用了空参构造方法!");
}
//有参构造方法,初始化成员,this表示当前对象,用于区分成员变量和局部变量同名
public Demo_1(int a,int b){
this.a = a;
this.b = b;
System.out.println(this.a);
System.out.println(this.b);
System.out.println("调用了有参构造方法!");
}
}
//定义测试类
class Test{
public static void main(String[] args){
//创建对象,调用有参构造方法,初始化赋值
Demo_1 d1 = new Demo_1(10,20);
}
}
五、构造方法之间的调用
在一个构造方法中,想要使用另一个构造方法,使用this关键字调用。此调用方式this语句必须在构造方法的第一句。
例:
public class Demo_2 {
//成员变量
private int a;
private int b;
//空参构造
public Demo_2(){
//调用另一个构造方法来初始化赋值
this(10,20);
System.out.println("调用了空参构造方法!");
}
//有参构造
public Demo_2(int a , int b) {
this.a = a;
this.b = b;
System.out.println(this.a);
System.out.println(this.b);
System.out.println("调用了有参构造方法!");
}
}
//定义测试类
class Test_2{
public static void main(String[] args){
//创建对象
Demo_2 d2 = new Demo_2();
}
}
六、继承关系中构造方法的调用
创建子类对象时,会先执行父类的构造方法,因为子类当中所有的构造方法默认的第一条语句为super(); (也必须是第一条语句)会调用父类的空参构造方法。如果要调用父类中的有参构造方法,要使用super(实参列表)显示调用。如果父类中没有空参构造方法,在子类的所有构造方法中必须显示调用。如果父类中有多个构造方法,在子类的构造方法中任意调用一个就行。
注意:this()与super()不能同时存在。使用了this()调用了本类的其他构造方法,相当于在被调用的其他的构造方法中使用了super()。
总结:子类中的所有构造方法,必须能调用到父类的构造方法。(直接调用或间接调用)
例:
//定义父类
public class Father {
//父类中的空参构造方法
public Father(){
System.out.println("我是父类中的空参构造方法!");
}
}
//创建子类,继承父类
class Son extends Father{
//子类空参构造方法
public Son(){
//super(); 默认会添加
System.out.println("我是子类中的空参构造方法!");
}
}
//定义测试类
class Test_3{
public static void main(String[] args){
//创建子类对象
new Son();
}
}