Main Methode in Java?

4 Antworten

- und warum sie Main heißt?

Wie bereits angemerkt, heißt die Methode main. Methodennamen werden nach Java-Konvention kleingeschrieben, zudem agiert die Sprache case-sensitive.

Die main-Methode stellt den Einstiegspunkt einer Java-Anwendung dar. Das heißt, wenn dein Programm ausgeführt wird, beginnt alles in dieser. Um das Wort main in der deutschen Sprache zu übersetzen, kann man Wörter wie hauptsächlich, Hauptleitung, Hauptkabel verwenden (siehe hier). Dies beschreibt ihre Funktion nicht schlecht - es handelt sich um den Weg, durch den der Programmfluss zuerst läuft.

- weshalb sie static ist

Java ist eine objektorientierte Sprache. Das bedeutet, das Programm wird durch Objekte beschrieben, die verschiedene Eigenschaften und Verhaltensweisen besitzen. Es könnte bspw. ein Objekt geben, welches Nachrichten auf der Konsole ausgibt oder ein Objekt, welches Eingaben von der Konsole einliest. Jedes Objekt muss zur Laufzeit erzeugt werden, damit man es und seine Funktionen / Attribute nutzen kann. Für die Erzeugung dienen Klassen als Blaupause / Template / Bauplan.

Damit die in der Hauptklasse deines Programmes definierten Elemente genutzt werden könnten, müssten sie also ebenso erst erzeugt werden.

Beispiel:

public class MyApplication {
  public void doSomething() { // some method, defined in your main class
    // do something ...
  }
}

// somewhere else ...
MyApplication applicationObject = new MyApplication(); // create object
applicationObject.doSomething(); // call method

Die Erzeugung des Objektes müsste aber zu Beginn geschehen, beim Einstiegspunkt deines Programmes. Da gäbe es aber nun ein Problem: Wie sollte eine Methode eines Objektes aufgerufen werden, wenn dieses noch nicht existiert und erst in dieser Methode erzeugt werden könnte?

Abhilfe schafft hier das Schlüsselwort static. Es definiert die main-Methode als objektungebunden. D.h. sie kann aufgerufen werden, ohne dass es eines Objekts der Klasse bedarf.

- Warum im Argument String[] args steht

Bei Aufruf deines Programmes können diesem auch noch Argumente mitgegeben werden. Führe folgendes Beispiel ruhig einmal durch:

1) Schreibe dieses Programm:

public class MyFirstApplication {
  public static void main(String[] args) {
    System.out.println(args[0]);
    System.out.println(args[1]);
  }
}

und speichere es als MyFirstApplication.java ab.

2) Erstelle im selben Ordner eine Datei run.bat mit folgendem Inhalt:

javac MyFirstApplication.java
java MyFirstApplication "Hello" "World"
pause

Voraussetzung hierbei ist, dass du das JDK in der PATH-Umgebungsvariable referenziert hast.

3) Führe die run.bat aus.

In ihrer ersten Zeile kompiliert sie deine Java-Datei (javac) und eine MyFirstApplication.class wird generiert. In der zweiten Zeile wird deine kompilierte Anwendung aufgerufen (java) und ihr zwei Werte übergeben: "Hello" und "World". Der pause-Befehl sorgt dafür, dass sich die Anwendung mitsamt der Konsole nicht sofort wieder schließt.

Sobald deine Anwendung ausgeführt wird, springt sie in die main-Methode deiner Klasse MyFirstApplication. Zuvor befüllt sie aber noch den Parameter args mit den übergebenen Werten aus der Konsole. Der Parameter kann aufgrund seines Datentyps String[] mehrere Zeichenketten in sich aufnehmen (String = Zeichenkette, die [] stellen ein Array dar - ein Element, welches mehrere Werte des gegebenen Typs in sich aufnehmen kann).

Im Programm kann man nun auf die Werte, die im Array gespeichert wurden, via Index zugreifen. Die Zählung beginnt stets bei 0.

Eine visuelle Repräsentation des Arrays:

args = [
  0: "Hello"
  1: "World"
]

Mit System.out.println lassen sich Zeichenketten in der Konsole ausgeben:

System.out.println("Welcome to Java");

Mit args[0] bekommt man den Wert Hello, mit args[1] den Wert World. Beide Wörter werden jeweils einzeln ausgegeben.

