Methoden public static void main(String[] args)

easyJAVA?

Mitglied
Hallo,

ich kann mittlerweile in Java alles Mögliche machen, // für mich ist das zumindest schon mal viel 😛
kenne die Operatoren, alle möglichen Schleifen und habe schon einige Berechnungen
etc machen lassen.

Doch am meisten Kopfschmerzen bereitet mir das: public static void main(String[] args)

das steht ja immer am Anfang eines Programms, aber was beschreiben die einzelnen Wörter?
lese mich da seit über einer Stunde mich in das Thema ein und manches verstehe ich und manches
löst bei mir Verwirrung aus. Komischerweise nehmen die immer Beispiele die total komisch (andere Form),
obwohl das eigentlich das bekannteste sein müsste.

public: das müsste das Zugriffsattribut sein. Also jeder darf darauf zugreifen. (jede Klasse ist gemeint oder? (nochmal zu vergewissern)).

static: das ist die Prozedur. In diesem Fall statisch=> braucht man, da kein Objekt am Anfang besteht worauf man zugreifen kann.

void: bedeutet kein Rückgabewert (was auch immer damit gemeint ist, immerhin wird ein Programm ausgegeben) <= ist das die Methode??

main: wofür das steht weiß ich nicht <= oder ist das die Methode?

(String[] args): meines Wissens Instanzvariablen und Parameterliste. Beschreibt also, dass darauffolgend nur mit Zeichenketten (String) gearbeitet werden darf? kann ja eig nicht sein, Zahlen werden ja auch verwendet etc.. Außerdem müsste es ja dann immer so heißen und ich habe Beispiele gesehen, wo das nicht so ist...

Java:
public class Bedingungen {

	public static void main(String[] args) {
		
		int mult9 = 0;
        for (int i = 1; i <= 50; i = i + 1) {
            if ((i % 9) != 0) {
                // kein Vielfaches von neun
                continue;
            }
            mult9 = mult9 + 1;
        }
        System.out.println("In 50 gibt es " + mult9
                           + " Vielfache von 9");
        
		}
      
		 }

