分析一个笔试题

2019-08-13  本文已影响0人  淡看江湖等雨

运行下面这段代码,会输出什么?

public  class StaticTest {
      public static void  main ( String [] args ) {
             staticFunction ();
      }
   
      static StaticTest st  = new StaticTest ();

      static {
             System.out.println ("1");
      }

      {
            System.out.println("2");
      }
   
      StaticTest(){
            System.out.println("3");  
            System.out.println("a="+a+",b="+b);
      }

      public static void staticFunction(){
            System.out.println("4");
      }
   
      int a=110;
      static int b  = 112;
}

涉及的知识点:Java中赋值顺序:

父类的静态变量赋值
自身的静态变量赋值
父类成员变量赋值和父类块赋值
父类构造函数赋值
自身成员变量赋值和自身块赋值
自身构造函数赋值

其实这里还牵涉到一个冷知识,就是在嵌套初始化时有一个特别的逻辑。特别是内嵌的这个变量恰好是个静态成员,而且是本类的实例。这会导致一个有趣的现象:“实例初始化竟然出现在静态初始化之前”

最后公布一下答案:

2
3
a = 110 , b = 0
1
4
上一篇 下一篇

猜你喜欢

热点阅读