资源描述:
《从理性上分析JAVA初始化对象的顺序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、最近在阅读《ThinkinginJava》这本宝典(的确是宝典!),发现JAVA初始化的顺序冇点乱,特别是涉及到继承,内部类,静态,非静态,代码块,普通变量等等复杂的情况!于是写了程序來分析JAVA初始化的顺序,发现,JAVA在初始化的时候总是以“最简单明了,最节省资源”的方式来初始化的!“最节省资源”:看看卞血代码。packagechushihuaxunxu;classA{A(){System.out.printIn(nA");}publicStringtoString(){return"ThisisA";}}classB{B(){System.out.pr
2、intln(uBn);}}classC{CO{System.out.printIn(nCn);}}classD{DO{System.out.printlnC^D");}}classE{E(){System・out.printin("E");}}classF{F(){System.out.printlnCT");}}classH{H(){System,out.printIn(,fH,f);}classG{GO{System,out.printIn(,fGn);}}classCCCC{Fa=newF();{newE();}static{newG();}static
3、Hb=newH();}publieclassChuShiHuaShunXuextendsCCCC{{newC();}Aa=newA();static{newD();}staticBb=newB();staticclassinner{static{System,out.printIn(Hinner,T);}{this!System•out•printIn(ninner1n);//System.out.printin(a);//cannotwritelike}}classinnerll{{Bbb=b;System,out.printIn(Hinnerll11);}
4、}publicstaticvoidmain(String[]args){newChuShiHuaShunXu.inner();}输出结果是:GHDBinnerinner1我们很惊奇的发现,我们在main方法中,创建了ChuShiHuaShunXu类中的一个嵌套类(静态内部类)的时候,JAVA很“聪明地”只是为我们初始化ChuShiHuaShunXu类及其基类CCCC中所有“静态”(带有static修饰语)的'域'和'块',而对于那些“非静态”的'域,和,块,,JAVA会不加理睬。这就很聪明地为我们节省了一些内存。所以说JAVA在初始化的时候是节省资源的。这是为
5、什么呢?我们來仔细分析-下。JAVA小恢套类是静止调用外部类的任何非静态方法和非静态变量的。这就导致,即使初始化了非静态变量,对于这个静态类的生成也没什么用处C既然没有什么用处,何必还要初始化这些没用的变量呢!所以JAVA就没有初始化了。“最简单明了”其实JAVA的初始化顺序是很单一的。就按照一条线索执行。我们看卜•面的代码:packagechushihuaxunxu;classCCCC{Fa=newF();{newE();}static{newG();}staticHjb=newH();}publicclassChuShiHuaShunXuextendsCC
6、CC{newC();}Aa=newA();static{newD();}staticBb=newB();publicstaticvoidmain(String[]args){newChuShiHumShunXu();classA{A(){System,out.printIn(,fAn);}publicStringtoString(){return“ThisisAn;classB{B(){System.out.printIn(HBH);}}classC{co{System,out.printIn(,fCn);}}classD{DO{System,out.prin
7、t1n(,fDn);}}classE{E(){System,out.printIn(,fE,f);}}classF{F(){System.out.printIn(,fF,f);}}classH{H(){System,out.printIn(,fH,f);classG{GO{System,out.printIn(HG11);}}执行结果是:GHDBFECA可以很简单的看出,JAVA执行初始化的顺序是:1•父类的static变量和static块。顺序按照变量和块的出现的先后顺序执行。2.子类的static变量和static块。顺序按照变屋和块的出现的先后顺序执行。
8、3.父类的非静态变量和块。顺序按照变量