java.lang.NoSuchMethodError主要异常在线程“main”和Error:Main方法在类中找不到

时间:2017-06-01 14:47:22

标签: java jvm

我有这个班级

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,或者在这种情况下我会收到其他错误信息。

1 个答案:

答案 0 :(得分:2)

如果在您要求JVM开始运行的类中找不到public static void main(String[]),则会收到Main method not found消息。也就是说,无法找到整个程序的入口点。

如果您的(已经运行的)代码尝试在编译时可用的类上调用方法,但在运行时使用的类的版本中不可用,则会得到java.lang.NoSuchMethodError消息(对于例如,您针对该库的一个版本进行编译,然后更新库jar而不重新编译)。这可以在程序中的任何一点发生。

JLS中没有任何内容表明NoSuchMethodError不能被抛出,而不是Main method not found;然而,未能编写main方法(或者完全写入,或者写一个带有错误签名的方法)是一个比“编译后改变的类”更常见的错误,特别是对于初学者,{{1可能太神秘了。在这种情况下提供更加用户友好的消息没有任何害处。