# Was genau bedeutet "public static void main(String[] ar



## pixel (7. Mai 2005)

Hallo zusammen,

ich bin neu im Java-Land und beschäftige mich erst seit ein paar Tagen mit dem Thema. Ich habe bereits einige Beispiele durch gearbeitet und habe eine ganz allg. Frage die ich am besten anhand eines Beispiels stelle:

```
package test1;
public class Test1 {
	public static void main(String[] args) {
			short s1 = 2, s2 = 3, s3;
			s3 = (short) (s1 + s2);
			System.out.println("Ergebniss = : " + s3);
	}
}
```

Das package lasse ich zunächst einmal außer acht da ich denke das dies erst später behandelt wird. Ich habe gelesen das ein package vergleichbar mit dem Namespace in C ist aber wie gesagt das ignoriere ich vorerst einmal. Mich interessiert besonders die Zeile:

public static void main(String[] args)

sie wird in den Büchern immer benutzt aber, zumindest am Anfang, nicht erklärt. Kann mir jemand helfen dieses Zeile in ihre Einzelteile zu zerlegen? Was leite ich damit ein und was ist in diesem Beispiel 'main' ?

Der Grund warum ich das Frage ist ganz einfach. Ich lese gerade "Java ist auch eine Insel" und bin gerade bei: "lokale Variabeln, Blöcke und Sichtbarkeit" angelangt. Im Buch ist folgendes Beispiel:

```
void foo()
{
   int i;
   {
      int j;                    // j gilt nur in dem Block
      j = 1;
   }
//    j = 2;                  // Funktioniert auskommentiert nicht
}

void bar()
{
   int i, k;                   // i hat mit dem oberen i nichts zu tun
  {
//    int k;                  // Das würde nicht gehen!
   }
}
```
aufgeführt. Nun versuche ich das auf mein Beispiel (oben) anzuwenden. Im Beispiel aus dem Buch werden die Blöcke mit "void foo()" und "void bar()" eingeleitet was bei mir eben "public static void main(String[] args)" ist.

Also habe ich versucht mein Beispiel wie folgt zu erweitern:

```
package test1;

public class Test1 {
	public static void main(String[] args) {
			short s1 = 2, s2 = 3, s3;
			s3 = (short) (s1 + s2);
			System.out.println("Ergebniss 1 = : " + s3);
	}
	public static void main2(String[] args) {
		short s1 = 2, s2 = 3, s3;
		s3 = (short) (s1 + s2);
		System.out.println("Ergebniss 2 = : " + s3);
	}
	
}
```
Was in der IDE (Eclipse) keinen Fehler ergibt. Allerdings wird beim Ausführen nur der erste Block ausgeführt und als Ergebnis:
Ergebniss 1 = : 5
geliefert.
Wäre euch wirklich dankbar wenn ihr mir helfen könntet diese Zeile zu zerlegen. Da sehr viele Java-Programme diese Zeile enthalten hat sich eine Google- oder Board- Suche entsprechend schwierig gestaltet. Im FAQ-Bereich habe ich jedenfalls nichts gefunden.

Viele Grüße
pixel


----------



## mic_checker (7. Mai 2005)

Guck mal in Java ist auch eine Insel -> 3.7



> Die main()-Funktion ist für alle Klassen und in der JVM zugänglich (public) und auf jeden Fall statisch (static) zu deklarieren. Die Methode muss statisch sein, da auch ohne Exemplar der Klasse ein Funktionsaufruf möglich sein soll. Als Parameter wird ein Array von String-Objekten angenommen. In diesem sind die auf der Kommandozeile übergebenen Parameter gespeichert.


----------



## pixel (7. Mai 2005)

ok, dann verstehe ich das so das die Zeile:

public static void main(String[] args)

sozusagen der Einstiegspunkt in's Programm ist. Dann muß ich meine Frage etwas ändern denn im Beispiel benutzt der Buchautor:

```
void foo()
{
...
...
}

void bar()
{
...
...
}
```

Was leite ich mit diesem void ... ein?

Viele Grüße
pixel


----------



## babuschka (7. Mai 2005)

_public static void main(String[] args)_
Das ist überall sichtbare Methode names _main_, die keinen Rückgabewert _void_ besitzt.
Da das der Einstiegspunkt ist, wird mit _(String[] args)_ der Einstiegsmethode der String (hier zusätzlich ein Array) args übergeben. args sind dann praktisch die Kommandozeilenparameter. Bei dem DOS-Befehl "dir -p -l" würde args[0]="p" und args[1]="l" sein.

_void foo()_ und _void bar()_ sind Methoden, die keinen rückgabewert besitzen und denen nichts übergeben wird. Also du rufst die auf, und es wird das abgearbeitet, was drin steht.


Korrigiert mich, falls ich etwas falsch erklärt habe


----------



## Scotty (7. Mai 2005)

