Q1 OOP in Java

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.

Die Aufgabenstellung lautet

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

Main.java
/* meininfokurs.cmrg.site */
/**
 *
 * 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:

Konsole
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:

Konsole
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

WortBedeutungWas ohne passiert
publicVon überall aufrufbarBei private könnte die JVM das Programm nicht starten
staticGehört zur Klasse, nicht zu einem ObjektOhne static bräuchte man ein Objekt – aber vor dem Start gibt es noch keins
voidKeine RückgabeAn wen sollte die auch gehen? Das Programm ist danach zu Ende
String[] argsDie Werte, die beim Start mitgegeben werdenOhne 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.

Sicherer wäre 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.

Aufgabe suchen

Tippe los. Strg+K öffnet die Suche von überall.

Zuletzt angesehen

Werbung