首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2013-10-25 
java中普通变量、静态变量、静态代码块初始化的顺序辨析1.普通变量的初始化看如下程序class T{public T() {S

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优化讨论

热点排行