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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Person p = new Person("zhangsan",20);
该句话都做了什么事情?
1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显示初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
    8,将内存地址付给栈内存中的p变量

上面的内容理解了,静态代码块和构造代码块执行顺序就没问题了

1 个回复

倒序浏览
没有看到你的例子哦 只看到对象的实例化过程了 估计看的同学会一头雾水 我来附上静态块和构造块执行顺序的例子吧:

class StaticCode
{
           static
        {
                System.out.println("a");
        }
        {
                System.out.println("c");
        }

        StaticCode(int x)
        {
                System.out.println("d");
        }
}
   主函数中的语句为:new StaticCode(4);
   结果是多少:
   ##分析: 静态代码块随着类的加载而执行,所以最先执行
             构造代码快随着构造函数的初始化而优先于构造函数执行,所以其次执行构造代码块
             最后执行构造函数
     所以此题答案为: a
                                 c
                                 d
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马