关于静态块的查询

时间:2015-09-08 05:56:12

标签: java

我对此方案有疑问

我有2节课 A类和B类在2个不同的包中,如下所示。

Package test1 // first Package
public class B
{
public static int q = 10; // having one static variable
static
{
system.out.println ("test")// One static block which is printing something
}
}

在第二个包中

Package test   
import test1.B  // Importing class B from Package test1
public class A
{
int c = B.q // reading the value q from class B
}

因此,在这种情况下,我将执行A类,即B类中的静态块

  

static {system.out.println(“test”)}

将被执行。

2 个答案:

答案 0 :(得分:3)

一旦将类加载到虚拟机中,静态初始化程序块就会立即执行。您的代码正在访问类B中的静态字段,这将导致加载类并执行静态初始化程序。

A是否扩展了类B并不重要。

答案 1 :(得分:1)

根据specification,当JVM加载Class时,将执行静态初始化程序。所以,这意味着,在你的情况下,只要你得到一个A类的实例,就会毫无疑问地执行它。