A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lucascgz 中级黑马   /  2015-12-9 00:17  /  695 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
对象初始化过程:

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;
        }
}

1 个回复

倒序浏览
我也一直认为。。new的赋值语句,是一个奇妙的东西。编程语言做了很多事情。为之后的使用,提供了一切。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马