读书人

java中普普通通变量、静态变量、静态代

发布时间: 2013-10-25 14:36:53 作者: rapoo

java中普通变量、静态变量、静态代码块初始化的顺序辨析

1.普通变量的初始化

看如下程序

class T{public T() {System.out.println("T constructor");}}class Spoon{public Spoon(int maker) {System.out.println("Spoon("+maker+")");}int a;//非静态代码块与直接为变量赋值效果相同,只不过可以写更为复杂的代码,非静态代码块一般用于内部类中{System.out.println("non-static instatnce");a = 1;}T t1 = new T();}public class Test {public static void main(String[] args) {new Spoon(2);}}/*non-static instatnceT constructorSpoon(2)  */

通过这个程序,可以发现非静态变量和非静态代码块顺序由书写顺序决定。

5.总结:

以Dog类为例

1.当第一次执行到需要使用Dog类时(如Dog d = new Dog),java首先通过寻找classpath来找到Dog.class,进行加载.

2.初始化Dog类的静态变量和静态代码块(按书写顺序,若静态变量或代码块中还有new Dog,此时不用再管静态变 量和代码块了,如第五个程序中的"static Spoon s = new Spoon(1)")。

3.系统给类分配足够大的内存空间,初始化非静态变量和非静态代码块(顺序由书写顺序决定)

4.最后执行Dog类的构造函数。

5.以后如果还要new Dog类对象时(不是第一次使用了),重复3和4的步骤,不会再去初始化静态变量和静态代码 块了。

大家可以自己写程序实验一下。


6.子类继承父类时的初始化顺序

1.系统启动时,首先初始化父类和子类的static变量和块

2.初始化父类的普通变量,调用父类的构造函数

3.初始化子类的普通变量,调用子类的构造函数

7.附记

由于个人能力有限,第一次学习只了解这些了,有什么错误,请多多指教。

3楼Etoak_james昨天 16:27
不错 帮顶了。QQ群294881724 java高性能与sql优化讨论
2楼woshiwanghao_hi昨天 16:27
受益匪浅
1楼Etoak_james昨天 13:03
不错 帮顶了。QQ群294881724 java高性能与sql优化讨论

读书人网 >编程

热点推荐