vllt nochmal zum allgemeinen Verständnis, bin jetzt irgendwie ziemlich durcheinander;(


  • was in einem Ordner (links in Eclipse) ist, ergibt das (gesamte) Programm (= java Project)

  • das gesamte Programm besteht aus mehreren (Teil-)Programmen (= Klasse, hier Bedingungen.java)

  • die Klassen wiederrum, bestehen aus mehreren Objekten, die ingesamt wieder dieses Teilprogramm=Klasse ergeben. Mit Objekt meine ich z.B alles, was in public static void etc. steht

liege ich mit meinen Aussagen richtig? 🙂

ich bin jedem dankbar, der etwas licht in ins dunkle bringen kann ( oder es zumindest versucht 😀 )

Grüße
 
Zuletzt bearbeitet von einem Moderator:
Hey,

Also erstmal:

Java:
public static void main(String[] args) { ... }

ist die Methode. Und zwar das alles zusammen. Die einzelnen Keywords bilden erst in ihrer Kombination die gesamte Methode.

public = Access Modifier, du liegst mit deiner Aussage richtig
static = statische Methode (= Klassenmethode), auch da ist deine Erklärung korrekt
void = Jup, gibt nix zurück. Mit "Programm läuft" hat das nichts zu tun. Hier mal ein Gegenbeispiel einer Methode die etwas zurückgibt:

Java:
// statt void steht hier int
public static int getSomeNumber(){
   return 15;
}

Rückgabe heißt, dass ein Wert an den "Caller" geliefert wird. Bedeutet, wenn du die Methode aufrufst, bekommst du ein Ergebnis geliefert:

Java:
// irgendwo im Programm:
int ergebniss = getSomeNumber();

main = Name der Methode. Die main-Methode ist halt eine sehr bekannte, spezielle MEthode, die diesen Namen hat, und daher nennt man sie auch so. Das Programm beginnt in der main-Methode.

String[] args = Parameter. Vorsicht, KEINE Instanzvariable! Sondern eine lokale Variable, das ist ein großer Unterschied. "args" ist der Name der Variable, der ist beliebig. (Steht für arguments). String[] ist der Datentyp, und zwar ein String-Array. (Wahrscheinlich sagt dir Array noch nix). Das heißt nicht, dass du nur mit Strings arbeiten darfst etc. Dieser Parameter ist dazu da um dem Programm Werte beim Start mitzugeben. Sofern du das nicht machst steckt da nix drin. Hat also für die meisten PRogramme gar keine Bedeutung und kann ignoriert werden.

was in einem Ordner (links in Eclipse) ist, ergibt das (gesamte) Programm (= java Project)
Nein, das Programm ist definiert durch die Klasse, in der die main-Methode steht. Was du in deinem Projekt hast bestimmt nur welche Dateien du im Programm verwenden kannst.

das gesamte Programm besteht aus mehreren (Teil-)Programmen (= Klasse, hier Bedingungen.java)
Würd ich so auch nicht formulieren. Wie gesagt: Programm = main-Methode. Wenn du in deiner Main-Klasse andere Klassen verwendest, kommen sie in deinem Programm vor. Wenn nicht, dann nicht.

die Klassen wiederrum, bestehen aus mehreren Objekten, die ingesamt wieder dieses Teilprogramm=Klasse ergeben. Mit Objekt meine ich z.B alles, was in public static void etc. steht
Ist auch gefährlich formuliert. Eine Klasse beschreibt in der Regel ein Objekt, und besteht (meist) aus Instanz-Variablen. Allerdings stimmt es, dass die Instanz-Variablen wiederum Objekte referenzieren können.

Deine Klasse mit der main-Methode beschreibt allerdings kein Objekt. Du arbeitest vllt mit Objekten in der main-Methode, aber die Klasse selbst wirst du nicht als Objekt verwenden. In deinem konkreten Beispiel hast du genau ein Objekt, welches du verwendest, und das nennt sich "out". (Aus der Klasse System).

...war jetzt nur kleiner Crashkurs. Natürlich muss man das alles etwas genauer spezifizieren. Wenn du Java lernen willst, empfehle ich dir die Website aus meiner Signatur. Was nicht heißen soll, dass ich dir hier keine Fragen mehr beantworten will. Allerdings sollte man sich immer erstmal ein wenig einlernen, dieses Forum ersetzt nicht das Java lernen, sondern unterstützt nur bei spezifischen Fragen.
 
Zuletzt bearbeitet:
Hm, irgendwie müsstest du vielleicht nicht zu weit denken.

Merke dir einfach das [c]public static void main(String[] args)[/c] der [c]Einstiegspunkt(Das was der Interpreter sucht)"[/c] ist von jedem Programm, also wird die immer geschrieben, damit ein Programm überhaupt funktioniert.

Die main() - Methode besitzt in Java definitionsgemäss genau ein Argument [c](String[] argument)[/c].
Das Argument [c]argument[/c] ist ein Array von Strings.

Das Argument muss immer mit angegeben werden, weil der Interpreter sonst die "richtige" [c]main(String[] args)[/c] Methode nicht findet (Überladung).

Beispiel für (String[] args).
Java:
public class Hallo {
 
 public static void main(String[] args) {

  for (int i = 0; i < args.length; i++)
   System.out.println("Hallo "+args[i]+"!");
  }
 }
}


Manches geht halt nur die Java-Entwickler etwas an, wesshalb es nicht Voraussetzung ist für dich dies zu wissen, um ein Programm schreiben zu können.
 
Um Mr. Quiz' Beispiel zu ergänzen: Du könntest sein kleines Demo-Programm nun zB wie folgt kompilieren und starten:

javac Hallo.java
java Hallo Diese Woerter stecken in dem args
Und er würde dir alle Wörter anzeigen. Wie gesagt, es ist ein String-Array. Array ist sowas wie Liste, also eine Menge von mehreren Strings. Eben alle, die du beim PRogrammstart angibst. Und wenn du lediglich


