Die main-Parameter
Lösung geprüft
Die Aufgabe der heutigen Stunde sind die main-Parameter! Diese Zeile tippen wir seit der E-Phase in jedes Programm, ohne groß darüber nachzudenken:
public static void main(String[] args) {
Jedes Wort darin hat einen Grund, und das args am Ende
ist nicht bloß Dekoration – man kann da wirklich was reinschreiben.
Genau das probieren wir aus.
Jedes Programm wird über die Methode main gestartet.
public: Zugriff außerhalb der Klasse Main ist auf die
Methode main erlaubt. static: Die Methode kann ohne ein
Objekt aufgerufen werden. void: Die Methode hat keine
Rückgabe. main: Ist der Methodenname.
String[] args: Der Parameter-String-Array
args kann beim Aufruf des Programms befüllt werden.
Probiere das Beispiel im Java-Editor aus. Aus der main-Methode wird
die Methode sagAufWiedersehen aufgerufen.
Lösungsprozess der Aufgabe
/**
*
* Die main-Parameter ausprobieren
*
* @version 1.0 vom 22.05.2023
* @meininfokurs.cmrg.site
*/
public class Main {
public static void sagAufWiedersehen() {
System.out.println("Auf Wiedersehen");
System.out.println("Bis bald");
}
public static void main(String[] args) {
System.out.println("Hallo " + args[0]);
sagAufWiedersehen();
} // end of main
} // end of class Main
Wo man die Parameter einträgt
Der wichtigste Teil der Aufgabe steht gar nicht im Code. Startest du das Programm einfach so, kracht es sofort:
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
Kein Wunder: args ist ein Array, und wenn beim Start
nichts übergeben wurde, ist es leer. args[0] gibt es dann
nicht. Im Java-Editor trägt man die Werte unter
Start > Parameter… ein. Schreibst du dort
David rein, kommt raus:
Hallo David
Auf Wiedersehen
Bis bald
Mehrere Parameter trennt man mit Leerzeichen. Aus
David Gomez wird dann args[0] = „David" und
args[1] = „Gomez". Braucht man ein Leerzeichen
innerhalb eines Parameters, setzt man Anführungszeichen:
"David Gomez" ist ein einziger Parameter.
Die vier Wörter vor main
| Wort | Bedeutung | Was ohne passiert |
|---|---|---|
public | Von überall aufrufbar | Bei private könnte die JVM das Programm nicht starten |
static | Gehört zur Klasse, nicht zu einem Objekt | Ohne static bräuchte man ein Objekt – aber vor dem Start gibt es noch keins |
void | Keine Rückgabe | An wen sollte die auch gehen? Das Programm ist danach zu Ende |
String[] args | Die Werte, die beim Start mitgegeben werden | Ohne den Parameter findet die JVM die main-Methode gar nicht |
static ist das interessanteste davon. Es ist ein
Henne-Ei-Problem: um eine normale Methode aufzurufen, braucht man ein
Objekt. Objekte entstehen aber erst, wenn das Programm läuft. Also muss
die allererste Methode ohne Objekt aufrufbar sein – und genau das
bedeutet static.
Warum sagAufWiedersehen auch static ist
Das ist die Stelle, an der man beim Nachbauen hängenbleibt. Die Methode
sagAufWiedersehen() ist ebenfalls static. Muss
sie auch, denn sie wird direkt aus main aufgerufen – ohne
ein Objekt davor.
sagAufWiedersehen(); // geht, weil beide static sind
new Main().sagAufWiedersehen(); // waere noetig, wenn sie nicht static waere
Lässt du das static weg, sagt der Compiler
non-static method cannot be referenced from a static context.
Das ist eine der Fehlermeldungen, die man in der E-Phase ständig
bekommt, ohne zu wissen woher. Jetzt weißt du es: eine static-Methode
kann nichts aufrufen, das ein Objekt braucht.
if (args.length > 0) vor dem Zugriff
auf args[0] – dann fliegt das Programm nicht raus, wenn
man die Parameter vergisst. In der Aufgabe ist das nicht gefordert, und
der Absturz ist hier sogar ganz lehrreich.