java - 为什么我的静态代码块不执行?

标签 java static

我正在尝试运行这段代码,但我发现了 final with static 的这种行为:代码运行时没有执行 A 的静态 block 。请提供原因。

class A {
  final static int a=9;
    static { //this block is not executing ??
      System.out.println("static block of A");
     }
}

class Manager {
  static {
    System.out.println("manager sib");
  }

  public static void main(String ...arg) {
    System.out.println("main");
    System.out.println(A.a);
  }
}

为什么A类静态 block 不运行?

最佳答案

问题是 A.aconstant variable .

A variable of primitive type or type String, that is final and initialized with a compile-time constant expression (§15.28), is called a constant variable.

因此你的 Manager.main 方法被编译完全就好像它是:

public static void main(String ...arg) {
    System.out.println("main");
    System.out.println(9);
}

不再有对 A.a 的真正引用,因此 A 类甚至不需要存在,更不用说初始化了。 (您可以删除 A.class 并仍然运行 Manager。)

如果您依赖于使用 A.a 来确保类型已初始化,则不应添加无操作方法:

public static void ensureClassIsInitialized() {
} 

然后只需从您的main 方法中调用that。不过,需要这样做是非常不寻常的。

关于java - 为什么我的静态代码块不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15509337/

相关文章:

java.lang.IndexOutOfBoundsException : Index: 0, 大小 : 0?

java - 如何使用 Derby JDBC 获取外键引用?

c++ - 如何使用 Eclipse 在静态库上添加 .o?

android - Android Activity中静态final的使用

java - 为什么java(>=7版本)不支持运行没有main方法的程序?

java - 如何使用 Java Web 服务处理同一个信封中的多个 SOAP 请求?

java - Eclipse 是否有将类型层次结构合并到单个类中的工具?

java - 如何修复服务器返回 HTTP 响应代码 400 且无法处理转换的问题

python - 在 Heroku 上为 Django 处理静态文件和模板的正确方法

c++ - 如何使用静态库编写 R 扩展