作业

此时输出结果为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修饰符,则变成了静态初始化块。静态初始化块时类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。

因此静态初始化块总是比普通初始化块先执行。

.

原文地址:https://www.cnblogs.com/my1204/p/4887687.html