/*
对象初始化过程:
Person p = new Person("zhangSan", 20);
这句话都做了什么?(假设 Person 类未加载)
1. JVM 在栈内存中开辟引用变量 p 的空间
2. 判断语句右边表达式是否为 null.
3. 因右边表达式不为 null, 而 new 用到了 Person.class,
会先找到 Person.class 文件并加载到方法区中
4. 在方法区中创建类的类变量, 并进行默认初始化
5. 对类变量进行显式初始化
6. 对类进行 static 代码块初始化(执行该类中的 static 代码块)
7. 在堆内存中开辟空间, 创建一个 Person 类的对应对象并分配内存
8. 在堆内存中建立对象的实例变量, 并进行默认初始化
9. 对实例变量进行显式初始化
10. 对对象进行构造代码块初始化
11. 对对象进行对应构造函数初始化
12. 将对象在堆内存中的地址赋给 p, 使 p 指向该对象
*/
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("zhangSan", 20);
}
}
class Person {
private String name;
private int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return this.name + "..." + age;
}
} |
|