3.11 Der Einstiegspunkt für das Laufzeitsystem: main() 

In Java-Klassen gibt es – ähnlich wie in C(++) – eine besondere Funktion main(), die das Laufzeitsystem in der angegebenen Hauptklasse (oder Startklasse) des Programms aufruft. Die main()-Funktion ist für alle Klassen und in der JVM zugänglich (public) und auf jeden Fall statisch (static) zu deklarieren. Die Funktion muss statisch sein, da die JVM die Funktion auch ohne Exemplar der Klasse aufrufen möchte. Als Parameter wird ein Array von String-Objekten angenommen. Darin sind die auf der Kommandozeile übergebenen Parameter gespeichert:
public static void main( String[] args )
Ab Java 5 ist durch die variablen Argumentlisten alternativ gültig:
public static void main( String... args )
Stimmt der Kopf der Methode nicht, wird diese Funktion nicht als Einstiegspunkt von der virtuellen Maschine erkannt.
Hinweis Im Gegensatz zu C(++) steht im ersten Element des Argument-Arrays mit Index 0 nicht der Programmname, also der Name der Hauptklasse, sondern bereits der erste Programmparameter der Kommandozeile. |
3.11.1 Kommandozeilen-Argumente verarbeiten 

Eine besondere Variable für die Anzahl der übergebenen Argumente der Kommandozeile ist nicht erforderlich, weil das String-Array-Objekt uns diese Information über length mitteilt. Um etwa alle übergebenen Argumente über die erweiterte for-Schleife auszugeben, schreiben wir:
Listing 3.21 LovesGoldenHamster.java, main()
public static void main( String[] args ) { if ( args.length == 0 ) System.out.println( "Was!! Keiner liebt kleine Hamster?" ); else { System.out.print( "Liebt kleine Hamster: " ); for ( String s : args ) System.out.format( "%s ", s ); System.out.println(); } }
Das Programm lässt sich auf der Kommandozeile wie folgt aufrufen:
$ java LovesGoldenHamster Raphael Perly Mirjam Paul
Bibliothek Zum Parsen der Kommandozeilenargumente bietet sich zum Beispiel die Bibliothek Jakarta Commons CLI (http://jakarta.apache.org/commons/cli/) an. |
3.11.2 Der Rückgabewert von main() und System.exit() 

Der Rückgabetyp void der Startfunktion main() ist sicherlich diskussionswürdig, da diejenigen, die die Sprache entworfen haben, auch hätten fordern können, dass ein Programm immer einen Statuscode an das aufrufende Programm zurückgibt. Für diese Lösung haben sie sich aber nicht entschieden, da Java-Programme in der Regel nur minimal mit dem umgebenden Betriebssystem interagieren sollen und echte Plattformunabhängigkeit gefordert ist, etwa bei Java in Handys. Für die Fälle, in denen ein Statuscode zurückgeliefert werden soll, steht die Funktion System.exit(status) zur Verfügung; sie beendet eine Applikation. Das an exit() übergebene Argument nennt sich Statuswert (engl. exit status) und wird an die Kommandozeile zurückgegeben. Der Wert ist für Skriptprogramme wichtig, da sie über diesen Rückgabewert auf das Gelingen oder Misslingen des Java-Programms reagieren können. Ein Wert von 0 zeigt per Definition das Gelingen an, ein Wert ungleich 0 einen Fehler. Der Wertebereich sollte sich zwischen 0 und 255 bewegen. Unter der Unix-Kommandozeile ist der Rückgabewert eines Programms unter $? verfügbar.
final class java.lang.System |
- static void exit( int status )
Ein Aufruf von exit() beendet die aktuelle JVM und gibt das Argument der Funktion als Statuswert zurück. Ein Wert ungleich null zeigt einen Fehler an. Also ist der Rückgabewert beim normalen fehlerfreien Verlassen null. Eine SecurityException wird ausgelöst, falls der aktuelle SecurityManager dem aufrufenden Code nicht erlaubt, die JVM zu beenden. Das gilt insbesondere bei Applets in einem Webbrowser.