例如 -
class A3{
static{
System.out.println("static block is invoked");
System.exit(0);
}
}
有人向我解释原因。
答案 0 :(得分:2)
如果没有main()
,“程序”就无法执行(除非它是servlet或applet,在这种情况下,Web容器或Web浏览器管理相应的entry point)。在您的示例中,一个静态块,只有在其他运行类初始化(通常通过引用)类A3
时才会执行。
JLS-8.7. Static Initializers读取(部分)
在类初始化(§12.4.2)时执行类中声明的静态初始化程序。
答案 1 :(得分:2)
静态块在首次初始化时(在加载之后)执行。 main()
方法用作应用程序的入口点。首次引用类时,(隐式)加载类(并且可能初始化)。
看到差异?您需要通过将main()方法放入类中来指定程序/应用程序的入口点。初始化类时运行静态初始化程序,它不是程序的入口点,而是在初始化类时运行的一组语句(通常用于执行某些设置工作,如初始化静态字段(如映射))
答案 2 :(得分:0)
在程序启动时不一定要调用静态块;它可以延迟到每次初始化类时。有必要指定一个带有main函数的主类,以指示应该在程序启动时调用的入口点,以及Java的工作原理。
答案 3 :(得分:0)
如果要打印简单的打印语句,静态块就足够了。但实时程序从不包含system.out.println语句。而且你不能访问非静态变量,方法......等等,这意味着它没用。