Java 18.0.2无main方法使用静态块正常运行的原因咨询
为什么Java 18中不含main方法仅用静态块的代码能正常编译运行?
编译阶段
Java编译器仅校验代码语法合法性,不强制要求类必须包含main方法。只要代码本身没有语法错误,就能顺利通过编译,这是你的代码能编译成功的核心原因。
运行阶段
JVM启动后会先加载指定的目标类,类加载过程中会自动执行类中的静态初始化块(static块)。你的代码里的静态块不仅完成了打印逻辑,最后还调用了System.exit(0)——这个方法会直接终止当前JVM进程。
正常情况下,如果类中没有定义main方法,JVM在完成类加载和静态块执行后,会抛出NoSuchMethodError: main异常。但由于你的静态块提前调用了System.exit(0),JVM还没来得及抛出这个异常就已经正常退出了,所以你看不到报错,只会看到静态块里的输出内容。
你的代码示例:
class StaticBlockPrint{ static { System.out.println("Hello world!"); int i = 8; i =i+8; System.out.println(i); System.exit(0); } }
内容的提问来源于stack exchange,提问作者Mahipal bisht
相关产品推荐
相关产品推荐

