Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between java.lang.NoSuchMethodError main Exception in thread "main " and Error: Main method not found in class

Tags:

java

jvm

I have this class

public class demo3 {
    private static  void sum()
    {       
    }
}

when I tried to run this class, I expected the error to be java.lang.NoSuchMethodError main Exception in thread "main "

however, the output was a bit different and I got below message

Error: Main method not found in class demo3, please define the main method as:
   public static void main(String[] args)

now this got my curiosity as to in which case I will get java.lang.NoSuchMethodError or in which case I will get the other error message.

like image 995
Ngupta Avatar asked Dec 17 '25 13:12

Ngupta


1 Answers

You get the Main method not found message when public static void main(String[]) can't be found in the class that you've asked the JVM to start running. That is, the entry point of the overall program cannot be found.

You get the java.lang.NoSuchMethodError message if your (already running) code attempts to invoke a method on a class which was available at compile time, but not available in the version of the class you are using at runtime (for example, you compile against one version of the library, and then update the library jar without recompiling). This can occur at any point in the program.

There doesn't look to be anything in JLS which says that NoSuchMethodError can't be thrown, rather than the Main method not found; however, failing to write a main method (either entirely, or writing one with the wrong signature) is a far more common mistake than the "class changed after compilation" case, especially for beginners, for whom the NoSuchMethodError might be too cryptic. There is no harm in providing a more user-friendly message in this one case.

like image 163
Andy Turner Avatar answered Dec 19 '25 05:12

Andy Turner



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!