这是我的代码:为什么.class不能调用类中的静态块?
public class StupidClass {
static {
System.out.println("Stupid class loaded!");
}
}
和我有测试,我跑分别。
import org.junit.Test;
public class StupidTest {
@Test
public void foo() throws ClassNotFoundException {
final Class<?> stupidClass = Class.forName("StupidClass");
System.out.println(stupidClass.getSimpleName());
}
@Test
public void bar() throws ClassNotFoundException {
final Class<StupidClass> stupidClassClass = StupidClass.class;
System.out.println(stupidClassClass.getSimpleName());
}
}
当我运行测试富我会看到:
Stupid class loaded!
StupidClass
但是当我运行测试酒吧所有我看到的是:
StupidClass
从this页面引用..
类对象是由Java虚拟机 自动构造的,因为在加载类时以及调用类加载器中的defineClass方法 。
所以我的理解是,在测试吧,愚蠢的类被加载,否则我会看到一个空我猜?因此,在创建类对象,因为类本身被加载..
而且现在从this页面引用时,JVM(类加载器 - 以 具体)
静态初始化块运行加载StaticClass(发生第一次是代码中引用的 )。
所以我期待看到“愚蠢的类加载!”测试栏中的文字也是如此,但我不是。
另外引述每个类糖果,胶,和曲奇具有静态子句是 作为类被装载在第一次执行。
这是不是很准确,似乎..
我缺少什么?
如果您将两个测试作为一个或分开的进程运行,则应该提及。 –
@DuongNguyen我做过了吗? “和我的测试,我分开运行。” –
我的错误。有趣的问题。我的猜测是这个类在这种情况下还没有真正加载过。 –