public static void main(String arg[ ] ) in java is it fixed?

java

Solution

The signature of the main method is specified in the Java Language Specifications section 12.1.4 and clearly states:

The method main must be declared public, static, and void. It must specify a formal parameter (§8.4.1) whose declared type is array of String.

- it must be `public` otherwise it would not be possible to call it

- it must be `static` since you have no way to instantiate an object before calling it

- the list of `String` arguments is there to allow to pass parameters when executing a Java program from the command line. It would have been possible to define it without arguments but is more practical like that (and similar to other languages)

- the return type is `void` since it does not make sense to have anything else: a Java program can terminate before reaching the end of the main method (e.g., by calling `System.exit()`)

The method signature can therefore be:

public static void main( String[] args )
public static void main( String... args )

note that the varargs version (`...`) is only valid from Java 5

As the Java language allows the brackets `[]` to be positioned after the type or the variable (the first is generally preferred),

public static void main( String args[] ) // valid but usually non recommended

is also valid

Problem

I was recently asked in an exam if `public static void main(String arg[])` format of `main` method was fixed? Can we change it? Can we use `main` without any of `public`, `static` or `void`? If not, why is it not hard coded that `main(String arg[])` would stand for `public static void main(String arg[])` always?

Original source

Related problems