Java Language The Java Command - 'java' and 'javaw' Entry point classes


A Java entry-point class has a main method with the following signature and modifiers:

public static void main(String[] args)

Sidenote: because of how arrays work, it can also be (String args[])

When the java command starts the virtual machine, it loads the specified entry-point classes and tries to find main. If successful, the arguments from command line are converted to Java String objects and assembled into an array. If main is invoked like this, the array will not be null and won't contain any null entries.

A valid entry-point class method must do the following:

  • Be named main (case-sensitive)
  • Be public and static
  • Have a void return type
  • Have a single argument with an array String[]. The argument must be present and no more than one argument is allowed.
  • Be generic: type parameters are not allowed.
  • Have a non-generic, top-level (not nested or inner) enclosing class

It is conventional to declare the class as public but this not strictly necessary. From Java 5 onward, the main method's argument type may be a String varargs instead of a string array. main can optionally throw exceptions, and its parameter can be named anything, but conventionally it is args.

JavaFX entry-points

From Java 8 onwards the java command can also directly launch a JavaFX application. JavaFX is documented in the JavaFX tag, but a JavaFX entry-point must do the following:

  • Extend javafx.application.Application
  • Be public and not abstract
  • Not be generic or nested
  • Have an explicit or implicit public no-args constructor