Java中main方法返回类型错误为何未触发编译错误仅抛运行时异常?
为什么修改main方法返回类型为long只触发运行时异常而非编译错误?
这其实是Java编译规则和JVM启动要求的差异导致的,咱们一步步拆解清楚:
编译阶段:语法合规,所以不报错
Java编译器只检查方法声明的语法是否符合规范——你写的public static long main(String[] args)完全符合静态方法的声明规则:有合法的修饰符、返回类型、参数列表。编译器并不会强制要求main方法必须返回void,它只关心代码语法上有没有错误,所以编译能顺利通过。运行阶段:JVM找不到标准入口,抛出异常
当你用java命令启动这个类时,JVM会严格寻找精确匹配签名的入口方法:public static void main(String[] args)。这是JVM启动程序的硬性要求,它不会去识别其他返回类型的main方法。如果找不到这个标准方法,JVM就会抛出运行时异常,提示你需要定义正确的main方法。
补充个小细节:如果你把这个类当成普通类来调用(比如在另一个类里写Jfilestr.main(null)),那完全可以正常运行,因为这时候只是调用一个普通的静态方法,不是JVM的启动入口。
你的代码示例:
class Jfilestr { public static long main(String[] args) { System.out.println("Hello"); return 10L; //It will give the runtime exception. /*Error: Main method must return a value of type void in class Jfilestr, please define the main method as: public static void main(String[] args)*/ } }
内容的提问来源于stack exchange,提问作者user7013574
相关产品推荐
相关产品推荐

