此时输出结果为100 300.
将field200放在int field之后结果变为200 300.
执行类成员时,要看类定义时的值哪个排在前边,就执行那一个值。
静态方法要想访问同一类中的非静态成员,需要将实例成员的值赋给静态成员,再用静态方法访问静态成员,进而访问实例成员。
课后作业:
当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。请自行编写示例代码验证以上结论:
实验代码:
package demo;
public class Test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Grandson kd=new Grandson();
}
}
class Dad
{
String post="dad";
Dad()
{
System.out.println("dad="+post);
}
}
class Son extends Dad
{
String post="son";
Son()
{
System.out.println("son="+post);
}
}
class Grandson extends Son
{
String post="grandson";
Grandson()
{
System.out.println("son="+post);
}
}
实验结果dad=dad;
son=son;
grandson=grandson;
动手动脑:
如果定义初始化块时使用了static修饰符,则变成了静态初始化块。静态初始化块时类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。
因此静态初始化块总是比普通初始化块先执行。
.
此时输出结果为100 300.
将field200放在int field之后结果变为200 300.
执行类成员时,要看类定义时的值哪个排在前边,就执行那一个值。
静态方法要想访问同一类中的非静态成员,需要将实例成员的值赋给静态成员,再用静态方法访问静态成员,进而访问实例成员。
课后作业:
当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。请自行编写示例代码验证以上结论:
实验代码:
package demo;
public class Test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Grandson kd=new Grandson();
}
}
class Dad
{
String post="dad";
Dad()
{
System.out.println("dad="+post);
}
}
class Son extends Dad
{
String post="son";
Son()
{
System.out.println("son="+post);
}
}
class Grandson extends Son
{
String post="grandson";
Grandson()
{
System.out.println("son="+post);
}
}
实验结果dad=dad;
son=son;
grandson=grandson;
动手动脑:
如果定义初始化块时使用了static修饰符,则变成了静态初始化块。静态初始化块时类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。
因此静态初始化块总是比普通初始化块先执行。
.