论坛上有一个问题,
静态块甚至在应用程序中没有主方法执行.
1.正确
2.错误
我已回答了问题,2. False并在我的机器上尝试了以下代码.它没有执行任何操作也没有显示任何错误.
public class StaticBlockDemo {
    static {
        System.out.println("Hello World");
    }
}
Run Code Online (Sandbox Code Playgroud)
那么正确的答案是什么?顺便说一下,我正在使用Java 7.
ars*_*jii 36
如果你System.exit(0)在static-block 的末尾添加一个,它将在Java 6及更低版本中运行时没有错误(没有有效的main!).这是因为在搜索有效方法之前static执行了块,因此如果在静态块结束时退出程序,则不会收到任何错误.main
但是, Java 7中更改了此行为; 现在你必须包括一个明确的main,即使它可能永远不会到达.
在Java 7中,问题的答案是错误的,但在Java 6及以下版本中答案确实如此.
public class Test {
    static {
        System.out.println("Hello World");
        System.exit(0);
    }
}
Run Code Online (Sandbox Code Playgroud)
Java 6:
Hello World
Java 7:
Error: Main method not found in class Test, please define the main method as: public static void main(String[] args)
静态块在初始化类时执行。通常,main该类将导致bootstrap类的初始化,但是还有其他方法来引导程序,例如通过VM的本机嵌入API。
调用static main类的方法会导致其初始化,但是其他很多事情也是如此:
有关更多详细信息,请参见JLS第12.4章
下面显示了此操作
public class Foo {
  static { System.out.println("Foo initialized"); }
  public static void main(String... argv) {
    Initialized.callingThisCausesClassInitialization();
  }
  static class Initialized {
    static { System.out.println("Initialized initialized"); }
    static void callingThisCausesClassInitialization() {}
  }
  static class NotInitialized {
    static { System.out.println("NotInitialized initialized"); }
    static void callingThisCausesClassInitialization() {}
  }
}
Run Code Online (Sandbox Code Playgroud)
运行foo将打印
Foo initialized
Initialized initialized
Run Code Online (Sandbox Code Playgroud)
它不会打印
NotInitialized initialized
Run Code Online (Sandbox Code Playgroud)
因为在该程序的执行过程中没有执行任何操作导致其初始化。
像NotInitialized上面那样,您的类似乎具有这种行为,因为它从未使用过。