• 动手动脑及试验


    Java字段初始化规律:

    输出结果:100

                 300

    Java字段初始化规律:Java进行初始化的地方有两个,初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块(以上程序为实例初始化块)。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个排在前面。当有两个构造函数时依据参数个数进行引用。

      动手动脑1

     源程序代码:

     

    public class JiCheng {

    public static void main(String[] args) {

         Son s= new Son();

          s.print();

             }

    }

    class Father{

            String name;

            int age;

      {

           name="mm";

           age=21;

              }

    }

    class Son extends Father{

              String like="football";

    void print()

    {

    System.out.println("name:"+name+" age:"+age+" aihao"+like);

               }

     

    }

    结果截图:

     

     

                                     动手动脑2

    请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

    源程序代码:

    class Root

    {

    static{

              System.out.println("Root的静态初始化块");

         }

    {

              System.out.println("Root的普通初始化块");

    }

    public Root()

    {

               System.out.println("Root的无参数的构造器");

          }

    }

    class Mid extends Root

    {

    static{

             System.out.println("Mid的静态初始化块");

    }

    {

             System.out.println("Mid的普通初始化块");

    }

    public Mid()

    {

              System.out.println("Mid的无参数的构造器");

    }

    public Mid(String msg)

    {

    //通过this调用同一类中重载的构造器

         this();

         System.out.println("Mid的带参数构造器,其参数值:" + msg);

    }

    }

    class Leaf extends Mid

    {

    static{

           System.out.println("Leaf的静态初始化块");

    }

    {

          System.out.println("Leaf的普通初始化块");

    }

    public Leaf()

    {

    //通过super调用父类中有一个字符串参数的构造器

            super("Java初始化顺序演示");

           System.out.println("执行Leaf的构造器");

    }

     

    }

     

    public class TestStaticInitializeBlock

    {

    public static void main(String[] args) 

    {

           new Leaf();

             }

    }

     

    输出结果:

     

    静态初始化块的执行顺序:静态初始化块总是比普通初始化块先执行。与普通初始化块类似的是,系统在类初始化阶段执行静态初始化块时,不仅会执行本类的静态初始化块,而且还会一直上溯到java.lang.Object,先执行java.lang.Object类中的静态初始化块,然后执行其父类的静态初始化块,最后才执行该类的静态初始化块。经过这个过程,才完成了该类的初始化过程。只有当类初始化完成后,才可以在系统中使用这个类,包括访问类method、类Field,或者用这个类来创建实例。

     

                                   一个有趣的问题

    静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

    源程序代码:

    public class Test{ 

           int i =123;

           static int Temp;

     

    public static void A()

    {

            System.out.println(Temp);

    }

    public int B()

           int x = 100;

            return x; 

    }

     

    public static void main(String args[]) {

             Test e = new Test();

             Temp = e.B();

              e.A();

              }

    }

    结果截图:

  • 相关阅读:
    2019春总结作业
    第十周作业
    第九周作业
    第八周作业
    第七周作业
    202103226-1 编程作业
    1 20210309-2 阅读任务
    1 20210309-1 准备工作
    课程总结
    第十三周总结
  • 原文地址:https://www.cnblogs.com/sunmei20142925/p/4887389.html
Copyright © 2020-2023  润新知