从理性上分析JAVA初始化对象的顺序

从理性上分析JAVA初始化对象的顺序

ID:41929869

大小:75.00 KB

页数:5页

时间:2019-09-04

从理性上分析JAVA初始化对象的顺序_第1页
从理性上分析JAVA初始化对象的顺序_第2页
从理性上分析JAVA初始化对象的顺序_第3页
从理性上分析JAVA初始化对象的顺序_第4页
从理性上分析JAVA初始化对象的顺序_第5页
资源描述:

《从理性上分析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.父类的非静态变量和块。顺序按照变量

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。