Der Parameter args (= arguments) muss immer vom Typ String[] sein. Sein Name hingegen ist frei wählbar, ob dort nun String[] hans steht oder String[] klaus, ist technisch betrachtet unerheblich. Der Lesbarkeit und Aussagekraft deines Codes zu Liebe solltest du jedoch stets aussagekräftige und eindeutige Bezeichner wählen. Der Name args ist da nicht schlecht, zumal er sich als üblicher Name für diesen Parameter fest etabliert hat.

--

Ich hoffe, ich konnte deine Fragen einfach und verständlich übermitteln, obwohl ich versucht habe, es nur anzureißen.

Gerade das Thema Objekte, Klassen, static ist eigentlich etwas, was erst viel später behandelt werden kann. Als Anfänger wird man leider dennoch von Beginn an damit konfrontiert - gerade weil Java eben auf dem objektorientierten Prinzip aufbaut.

Mit den Begriffen Parameter, Datentyp und Array wirst du bald auch nochmals mehr konfrontiert werden. Sie gehören zu den Basisgrundlagen, mit denen du dich nach und nach als Erstes auseinandersetzen wirst.

Sofieww 
Fragesteller
 03.05.2019, 16:19

Großen Dank für deine ausführliche Erklärung! <3 Ich habe es endlich kapieren können :)

Aber eine kleine Nachfrage noch: Was sollte ich machen, wenn ich das Argument String[] args gar nicht benötige? Muss es beinhaltet sein, auch wenn es mich eher belastet?

Ich schätze deine Zeit fürs Erklären sehr wert :D Vielen Dank abermals.

0
regex9  03.05.2019, 16:22
@Sofieww

Ja, der Parameter muss immer für die main-Methode definiert werden, egal ob du ihn benötigst oder nicht. Wäre er nicht vorhanden, würde der Eintrittspunkt nicht gefunden werden, denn anhand des Namens (main) und der Parameterliste wird dieser identifiziert.

1
Sofieww 
Fragesteller
 03.05.2019, 16:24
@regex9

Achso! Aber ich werde beim Start immer nach einen Wert von String[] args gefragt. Was soll ich dann da eintragen?

0
regex9  03.05.2019, 16:31
@Sofieww

Mit welchem Programm arbeitest du denn da? Mit BlueJ? Den Dialog einfach nur bestätigen (ohne etwas in das Eingabefeld einzutragen), dürfte doch auch möglich sein?

1
Sofieww 
Fragesteller
 03.05.2019, 17:29
@regex9

Ja, ich verwende BlueJ. Und es stimmt, dass man das einfach freilassen kann! 😅 Vielen Dank für deine Auskunft

0

1) static bedeuted, dass sie zu keiner instanz (objekt) der Klasse gehört. Also kann sie auch aufgerufen werden, ohne dass ein Objekt erzeugt wurde.

2) In java merkt man das nicht so. In anderen Sprachen wie C schon eher. Der Main methode kann man parameter übergeben. Also werte, die man vor Programmstart festlegt. Ich hab das in java noch nie verwendet. Einfach ignorieren.

3) Main methoden gibts in sehr vielen Programmiersprachen. Das ist einfach die erste Methode, von der alles ausgeht. Deshalb heißt sie halt auch main

AldoradoXYZ  02.05.2019, 21:42
Ich hab das in java noch nie verwendet. Einfach ignorieren.

Da musste ich lachen.

0
AldoradoXYZ  09.05.2019, 10:45
@jodelBoy

Programme die auf der Kommandozeile laufen möchte ich meinen.

Als ob es keine Shell geben würde ^^

Gruß

0

Sie heißt main, nicht Main. Groß- und Kleinschreibung ist bei JAVA wichtig. Das ist einfach der standard.

Static muss sie sein damit man sie aufrufen kann, sonst könnte man sie halt nur aus einer instanz der klasse aufrufen.

String[] args sind die parameter die an die methode übergeben werden. Wenn du das programm in der cmd ausführst kannst du dahinter parameter zu schreiben, jeder parameter ist ein string in dem string array.

Die Mainmethode ist eben der intiale Einstieg in das Programm, der Name wurde analog zu C so definiert.

String[] args steht für Kommandozeilenparameter.

Static weil beim Programmstart ja niemand eine Instanz erzeugen könnte.

https://www.baeldung.com/java-main-method