Java main Methode?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Programme starten immer mit Argumenten. Startet man ein Programm übers Terminal, läuft das z. B. so ab:

$ java MainClass "hello world"

Dieses "hello world" wird in diesem Fall meiner MainClass übergeben und zwar als String array in der main-Methode:

public class MainClass {
    public static void main(String[] args) {
        System.out.println(args[0]); // "hello world"
    }
}

Ich nehme an, dass Du BlueJ benutzt--da bedarf es keiner main-Methode. Aber überlege, wie Du dein Programm an andere schicken würdest. Die bräuchten dann auch immer BlueJ und Du müsstest erklären, wo das Programm startet. Kompliziert.

Die Lösung: Java Programme starten (außerhalb von BlueJ) immer mit der Methode mit folgendem Kopf:

public static void main(String[] args)

Ist diese nicht mit genau der Signatur deklariert so startet dein Java-Programm auch nicht:

Error: Main method not found in class Test, please define the main method as:
   public static void main(String[] args)
Woher ich das weiß:Hobby
lollo939l 
Fragesteller
 12.01.2022, 21:37

Nein haha, wie kommst du darauf das ich BlueJ nutze. Ich nutze wie jeder normale Mensch IntelliJ.

Okay, jetzt sehe ich das auch, dann habe ich mir warscheinlich eingebildet, das es auch ohne funktioniert. Seltsam....

0
malte314  12.01.2022, 21:38
@lollo939l

Ah okay Sorry. Ich dachte weil Dir nicht bewusst war, wie die main-Methode funktioniert, benutzt Du BlueJ.

0
Rein aus Interesse, wozu ist in der Java main Methode dort wo die Übergabeparameter reingehören standardmäßig (String[] args) drin?
Kann mir jemand erklären, warum das gemacht wird? Ich sehe da nur Nachteile drin...

Du kannst einem Programm beim Start sogenannte Argumente übergeben. Diese findest du dann in dem String-Array der main-Methode.

Beispiel;

java Program 10 5 Baum

Da würden drei Strings ("5", "10" und "Baum") übergeben werden, mit welchen du dann arbeiten kannst

Überflüssig, es funktioniert nämlich auch ohne?

Offensichtlich nicht. Hat schon seinen Sinn

Afaik hat Java keine überladene Main-Methode ohne Parameter

2. Schwerer zu verstehen für Anfänger (So nach dem Motto: Schreib das einfach mal hin, musst du nicht verstehen)?

Jo, ist durchaus so. Aber der Sinn erschließt sich, wenn man über die Grundlagen drüber ist

Behindernd? Man kann dann nämlich die main Funktion nicht mehr aufrufen, ohne ein String-Array zu übergeben beim aufrufen.

Du sollst die ja auch nicht mehr aufrufen, das macht die jvm automatisch. Das ist die Funktion, die eben den Programmablauf vorgibt.

lollo939l 
Fragesteller
 12.01.2022, 21:38

Ja, die wird automatisch beim Start aufgerufen, ist klar.

Aber wenn du später wieder mal von vorne im Programm anfangen willst, musst du beim aufrufen ein nutzloses String Array übergeben.

0
xxxcyberxxx  12.01.2022, 21:40
@lollo939l

Nein. Du wiederholst die Main-Methode nicht. Du rufst sie auch nicht auf. Das ist schlechter Stil. Die Main-Methode sollte genau einmal ablaufen, da sie eben den kompletten Programmablauf vorgibt.

Willst du Teile des Programmes wiederholt ausführen, bieten sich Methoden und Schleifen an ...

0
lollo939l 
Fragesteller
 12.01.2022, 21:42
@xxxcyberxxx

Aber das bringt doch nichts, wenn ich ein Programm geschrieben habe, und dann die Möglichkeit bieten will, das Programm neuzustarten, ohne es tatsächlich zu beenden und wieder zu starten, das gesamte Programm in eine Schleife zu packen. Das ist doch super umständlich.

0
xxxcyberxxx  12.01.2022, 21:44
@lollo939l
Aber das bringt doch nichts, wenn ich ein Programm geschrieben habe, und dann die Möglichkeit bieten will, das Programm neuzustarten, ohne es tatsächlich zu beenden und wieder zu starten, das gesamte Programm in eine Schleife zu packen. Das ist doch super umständlich.

Nein, das ist nicht umständlich. Das ist guter Stil, da direkt ersichtlich ist, dass der Ablauf wiederholt wird.

Der erneute Aufruf der Main-Methode in Zeile 732 aus Datei Beispiel.java würde nur für Verwirrung sorgen, da es eben nicht direkt ersichtlich ist.

Wenn du viele Zeilen hast, die wiederholt werden, solltest du das in Methoden Auslagen und diese eben aufrufen.

0
malte314  12.01.2022, 21:40
Afaik hat Java keine überladene Main-Methode ohne Parameter

Du weiß richtig--main ohne Parameter resultiert in folgender Fehlermeldung:

Error: Main method not found in class Test, please define the main method as:
   public static void main(String[] args)
1
  • public
  • : Bedeutet, dass auch von anderen Klassen auf die Klasse , in der die Methode steht, zugegriffen werden kann. Sie ist also für andere Klassen sichtbar.
  • static
  • : Das static-Schlagwort ist schon etwas fortgeschrittener und geht tiefer auf die Objektorientierung ein. Verallgemeinert wird hier die Methode statisch gemacht, was bedeutet, sie ist unabhängig von der Klasse in der sie steht.
  • void
  • : Setzt fest, dass die Methode keinen Rückgabewert besitzt.
  • main()
  • : Ist die Kennzeichnung, also der Name für die Main Methode.
  • String[] args
  • : Bilden die sogenannten Parameter der Methode. Damit kannst du Werte, in Form eines Arrays , aus der Kommandozeile deines Computers an die Java Main übergeben.

 Wichtig ist, dass du das machen kannst, aber nicht musst. Es stellt einen Weg der Kommunikation zwischen Computer und Programm dar.

