我有这个班级
public class demo3 {
private static void sum()
{
}
}
当我尝试运行此类时,我预计错误为java.lang.NoSuchMethodError main Exception in thread "main "
然而,输出有点不同,我得到了消息
Error: Main method not found in class demo3, please define the main method as:
public static void main(String[] args)
现在这让我产生了好奇心,在这种情况下我会得到java.lang.NoSuchMethodError,或者在这种情况下我会收到其他错误信息。
答案 0 :(得分:2)
如果在您要求JVM开始运行的类中找不到public static void main(String[])
,则会收到Main method not found
消息。也就是说,无法找到整个程序的入口点。
如果您的(已经运行的)代码尝试在编译时可用的类上调用方法,但在运行时使用的类的版本中不可用,则会得到java.lang.NoSuchMethodError
消息(对于例如,您针对该库的一个版本进行编译,然后更新库jar而不重新编译)。这可以在程序中的任何一点发生。
JLS中没有任何内容表明NoSuchMethodError
不能被抛出,而不是Main method not found
;然而,未能编写main
方法(或者完全写入,或者写一个带有错误签名的方法)是一个比“编译后改变的类”更常见的错误,特别是对于初学者,{{1可能太神秘了。在这种情况下提供更加用户友好的消息没有任何害处。