machst, dann steckt da nix drin.
 
ok, nun habe ich das ganze im Groben verstanden.

man kann also sagen: jedes Programm beginnt mit "public static void main(String[] args)"

Java:
public class kleine_tests {

	public static void main (String[]args){}
	
	// statt void steht hier int
	public static int getSomeNumber(){
	   return 15;
	
	// irgendwo im Programm:
	   int ergebniss = getSomeNumber();

	}
}

Dein Beispiel zeigt mir ein Fehler an. Diese Erfahrung habe ich des öfteren mit Beispielen aus dem Internet gemacht. Irgendwas passt dann bei mir dann irgendwie nie ???:L

public static void main (String[]args){} das habe ich bewusst so gemacht, da wir ja jetzt wissen, es muss eine main-Methode geben, und mit {} war die einzige Möglichkeit, die Fehler runterzuschrauben.

Aber ist eigentlich egal, ich habe es so ungefähr verstanden.
(Wahrscheinlich sagt dir Array noch nix)

Doch, wir haben gelernt, dass es Felder sind! 😀
...war jetzt nur kleiner Crashkurs. Natürlich muss man das alles etwas genauer spezifizieren. Wenn du Java lernen willst, empfehle ich dir die Website aus meiner Signatur. Was nicht heißen soll, dass ich dir hier keine Fragen mehr beantworten will. Allerdings sollte man sich immer erstmal ein wenig einlernen, dieses Forum ersetzt nicht das Java lernen, sondern unterstützt nur bei spezifischen Fragen.

jo dafür bin ich dir auf jeden Fall dankbar! Deine Homepage sieht vielversprechend aus und ich muss sagen, vor einigen Tagen hätte ich dieses Videotraining gekauft 😀 aber habe mir bereits von Video2Brain - Jetzt lerne ich Java gekauft und benutze es kaum, da ich einfach keine Zeit dafür habe/ich dabei zu langsam lerne. Ich habe nun vorlesungsfreie Zeit und bin nicht zu meiner Familie zurückgekehrt, weil ich lernen will. Habe nun in 3Tagen à 8-10Std lernen nur Programmieren gepaukt und dass ich so langsam vorankomme erzeugt bei mir Druck, weil ich weiß ich schreibe dieses Semester noch 9 andere Klausuren (bin im 1.Semester). Gerade dieses Thema ist für mich das interessanteste, da ich einen Sinn darin sehe, man erschafft Programme! Dennoch ist bei uns Algorithmen und Programmierung eines der unwichtigsten Fächer, habe es nur im 1.Semester und dann gar nicht mehr.

Aber ich verstehe es einfach nicht, warum es so schwierig zu lernen ist/warum es darin einfach keinen guten Leitfaden gibt. (Vorlesungen + Skript total fürn A**** - nur mit Pseudocodesbeispielen)
Habe mir sogar vom Prof ein 50.- teures Buch geholt, aber weiß nicht, was ich davon halten soll.

Am Besten lerne ich gerade mit progammerbase.net und teialehrbuch.de.

Allerdings sollte man sich immer erstmal ein wenig einlernen, dieses Forum ersetzt nicht das Java lernen, sondern unterstützt nur bei spezifischen Fragen.

ist klar, sonst könnte ja jeder 2.Post heißen: "Wie programmiere ich mit Java?" 😀
Nee, also ich bemühe mich da auf jeden Fall sehr, aber fällt mir halt sehr schwierig...

Java:
public class RückgabeMethode {

	public static void main(String[] args){
	
	for (int i = 0; i < args.length; i++)
		   System.out.println("Hallo "+args[i]+"!");
	  
}
}

dieses Beispiel weist zwar keine Fehler auf, aber gibt leider nichts aus. 🙁
(was ist args.length?)

Manches geht halt nur die Java-Entwickler etwas an, wesshalb es nicht Voraussetzung ist für dich dies zu wissen, um ein Programm schreiben zu können.

