今天无聊,看了一下java语言基础知识,对 实例初始化块,静态初始化块 的执行顺便,有了一点了解,便记下来,方便以后查阅。
在一个类定义中,初始化块,就是一块用 { } 大括号括起来的代码段。但“实例初始化块”只是单单的 大括号,当每次创建一个类的实例时,在调用构造方法前,会先执行这段“实例初始化块”,看到这,应该大概明白“实例初始化块”的主要作用了吧?当你在一个类的不同构造方法内,有许多相同的代码段,那么,这些代码就可以单独提取出来,放在一个“实例初始化块里”,那么,每次创建一个对象时,就都会执行一次那代码块。
而相对于“静态初始化块”,其只是在 大括号前面加了个 static,形如 : static{ //--code },但在静态初始化块里,只能允许访问所在类的静态成员(包括方法),当然,也可以在初始化块里声明局部变量(但不能是static类型的)。而静态初始化块的作用就是当JVM在装载类的,你想让它做一些事情,那么,就可以用静态初始化块。
现在说重点:这几者的执行顺序:
(JVM在装载类时)先装载类的静态成员,再执行静态初始化块(同样,当一个类有继承自某类时,则会先装载该父类,那么,父类的装载或执行顺序,也都如句子所述)。
(在创建类的实例时)先执行实例初始化块,再执行构造方法;但对于一棵继承树中,会先调用父类的构造方法,那么其执行顺序也如句子所述。
需要注意的是:
1.当你调用了一个对象的clone方法,结果是:不会再执行初始化块,只会执行构造方法。
2.当一个类有多个初始化块时,其执行的顺序是从上到下执行。
本文出自 “术业无止境” 博客,请务必保留此出处http://1877998.blog.51cto.com/1867998/473728