黑马程序员技术交流社区

标题: 对象初始化过程 [打印本页]

作者: lucascgz    时间: 2015-12-9 00:17
标题: 对象初始化过程
/*
对象初始化过程:

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;
        }
}
作者: hdhunter    时间: 2015-12-9 08:29
我也一直认为。。new的赋值语句,是一个奇妙的东西。编程语言做了很多事情。为之后的使用,提供了一切。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2