Java Main einfach erklärt

lollo939l 
Fragesteller
 12.01.2022, 21:40

Das wusste ich ja, und habs ja gemerkt, man muss es machen Java beschwert sich dann. Habe ich wohl übersehen, dachte das hatte bei mir mal geklappt.

0
LinusMemdos  12.01.2022, 21:42
@lollo939l

Vielleicht hattest du es falsch verstanden?
Argumente übergeben, muss man nicht machen machen.

0
lollo939l 
Fragesteller
 12.01.2022, 21:51
@LinusMemdos

Nein, verstanden habe ich es, keine Ahnung was da los war, vielleicht habe ich das Programm nicht gestartet, sondern nur nach nem Error gesucht und nicht gefunden...

1
malte314  14.01.2022, 17:52
Bedeutet, dass auch von anderen Klassen auf die Klasse , in der die Methode steht, zugegriffen werden kann. Sie ist also für andere Klassen sichtbar.

Das stimmt nicht. Wir eine Methode mit public gekennzeichnet, hat das keinen Einfluss auf die ganze Klasse, sondern nur auf diese eine Methode.

Verallgemeinert wird hier die Methode statisch gemacht, was bedeutet, sie ist unabhängig von der Klasse in der sie steht.

Das ist auch falsch. Static sorgt dafür, dass die Methode (oder das Feld oder die interne Klasse) Eigentum der Klasse ist und nicht der Instanzen derselben. Es ist dann keine Instanzmethode (-feld, -klasse) von der jede Instanz ihre "eigene" besitzt, sondern eine statische, von der es über alle Instanzen der Klasse nur diese eine gibt.

0
LinusMemdos  14.01.2022, 18:01
@malte314

Ist es dir möglich im Kontext der Frage deine 100% Genauigkeit abzulegen und der Situation angepasst zu antworten? Und zwar dem FS, statt mir?
Deine fachlichen Einwände kannst du gerne HIER, bei STUDYFLIX einreichen.
Vielen Dank für dein Entgegenkommen und weiterhin viel Spaß.

0
malte314  14.01.2022, 18:07
@LinusMemdos

Ich habe die Frage bereits beantwortet und auch den Stern für die hilfreichste Antwort dafür erhalten.

Dass Du meine sachliche Kritik so persönlich nimmst ist nicht nötig--ich habe nur den Inhalt deiner Antwort berichtigt und nicht Dich als Person angegriffen.

Aber ich muss dabei bleiben: Das, was Du da von STUDYFLIX kopiert hast, ist leider völlig falsch. Vielleicht sollte man auch nicht unbedingt mit unmarkierten Zitaten von anderen websiten Antworten, vor allem nicht, wenn man es selber nicht richtig versteht und nur die Website als Quelle hat. Bitte berichtige mich, wenn ich falsch liege.

0
LinusMemdos  14.01.2022, 18:30
@malte314
Bitte berichtige mich, wenn ich falsch liege.

Du liegst falsch und du unterstellst Unkenntnis, obwohl du mit demselben Atemzug erst kurz zuvor einen persönlichen Angriff negiert hast.
Du Unterstellst scheinbar gern, wie deinem "ausgezeichneten Kommentar" zu entnehmen ist (BlueJ)

Mit Menschen kennst du dich jedenfalls nicht aus.

Man kann deinen Kommentar ebenso kleinlich als Falsch deklarieren, wenn du behauptest: "Programme starten immer mit Argumenten."
Das ist falsch.

Wenn kein Argument gegeben ist, startet dein Programm ohne Argument.

Dann schreibst du etwas, dass so gar nicht erklärt wurde:

"Das stimmt nicht. Wird eine Methode mit public gekennzeichnet, hat das keinen Einfluss auf die ganze Klasse, sondern nur auf diese eine Methode."

Erklärt wurde,
"Public bedeutet, dass auch von anderen Klassen auf die Klasse , in der die Methode steht, zugegriffen werden kann. Sie ist also für andere Klassen sichtbar."

Und das ist ja wohl richtig. Oder wie greifst du auf die Methode zu?

In der Summe hast du unterschlagen, dass die Website "einfach erklärt".
Also keinen Informatik-Lehrgang darstellt.

Im Übrigen wollte der FS aber wissen, warum standardmäßig (String[] args) inkludiert ist (Er ging ja irrtümlich davon aus, dass sein Programm auch ohne String[] args startet).
Dazu habe ich von der verlinkten Seite folgende leicht verständliche Erklärung eingefügt:

"(String[] args) Bilden die sogenannten Parameter der Methode. Damit kannst du Werte, in Form eines Arrays , aus der Kommandozeile deines Computers an die Java Main übergeben."

D.h., die Frage ist beantwortet.
Das wolltest du aber gar nicht sehen, sondern hast dich über andere Fragmente hergemacht. Also worum geht es dir? Bissel wichtig Klugschei**en?

0
malte314  14.01.2022, 23:33
@LinusMemdos

Interessant, wie persönlich Du meine Kritik immer noch genommen hast. Meine Empfehlung: Geh mal Gras berühren.

0
LinusMemdos  15.01.2022, 03:09
@malte314

Interessant wie unsachlich du auf eine sachliche Richtigstellung reagierst.
Meine Empfehlung: Wenn du das nächste Mal nach etwas "treten" möchtest, benutze einen Sandsack oder ähnliches.

Alternativ kannst du auch einmal mehr über deine Antwort nachdenken.

0