这个Java程序是如何执行的?

时间:2017-08-15 18:14:05

标签: java

    class Welcome{
        public static void main(String args[]){
            System.out.println(Hello.a);
        }
    }
    class Hello{
        static int a=10;
        static Hello h=new Hello();
        {
            System.out.println("IB");
        }
        static{
            System.out.println("SB");
        }
    }

输出:

 IB
 SB
 10

我真的不明白这次执行背后的逻辑。据我所知,静态变量被初始化并且静态块被执行。然后,初始化实例变量并执行实例块。

然而,这似乎有点令人困惑。如果给出实际执行的逐步顺序,那将是一个很大的帮助。

static Hello h=new Hello();是什么意思?

这将如何对待?

1 个答案:

答案 0 :(得分:3)

我修复了class关键字并将其运行完毕。当你看到它正在运行时,执行非常简单。

  1. 初始化静态变量。这意味着ah已设置。
  2. 运行初始化程序块。所以" IB"打印出来。它们之所以运行是因为h的值是一个新的Hello对象。 注意:这只是因为h在类中的static初始化程序块之前定义。如果您更改它们在代码中出现的顺序,那么执行顺序将会改变。

  3. 运行静态初始化程序块。所以" SB"打印出来。

  4. 调用main方法,打印出Hello.a。因此打印10
  5. IDEOne链接http://ideone.com/KfdS6n