Das nehme ich mir auf jeden Fall zu Herzen, vllt kann ich da wichtigem vom Unwichtigem nicht unterscheiden. Aber ohne richtigen Leitfaden, weiß man halt nicht immer, was wichtig ist und was nicht wichtig ist. Aber diesbezüglich werde ich mich bemühen und vermutlich ist das einer der Hauptgründe, warum ich so langsam Fortschritt mache.

javac Hallo.java
java Hallo Diese Woerter stecken in dem args

von javac habe ich schon auch schon öfter gelesen. Soll ja den compiler starten, aber wo gebe ich dein Beispiel ein? In Eclipse bringt es nichts, habe mal in einem Video gesehen, dass es in der Eingabeaufforderung eingegeben wurde, da hat es mir aber auch nichts gebracht.

Danke 🙂
 
man kann also sagen: jedes Programm beginnt mit "public static void main(String[] args)"
Ja, die main ist die Einstiegsmethode einer Applikation.
Java:
public class kleine_tests {

	public static void main (String[]args){}
	
	// statt void steht hier int
	public static int getSomeNumber(){
	   return 15;
	
	// irgendwo im Programm:
	   int ergebniss = getSomeNumber();

	}
}
So einfach zusammenkopieren funkioniert in den wenigsten Fällen. Man muss sich schon mit dem Aufbau einer Klasse auseinandersetzen. Was funkionieren würde wäre:
Java:
public class KleineTests {
	public static void main (String[]args){
		System.out.println("Nummer: " + getSomeNumber());
	}
	
	public static int getSomeNumber(){
	   return 15;
	}
}

Java:
public class RückgabeMethode {

	public static void main(String[] args){
	
	for (int i = 0; i < args.length; i++)
		   System.out.println("Hallo "+args[i]+"!");
	  
}
}

dieses Beispiel weist zwar keine Fehler auf, aber gibt leider nichts aus. 🙁
(was ist args.length?)
Dachte Du weisst was Arrays sind? length gibt die Anzahl der Felder das Arrays
Code:
args
zurück.
Das Beispiel gibt vermutlich nichts aus, weil du beim Aufruf des Programms keine Parameter übergibts und somit args.length = 0 ist.
 
von javac habe ich schon auch schon öfter gelesen. Soll ja den compiler starten, aber wo gebe ich dein Beispiel ein? In Eclipse bringt es nichts, habe mal in einem Video gesehen, dass es in der Eingabeaufforderung eingegeben wurde, da hat es mir aber auch nichts gebracht.
Eclipse besitzt einen eingebauten Compiler, der (im Standard) beim Speichern der Klasse ausgeführt wird. javac nützt man z.B. wenn man über die Konsole kompiliert.
Gleiches gilt für
Code:
java Hallo Diese Woerter stecken in dem args
Wenn man die Datei mit Eclipse ausführt muss man im Run Dialog (Open Run Dialog) der Klasse im Reiter Arguments die Werte eintragen.
 
aber habe mir bereits von Video2Brain - Jetzt lerne ich Java gekauft und benutze es kaum, da ich einfach keine Zeit dafür habe/ich dabei zu langsam lerne. Ich habe nun vorlesungsfreie Zeit und bin nicht zu meiner Familie zurückgekehrt, weil ich lernen will. Habe nun in 3Tagen à 8-10Std lernen nur Programmieren gepaukt und dass ich so langsam vorankomme erzeugt bei mir Druck, weil ich weiß ich schreibe dieses Semester noch 9 andere Klausuren (bin im 1.Semester). Gerade dieses Thema ist für mich das interessanteste, da ich einen Sinn darin sehe, man erschafft Programme! Dennoch ist bei uns Algorithmen und Programmierung eines der unwichtigsten Fächer, habe es nur im 1.Semester und dann gar nicht mehr.