das sind ganz normale methoden, die du verwenden kannst, um irgendwas zu machen.  :wink: 
die methoden sind dafür da, dass dein programm besser gegliedert wird und du bestimmte algorithmen wiederverwenden kannst. in der main läuft dann alles zusammen. das ist sozusagen das kernstück deines programms. hier steht, was das programm machen soll. 

beispiel:

```
int addiere(int x,int y)
{
    return x+y;
}

void out(int x)
{
    System.out.println(x);
}

public static void main(String args[])
{
    int x=addiere(2,5);
    out(x);
}
```


----------



## bygones (7. Mai 2005)

so sehr ich den Einsatz de Leute hier zu schätzen weiß und auch dass es sich hier um ein Anfängerforum handelt - aber bitte (!) lese dir Bücher durch (wie z.b. die Insel oder das JavaBuch oder Good Old Handbooks) - solche Fragen sind elementare Anfangsfragen die in jedem, wirklich in jedem Buch geklärt werden.

Ich finde man kann bei Fragen gerne helfen und bei Missverstädnissen, aber ein bisschen Grundlagen - Eigenforschung sollte schon kommen......



			
				Scotty hat gesagt.:
			
		

> in der main läuft dann alles zusammen. das ist sozusagen das kernstück deines programms. hier steht, was das programm machen soll.


die Aussage so an sich ist nicht richtig... es klingt als wäre die Main Methode die Steuerzentrale des Programms - sie ist einfach der Startpunkt mehr nicht !!


----------



## pixel (8. Mai 2005)

> so sehr ich den Einsatz de Leute hier zu schätzen weiß und auch dass es sich hier um ein Anfängerforum handelt - aber bitte (!) lese dir Bücher durch (wie z.b. die Insel oder das JavaBuch oder Good Old Handbooks) - solche Fragen sind elementare Anfangsfragen die in jedem, wirklich in jedem Buch geklärt werden.
> 
> Ich finde man kann bei Fragen gerne helfen und bei Missverstädnissen, aber ein bisschen Grundlagen - Eigenforschung sollte schon kommen......



Ich glaube ich hatte erwähnt das diese Frage beim lesen des Buches, welches du ja ansprichst, aufgetaucht ist. Mag sein das es im Buch irgendwann erklärt wird jedenfalls nicht innerhalb der ersten zwei Kapitel und wenn der Autor dann solche Beispiele macht (siehe oben) dann halte ich es für wichtig es auch in einem Beispiel umzusetzen und dazu wiederum sollte ich es, zumindest ansatzweise, verstehen.

Ich nehme jetzt einfach mal an das du den Thread nur überflogen hast  :wink: 

Viele Grüße
pixel


----------



## Guest (8. Mai 2005)

Scotty hat gesagt.:
			
		

> ```
> int addiere(int x,int y)
> {
> return x+y;
> ...



Dieses Beispiel ist falsch! Die Methoden müssen statisch sein, oder es muss noch eine Instanz der Klasse erzeugt werden!


----------



## mic_checker (8. Mai 2005)

pixel hat gesagt.:
			
		

> Ich glaube ich hatte erwähnt das diese Frage beim lesen des Buches, welches du ja ansprichst, aufgetaucht ist. Mag sein das es im Buch irgendwann erklärt wird jedenfalls nicht innerhalb der ersten zwei Kapitel und wenn der Autor dann solche Beispiele macht (siehe oben) dann halte ich es für wichtig es auch in einem Beispiel umzusetzen und dazu wiederum sollte ich es, zumindest ansatzweise, verstehen.



Nur ist es so: Sagen wir der Autor postet ein kleines Beispiel, z.B. HelloWorld.java, dort siehst du dann erstmals die main in der oben genannten Form. Soll der Autor etwa direkt erklären was das alles bedeutet und so den unerfahrenen Leser nur noch mehr verunsichern ? In den meisten Büchern die ich bisher gesehen hab wird es so gehalten, dass kurz auf die Bedeutung von main eingegangen wird wenn die einzelnen Modifier etc. besprochen werden, bzw. wenn man verstehen kann was static etc. ist...

Denke mal die Frage hat sich jetzt ja aber geklärt ....oder?


----------



## Guest (9. Mai 2005)

> Denke mal die Frage hat sich jetzt ja aber geklärt ....oder?



Soweit schon. Ich weiß (zumindest mal grob) was main() macht und was void bedeutet. Was public und static bedeutet habe ich nachgelesen. Somit habe ich zumindest mal einen groben Überblück und kann weiter machen.

Mir ist zwar noch nicht klar wie ich mehere Methoden in einem Java-File benutze aber ich denke das kommt einfach später. Ich werde jetzt erst mal die Schleifen-Konstrukte in meinem Kopf verankern.

Vielen Dank ich werd euch sicher noch brauchen.


----------



## Illuvatar (9. Mai 2005)

Da wird später noch die OOP kommen dann wirst du das alles verstehen. Aber erstmal ist das egal, und es isxt wichtig dass du die Grudlagen wie Variablen und Operatoren und so lernst.


----------

