-
加载类.class文件
-
执行静态代码块(static)
-
在堆内存开启空间分配内存
-
在堆内存建立特有属性.初始化
-
对属性进行显示初始化
-
对象进行构造代码块初始化
-
对象进行对应构造好书初始化
-
内存给栈
示例代码:
class Person
{
static {
System.out.println("静态代码块");//第二步,随着类的加载而加载,先加载静态代码块,并只执行一次
}
//第三步开辟堆内存空间
//第四步,初始化特定属性 country
//第五步.显示初始化.初始化haha
private String name ="haha" ;
private int age;
private static String country = "CN"; //类开辟内存后直接初始化,在初始化name之前
//第六步.构造代码块初始化
{
System.out.println("name = "+ name +",age = "+age);
System.out.println("country = "+country);
System.out.println("构造代码块");
}
//第七步,执行构造函数
Person(String name,int age){
System.out.println("普通构造函数");
this.name = name;
this.age = age;
}
//普通方法
public void speak(){
System.out.println("普通方法");
}
//静态方法
public static void show(){
System.out.println("country = "+country);
}
}
public class Main {
//栈开辟主函数 (总体第一步)
public static void main(String[] args) {
System.out.println();
//第一步加载Person.class文件,加载到内存
Person.show();
//第八步,堆地址给栈地址
Person p1 = new Person("zhangsan",24);
}
}
执行的结果
静态代码块
country = CN
name = haha,age = 0
country = CN
构造代码块
普通构造函数