java实例化对象时的执行顺序.docx_第1页
java实例化对象时的执行顺序.docx_第2页
java实例化对象时的执行顺序.docx_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题*几大原则*一、静态成员变量(Static)1、静态成员变量为类变量,所有对象共享同一内存空间2、 静态成员变量的声明和定义仅在首次加载类时执行一次3、 首次加载类时首先对所有静态成员变量根据类型默认赋初值,然后再对有右值的附右值 * 二、静态初始块 1、静态初始化块仅在首次加载类时执行一次多个静态成员变量与静态始化快参照出现顺序先后执行*三、动态成员变量 1、动态成员变量定义在每次实例化对象时在构造函数之前执行 *四、动态初始化块 1、动态初始化块在每次实例化对象时在构造函数之前执行多个动态成员变量与动态初始化块参照出现顺序先后执行*总结:总的来说,在不涉及继承的前提下,当首次加载类时,按照如下顺序执行 *1、按照出现顺序先后执行静态成员变量定义与静态初始化块 *2、按照出现顺序先后执行动态成员变量定义与动态初始化块 *3、执行构造函数 *再次实例化对象时只执行第2、3步即可 *成员变量与定义与初始化块先于构造函数执行 *五、当涉及到继承时,按照如下顺序执行 1、执行父类的静态成员变量定义与静态初始化块,执行子类的静态成员变量定义与静态初始化块 2、执行父类的非静态成员变量定义与动态初始化块,执行父类构造方法 3、执行子类的非静态成员变量定义与动态初始化块,执行子类构造方法*另:父类构造方法中用到的方法如果已被子类重写,那么在构造子类对象时在调用父类构造函数中使用子类重写的方法如果一个类的成员变量没有在定义时,系统会给予系统默认的值,有号的就直接给予右值,系统在给予初值和号给予值这2中方式,在执行时间上有先后吗?1. publicclassTest04.2. privatestaticTest04t1=newTest04();3. privatestaticinti1;4. privatestaticinti2=2;5. 6. publicTest04().7. i1+;8. i2+;9. 10. 11. publicstaticvoidmain(Stringargs).12. Test04t2=newTest04();13. System.out.println(t2.i1=+t2.i1);14. System.out.println(t2.i2=+t2.i2);15. 16. 17. 执行代码后:18. t2.i1=219. t2.i2=3为什么是2和3呢?其实代码的执行顺序是这样的:首先执行给t1,i1,i2分别给予初始值null,0,0,再执行Test04 t1 =new Test04(),这样i1+,i2+被执行,i1,i2都变为1,执行完毕后接着执行int i1; i1,i2的值仍然是1,1,当执行int i2 = 2时i2被赋予了值,即i1 = 1,i2=2;再执行Test04 t2 = new Test04(),i1,i2再执行,此时i1 2,i2 3,输出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论