课后整理总结-10.8

课件2及相关作业的整理总结:

动手动脑问题:

1.为何此代码不能编译通过:

 

 

 原因是上方创建新对象时没有参数,而下方对于构造函数的定义是有一个参数的,因此出现问题。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。解决方法:在上方加入参数或去掉下面的参数定义。

2.TestStaticInitializeBlock.java的运行结果

 

 由结果可知,顺序为:1>各类的静态初始化块2>类的非静态初始化块3>类的构造函数4>子类的非静态初始化块5>子类的构造函数

各类的静态初始化块首先执行,因为static初始化块是在构造函数之前执行的。执行顺序先静态再非静态。

初始化是在类加载的时候完成的,而构造方法生成对象,生成对象是在类加载完成之后完成的。因此先加载,后生成对象,故先执行初始化块。

 

 

构造方法在初始化块后执行。在执行完非静态代码块后,会立即执行其构造函数,然后执行子类的非静态代码块,然后执行子类的构造方法

 

课件上的实验代码:总结Java字段初始化的规律

 

 先说结论,初始化时优先级1>类的构造函数2>类的初始化块3>在执行类成员的时候默认给出的值, 另外顺序也会影响优先级

第一处未调用,初始化块在后来赋值之前,因此输出的为100即为赋值值;

第二处调用了构造方法,因此输出的为构造方法规定的300;

顺序的影响:如果我们把初始化块的顺序颠倒,结果如下:

 -byAurora

作者:冰稀饭Aurora

出处:https://www.cnblogs.com/rsy-bxf150/p/16758161.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   冰稀饭Aurora  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示