Java 对象初始化顺序
2012-05-16 12:55
260 查看
============================转自 suziwen (资深架构师)
=============================================
java 对象是如何进行初始化的,新建一PrintClass.java文件如下(包括类PrintClass以及A和其子类B),编译运行其中的main方法,
可以看到运行结果为:
A. 静态成员的初始化1
A. 静态初始化块1
A. 静态初始化块2
A. 静态成员的初始化2
B. 静态初始化块1
B. 静态成员的初始化1
B. 静态成员的初始化2
B. 静态初始化块2
A. 实例初始化块1
A. 实例成员的初始化
A. 实例初始化块2
A. 构造方法
Avar=1111
B. 实例初始化块1
B. 实例初始化块2
B. 实例成员的初始化
B. 构造方法
Bvar=2222
由此可知当新建一java对象(上面main方法中new B())时,它的内部初始化顺序为:
1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4. 父类构造方法
5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6. 子类构造方法
=============================================
java 对象是如何进行初始化的,新建一PrintClass.java文件如下(包括类PrintClass以及A和其子类B),编译运行其中的main方法,
public class PrintClass { public static void main(String[] args) { new B(); } PrintClass(String var) { System.out.println(var); } } class A { static PrintClass pClassA1 = new PrintClass("A. 静态成员的初始化1"); static { System.out.println("A. 静态初始化块1"); } static { System.out.println("A. 静态初始化块2"); } static PrintClass pClassA2 = new PrintClass("A. 静态成员的初始化2"); { System.out.println("A. 实例初始化块1"); } PrintClass pClassA = new PrintClass("A. 实例成员的初始化"); { System.out.println("A. 实例初始化块2"); } public int Avar; public A() { System.out.println("A. 构造方法"); doSomething(); } private void doSomething() { // public void doSomething() { Avar = 1111; System.out.println("Avar=" + Avar); } } // class B extends A class B extends A { public static void main(String[] args) { new B(); } public int Bvar = 2222; { System.out.println("B. 实例初始化块1"); } { System.out.println("B. 实例初始化块2"); } PrintClass pClassB = new PrintClass("B. 实例成员的初始化"); static { System.out.println("B. 静态初始化块1"); } static PrintClass pClassB1 = new PrintClass("B. 静态成员的初始化1"); static PrintClass pClassB2 = new PrintClass("B. 静态成员的初始化2"); static { System.out.println("B. 静态初始化块2"); } public B() { System.out.println("B. 构造方法"); doSomething(); } public void doSomething() { System.out.println("Bvar=" + Bvar); } }
可以看到运行结果为:
A. 静态成员的初始化1
A. 静态初始化块1
A. 静态初始化块2
A. 静态成员的初始化2
B. 静态初始化块1
B. 静态成员的初始化1
B. 静态成员的初始化2
B. 静态初始化块2
A. 实例初始化块1
A. 实例成员的初始化
A. 实例初始化块2
A. 构造方法
Avar=1111
B. 实例初始化块1
B. 实例初始化块2
B. 实例成员的初始化
B. 构造方法
Bvar=2222
由此可知当新建一java对象(上面main方法中new B())时,它的内部初始化顺序为:
1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4. 父类构造方法
5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6. 子类构造方法
相关文章推荐
- JAVA对象初始化顺序
- JAVA--浅谈实例化对象时的初始化顺序
- java对象中继承和变量初始化顺序浅析
- java类与对象的初始化顺序
- java对象初始化顺序
- Java基础巩固:类和对象的初始化顺序
- Java类中类属性和对象属性的初始化顺序
- Java中创建对象时,初始化成员变量的代码的执行顺序
- Java中初始化对象的顺序,静态代码块的用法以及Static的用法详解
- java对象的初始化顺序
- 《Thinking in Java》——静态、非静态成员变量、子句的初始化顺序(含继承)及对象创建过程
- Java中对象的初始化顺序
- java 用自身类的对象初始化静态变量 执行顺序
- java对象初始化顺序
- Java 类和对象的初始化过程及初始化顺序
- java中对象方法初始化顺序
- Java基础温习 (5)Java类和对象的初始化顺序
- JAVA中静态代码块及对象的初始化顺序
- Java中对象初始化顺序
- Java类和对象的初始化顺序