我有2个罐子,我们称之为a.jar和b.jar.
b.jar取决于a.jar.
在a.jar中,我定义了一个类,我们称之为StaticClass.在StaticClass中,我定义了一个静态块,调用名为"init"的方法:
public class StaticClass {
static {
init();
}
public void static init () {
// do some initialization here
}
}
Run Code Online (Sandbox Code Playgroud)
在b.jar中,我有一个main,所以在main中,我希望已经调用了init()方法,但实际上并没有.我怀疑是因为静态类没有被jvm加载,任何人都可以告诉我
谢谢
当我y通过使用Checks.y(Checks作为子类)调用静态变量时,不执行静态块,y并且不会更新值.
class Par {
static int y = 4;
}
class Checks extends Par {
static {
y = 5;
}
}
public class Check {
public static void main(String args[]) {
System.out.println(Checks.y); // here printing 4
}
}
Run Code Online (Sandbox Code Playgroud)
由于静态在所有子类之间共享,因此应该更新该值.
它背后的原因是什么?