legal main method signature in java

Ravi picture Ravi · Nov 28, 2012 · Viewed 21.6k times · Source
class NewClass{
public static void main(String a){
    System.out.print("Hello");
}
}

When I'm trying to execute above code, then it shows an error, main method not found. But when I changed public static void main(String a) to public static void main(String... a) or public static void main(String a[]). Then, it works..!!

So, My question is how many different ways we can write legal main method signature and what this signature public static void main(String... a) means ?

Answer

Andrzej Doyle picture Andrzej Doyle · Nov 28, 2012

Simply because that's the requirement of Java.

A main method/entry point to a program must be a method declared as public static void main(String[] args). Your method that was declared with a String parameter was similar but not compatible.

An array is not the same as a single String - if someone invoked Java with three command-line parameters, the JVM would create a three-element string array, and then how would it pass this into your method that only takes a single string?

So in that case you were trying to launch a Java program based on a class that did not have an main method to act as an entry point.

(The reason why String... works is because this is syntactic sugar for an array parameter, and compiles down to a method with the same signature.)