Java main method has a must follow signature, which is
Anything except that doesn't considered a main method. In your code main() method has a different signature but a valid method signature, so no compile time error. But when Java tuntime checks for the main method it couldn't find the method and given the runtime exception.
public static void main(String[] args) is the syntax(i.e., in Java the main method will take an argument of array of String Objects) if you write public static void main(void) the compiler will check the syntax.. that is why your getting that.
Having a method named main() does not really save the purpose. If at all you have a method named main() whose signature exactly matches to that of JVM's expectation, you will be through.
While compiling,
All of them are legal as such they are compliant to the JLS.
But when you think of running the program by invoking the main() method which the JVM expects, your method should exactly match
If the JVM is unable to find such a method in the class which is invoked along with the "java" executable as
It throws a "NoSuchMethodError" because it does not find one.
Note: The order of the keywords "public" "static" may vary. The name of the String array argument "args" also can be of any legal identifier name.