Loading

课后整理总结-10.8

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

动手动脑问题:

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

 

 

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

2.TestStaticInitializeBlock.java的运行结果

 

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

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

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

 

 

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

 

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

 

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

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

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

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

 -byAurora

posted @ 2022-10-06 18:18  冰稀饭Aurora  阅读(16)  评论(0编辑  收藏  举报