创建类的实例(即对象)需要调用构造方法。
在Java中,当你使用new
关键字创建一个新的对象时,Java会自动调用构造方法来初始化这个新对象。构造方法是一种特殊的方法,它的名称必须与类名相同,并且没有返回类型(连void也没有)
package com.exmaple.ObjectOriented;
/**
* 构造方法
*/
public class ConstructorMethod {
}
- 在上图得类中,没有定义构造方法也是可以创建对象得,因为编译器在编译得过程中会自动加上,我们把看下编译后的文件
- 当我们自定义一个有参构造但不定义无参构造
package com.exmaple.ObjectOriented;
/**
* 构造方法
*/
public class ConstructorMethod {
public ConstructorMethod(String name){
}
}
看看编译后的字节码文件
结论:不会自动生成无参构造,所以通常情况下,会把有参构造和无参构造都定义出来
- 创建类的实例(对象)时,实例代码块,成员变量初始化,构造方法得执行顺序
package com.exmaple.ObjectOriented;
/**
* 构造方法
*/
public class ConstructorMethod {
public static void main(String[] args) {
/*
创建对象实例得时候,会先初始化类的成员变量,在执行构造方法
*/
Food food = new Food("真知棒");
System.out.println(food.getSugar()); //真知棒
}
}
class Food{
public Food(){}
public Food(String sugar){
this.sugar = sugar;
}
//实例代码块1
{
System.out.println(this.sugar); //null
}
private String sugar = "大白兔";
//实例代码块2
{
System.out.println(this.sugar); //大白兔
this.sugar = "阿尔卑斯";
System.out.println(this.sugar); //阿尔卑斯
}
public String getSugar() {
return sugar;
}
}
结论:
1、成员变量初始化在执行构造方法前
2、实例代码块跟成员变量初始化得顺序在于编写位置的顺序