黑马程序员技术交流社区

标题: 关于静态代码块和构造代码块执行顺序的例子 [打印本页]

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

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

作者: 陈虹旭    时间: 2012-10-5 14:28
没有看到你的例子哦 只看到对象的实例化过程了 估计看的同学会一头雾水 我来附上静态块和构造块执行顺序的例子吧:

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

        StaticCode(int x)
        {
                System.out.println("d");
        }
}
   主函数中的语句为:new StaticCode(4);
   结果是多少:
   ##分析: 静态代码块随着类的加载而执行,所以最先执行
             构造代码快随着构造函数的初始化而优先于构造函数执行,所以其次执行构造代码块
             最后执行构造函数
     所以此题答案为: a
                                 c
                                 d




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