Aber ich verstehe es einfach nicht, warum es so schwierig zu lernen ist/warum es darin einfach keinen guten Leitfaden gibt. (Vorlesungen + Skript total fürn A**** - nur mit Pseudocodesbeispielen)
Habe mir sogar vom Prof ein 50.- teures Buch geholt, aber weiß nicht, was ich davon halten soll.

Ich kann dich gut verstehen, ich kenn das. Das Informatik-Studium lehrt dich nicht das Programmieren, sondern nur die Theorie hinter der Programmierung, und anderen Dingen die damit zum Teil gar nichts zu tun haben. Neben einer Einführungsvorlesung anhand einer Beispielsprache (meist eben Java) wird da auch nicht mehr großartig was in Richtung praktische Programmierung kommen.

Und dass die Vorlesungen an der Uni/FH absolut unbrauchbar sind ist auch bekannt und überall das selbe. Die Profs sind keine Software-Entwickler, sondern mehr Wissenschaftler. Außerdem sind die meisten dann noch nicht mal Informatiker, sondern Mathematiker. An der Uni kann in der Regel keiner richtig programmieren. Da die Profs die Sprache selbst nicht sonderlich drauf haben, versagen sie auch darin es zu erklären. Oder sie sind einfach zu faul. Folien von vor 5 Jahren, und es wird auf jeder zweiten Seite auf einen Fehler aufmerksam gemacht. Dass der Prof mal auf die Idee kommt die Folien zu überarbeiten? Nie im Leben!

Und grad neulich wieder gehört: Erste Vorlesungsstunde main-Methode, zweite GUI-Programmierung. WTF 😱 Dritte dann schon Vererbung bevor man weiß was ein Konstruktor oder eine Methode ist. Kapitel 9 dann auf einmal wieder sowas wie Arrays und Schleifen. Das ist echt Fremdschämen pur, und so jemand nennt sich dann "Lehrer".
 
@hdi: Hast du studiert?
So wie du redest glaube ich das nicht.

Wer ist denn am Ende in der Lage komplexer zu arbeiten, derjenige der die Theorie einer Programmiersprache verstanden hat und weitere Probleme der Informatik zu lösen versteht oder derjenige, der "Java ist eine Insel" durchgepaukt hat?

"noch nichtmal Informatiker"....ohne Mathematiker gäbe es keine Informatik.

@TopicErsteller:

Nimm dir Zeit und lern die Basics. Dafür sind Bücher gut geeignet und nebenbei machst du die Beispiele. Blind drauflos zu programmieren und Beispiele ausm Netz nachzumachen bringt dir eher weniger, wenn du das nicht wirklich verstehst. Du lernst ja auch erst was Addition ist und nicht alle möglichen Kombinationen von x + y = z (x,y,z € N z.B.)
 
Zuletzt bearbeitet:
@timbeau

Ja, ich habe studiert, aber ich glaube du hast mich falsch verstanden. Ich habe nur gesagt, dass man im Studium nicht das Programmieren lernt. Der Otto-Normal-Informatiker geht mit seinem Diplom bzw. Bachelor/Master von der Uni und hatte vor 4 Jahren mal eine kleine Einführungsvorlesung in Java, und das war's. Wer sich nicht hobbymässig damit beschäftigt, kann dann nix. Zumindest wird das im Berufseinstieg auch nicht erwartet... Aber es wär natürlich trotzdem hilfreich. Und die Java-Insel hast du jetzt erwähnt, ich halte die auch nicht grad für das Non Plus Ultra..

Das ganze mit der Uni heißt natürlich nicht, dass die Theorie oder Mathematik einem nichts bringt. Aber mal Hand auf's Herz: Wieviel Mathematik brauchst du denn als Entwickler einer objektorientierten Sprache? Das hat mit Mathe so gut wie gar nix mehr zu tun, lediglich das logische Denken wird durch's Studium durchaus trainiert. Wie gesagt, ich hab nicht gesagt dass das Studium nix bringt. Ich mein nur wenn man Java lernen will braucht man sich da nix erhoffen, weil das dort niemand kann.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben