我对此方案有疑问
我有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”)}
将被执行。
答案 0 :(得分:3)
一旦将类加载到虚拟机中,静态初始化程序块就会立即执行。您的代码正在访问类B
中的静态字段,这将导致加载类并执行静态初始化程序。
类A
是否扩展了类B
并不重要。
答案 1 :(得分:1)
根据specification,当JVM加载Class时,将执行静态初始化程序。所以,这意味着,在你的情况下,只要你得到一个A类的实例,就会毫无疑问地执行它。