Java中static变量的初始化顺序
2014-10-10 15:10
369 查看
Java中static变量的初始化顺序
输出结果:
Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
f2(1)
f3(1)
分析::进入main时,发现两个static变量,对于第一个Table型,进入Table类中,发现又有两个static的Bowl类,所以刚开始的顺序为Bowl(1)
Bowl(2) 然后就是Table的构造函数,输出Table() f(1) 接下来是static的cupboard类,进入cupboard类,发现有两个static的bowl类,所以顺序为Bowl(4)
Bowl(5) 对于bowl3,由于它不是static的,所以它的顺序靠后,进入cupboard的构造函数,输出Cupboard() f(2)
接下来就是一个输出语句 又来一个new cupboard,不过它是一般形式,所以进入cupboard类,输出bowl(3),这是因为它是一般类型的,不是static,对于Static类型的,它只会初始化一次。接下来输出Cupboard()f(2) 输出一个输出语句。又来一个new cupboard,一般形式,后面的就好理解了。
package test; class Bowl { Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f(int marker) { System.out.println("f(" + marker + ")"); } } class Table { static Bowl b1 = new Bowl(1); Table() { System.out.println("Table()"); b2.f(1); } void f2(int marker) { System.out.println("f2(" + marker + ")"); } static Bowl b2 = new Bowl(2); } class Cupboard { Bowl b3 = new Bowl(3); static Bowl b4 = new Bowl(4); Cupboard() { System.out.println("Cupboard()"); b4.f(2); } void f3(int marker) { System.out.println("f3(" + marker + ")"); } static Bowl b5 = new Bowl(5); } public class StaticInitialization { public static void main(String[] args) { System.out.println( "Creating new Cupboard() in main"); new Cupboard(); System.out.println( "Creating new Cupboard() in main"); new Cupboard(); t2.f2(1); t3.f3(1); } static Table t2 = new Table(); static Cupboard t3 = new Cupboard(); } ///:~
输出结果:
Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
f2(1)
f3(1)
分析::进入main时,发现两个static变量,对于第一个Table型,进入Table类中,发现又有两个static的Bowl类,所以刚开始的顺序为Bowl(1)
Bowl(2) 然后就是Table的构造函数,输出Table() f(1) 接下来是static的cupboard类,进入cupboard类,发现有两个static的bowl类,所以顺序为Bowl(4)
Bowl(5) 对于bowl3,由于它不是static的,所以它的顺序靠后,进入cupboard的构造函数,输出Cupboard() f(2)
接下来就是一个输出语句 又来一个new cupboard,不过它是一般形式,所以进入cupboard类,输出bowl(3),这是因为它是一般类型的,不是static,对于Static类型的,它只会初始化一次。接下来输出Cupboard()f(2) 输出一个输出语句。又来一个new cupboard,一般形式,后面的就好理解了。
相关文章推荐
- Java的static修饰变量,方法,代码块的初始化顺序
- Java static变量初始化顺序引发的bug
- Java中的static变量、方法、代码块初始化执行顺序
- java中static变量与非static变量初始化顺序
- [转] Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- Java类中构造方法的执行顺序和变量初始化
- java 变量的初始化顺序
- Java中变量、类初始化顺序
- java对象中继承和变量初始化顺序浅析
- 【转】Java类的初始化顺序 (静态变量、静态初始化块、变量
- static 变量初始化顺序的问题和解决方案
- 浅谈Java变量的初始化顺序详解
- java成员变量的初始化顺序
- java变量,初始化快,构造函数的执行顺序
- java变量初始化顺序
- Java - Static和Final修饰类属性变量及初始化
- 【转】Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- 关于JAVA Static的初始化顺序(及递归错误)
- Java基础 构造对象初始化变量的顺序浅见
- JAVA变量初始化顺序