数据初始化顺序.doc

数据初始化顺序.doc

ID:57577845

大小:56.00 KB

页数:7页

时间:2020-08-27

数据初始化顺序.doc_第1页
数据初始化顺序.doc_第2页
数据初始化顺序.doc_第3页
数据初始化顺序.doc_第4页
数据初始化顺序.doc_第5页
资源描述:

《数据初始化顺序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、数据初始化顺序一、前言    数据的初始化顺序在编写高效率的代码的时候有着决定性的作用!作为一个java开发者,弄懂这快内容是最基本的。二、初始化顺序    在一个类中,初始化的顺序是由变量在类中定义的顺序决定的,即使变量定义大量分布在方法定义的中间,那些变量仍会在调用任何方法之前得到初始化--甚至在构造方法执行之前。   那么通过下面这个例子来看看: //:OrderOfInitialization.java//Demonstratesinitializationorder.//Whentheconstructor

2、iscalled,tocreatea//Tagobject,you'llseeamessage:classTag{Tag(intmarker){System.out.println("Tag("+marker+")");}}classCard{Tagt1=newTag(1);//BeforeconstructorCard(){//Indicatewe'reintheconstructor:System.out.println("Card()");t3=newTag(33);//Re-initializet3}Tagt

3、2=newTag(2);//Afterconstructorvoidf(){System.out.println("f()");}Tagt3=newTag(3);//Atend}publicclassOrderOfInitialization{publicstaticvoidmain(String[]args){Cardt=newCard();t.f();//Showsthatconstructionisdone}}///:~     代码执行的结果:     Tag(1)Tag(2)Tag(3)Card()Tag(

4、33)f()在Card中,Tag对象的定义故意到处散布,以证明它们全都会在构建器进入或者发生其他任何事情之前得到初始化。除此之外,t3在构建器内部得到了重新初始化因此,t3句柄会被初始化两次,一次在构建器调用前,一次在调用期间(第一个对象会被丢弃,所以它后来可被当作垃圾收掉)。从表面看,这样做似乎效率低下,但它能保证正确的初始化——若定义了一个过载的构建器,它没有初始化t3;同时在t3的定义里并没有规定“默认”的初始化方式,那么会产生异常。 三、静态数据的初始化 若数据是静态的(static),那么同样的事情就会发生

5、;如果它属于一个基本类型(主类型),而且未对其初始化,就会自动获得自己的标准基本类型初始值;如果它是指向一个对象的句柄,那么除非新建一个对象,并将句柄同它连接起来,否则就会得到一个空值(NULL)。如果想在定义的同时进行初始化,采取的方法与非静态值表面看起来是相同的。但由于static值只有一个存储区域,所以无论创建多少个对象,都必然会遇到何时对那个存储区域进行初始化的问题。下面这个例子可将这个问题说更清楚一些://:StaticInitialization.java//Specifyinginitialvalues

6、ina//classdefinition.classBowl{Bowl(intmarker){System.out.println("Bowl("+marker+")");}voidf(intmarker){System.out.println("f("+marker+")");}}classTable{staticBowlb1=newBowl(1);Table(){System.out.println("Table()");b2.f(1);}voidf2(intmarker){System.out.println(

7、"f2("+marker+")");}staticBowlb2=newBowl(2);}classCupboard{Bowlb3=newBowl(3);staticBowlb4=newBowl(4);Cupboard(){System.out.println("Cupboard()");b4.f(2);}voidf3(intmarker){System.out.println("f3("+marker+")");}staticBowlb5=newBowl(5);}publicclassStaticInitializa

8、tion{publicstaticvoidmain(String[]args){System.out.println("CreatingnewCupboard()inmain");newCupboard();System.out.println("CreatingnewCupboard()inmain");newCupboard();//re-

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

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

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