相关疑难解决方法(0)

何时执行类的静态块?

我有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加载,任何人都可以告诉我

  1. 我的结论是否正确?
  2. 触发jvm加载类的原因是什么?
  3. 如何自动执行静态块?

谢谢

java initialization

69
推荐指数
3
解决办法
6万
查看次数

即使在Java中初始化子类之后,静态变量的值也没有改变

当我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)

由于静态在所有子类之间共享,因此应该更新该值.

它背后的原因是什么?

java inheritance jvm static-block static-variables

32
推荐指数
2
解决办法
1448
查看次数