Java中类初始化代码块和父类构造器执行顺序问题,
阿神
阿神 2017-04-18 10:10:52
[Java讨论组]
阿神
阿神

闭关修行中......

全部回复(2)
PHP中文网

找了半天也没找到block的执行时间,后来使用javap -c查看class文件发现block被扔到构造器里面了,并且invokespecial superclass的<init>方法也在里面,不过在block前面,这就解释了你的问题了。

高洛峰

首先,使用javac命令编译java类后,该java类的初始化代码块会消失——初始化代码块中的代码会被“还原”到每个构造器中,且位于构造器所有代码前面。

基本流程:

1.为要创建的对象分配内存空间,其大小取决于Java类及其父类和祖先类包含的所有实例域的数量和类型
2.如果内存分配成功(失败会抛出OutOfMemoryError错误),把新创建的对象的所有实例域(包括父类的)都设为默认值
3.调用构造方法
    ①调用父类的构造方法,如果没有显式使用super关键字进行调用,则由编译器自动生成相关的代码
    ②按照类中实例域的顺序初始化实例域的值
    ③执行类的构造方法中的其他代码完成最终的初始化工作

具体你自己分析。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号