# Warum gibts die Main und was sollte drin stehen?



## Azrahel (26. Jan 2007)

Hoffentlich stoß ich da jetzt nicht ne Grundsatzdiskussion an.

Ich programmiere jetzt seit 5 Jahren Java, aber so ganz hab ich noch nicht verstanden was jetzt genau in die Klasse main rein sollte. Bisher stehen da bei mir meist nur die Aufrufe zum Starten der Gui drin, und wenn nötig noch das Abfragen und Auswerten mitgegebener Parameter. Das wars dann meist schon. Gibts da vielleicht eine mir bisher nicht bekannte Faustregel was man da reinpacken sollte? Bin um jeden! Gedanken dankbar *lernwillig iss*


----------



## WieselAc (26. Jan 2007)

Vielmehr passiert da bei mir eigentlich auch nie, außer das ich bei Bedarf dorf noch benötigte dlls lade.


----------



## Azrahel (26. Jan 2007)

Schonmal danke Wiesel   

Noch jemand nen Gedanken? vielleicht auch ne andre Meinung? (keine Angst wir sind auch tolerant gegenüber denen die nicht so göttliche Programmiergeister sind wie wir  :wink: )


----------



## DaKo (26. Jan 2007)

> in die *Klasse* main



:shock: 



> Aufrufe zum Starten der Gui drin, und wenn nötig noch das Abfragen und Auswerten mitgegebener Parameter.



Reicht das nicht? Die *Methode* ist ja nur fürs Starten des Programms zuständig. Deswegen haben meine Klassen gar keine main-*Methoden* (zumindest die meisten)


----------



## The_S (26. Jan 2007)

In die Klasse "Main" kannste schreiben was de willst. In die main-Methode wird alles geschrieben um deni Programm zu initialisieren.


----------



## Azrahel (26. Jan 2007)

Ich hab nie Klasse geschrieben! Selbstverständlich hab ich Methode geschrieben!!! 
wenn oben was andres stehen sollte verliest du dich bestimmt!!!!! 

*mich schämend hinterm Monitor versteck*   

Ja Ne, ich meinte ja Methode. Gibts denn ohne Main-Methode keine Probleme beim starten? habs noch nie ohne versucht...


----------



## The_S (26. Jan 2007)

ohne main-methode gibt es nur probleme beim starten. Weil wenn deine Klasse keine main hat, startet sie nicht sondern kann nur von anderen Klassen (die u.U. eine main-Methode haben) initialisiert werden.


----------



## Azrahel (26. Jan 2007)

Das dachte ich mir.


----------



## WieselAc (26. Jan 2007)

Ich mach aber dennoch meistens eine "Main" Klasse, in der nichts weiter drin steht als die Main Methode. In der werden dann halt ein paar Sachen initialisiert und alles vorbereitet was das programm so bracuehn könnte.


----------



## The_S (26. Jan 2007)

jup, mach ich auch meistens so


----------



## Azrahel (26. Jan 2007)

Ich auch *mich bekenn* ich dacht aber auch das die Klasse Main heissen müsste, ich wusst nicht das ich die Main-Methode auch in ne andre Klasse lagern kann. Aber dafür lieb ich dieses Forum


----------



## thomator (26. Jan 2007)

Letztlich muss man sich halt einfach vor Augen halten, dass die JRE, wenn sie Dein Programm ausführen soll, irgendwie gesagt bekommen muss, wo sie anfangen soll.
Dafür gibts die main-Methode und der JVM wird als Parameter die Klasse benannt, in der die zu verwendende main-methode steht.

Was da wirklich drin steht is total schnuppe(solange wie's irgendwie Dein Programm startet. :lol: ). Alles andere is eher unter der Rubrik Form und Stil zu dikutieren...


----------



## mephi (26. Jan 2007)

Azrahel hat gesagt.:
			
		

> Ich auch *mich bekenn* ich dacht aber auch das die Klasse Main heissen müsste, ich wusst nicht das ich die Main-Methode auch in ne andre Klasse lagern kann. Aber dafür lieb ich dieses Forum



du hast 5 jahre lang geglaubt du brauchst eine Klasse die Main heißt?


----------



## Azrahel (26. Jan 2007)

mephi hat gesagt.:
			
		

> Azrahel hat gesagt.:
> 
> 
> 
> ...



Willste jetzt drauf rumreiten?   

Ne eigentlich nur ca 1 Jahr, hab bevor ich Applikationen gebaut hab nur fürs web geproggt, jsp  und so...
Also eigentlich nur 1 Jahr. Wobei ich in der Zeit aber auch nur 2 Apps gebaut hab, eine auf der Arbeit die ständig erweitert wird, und die hiess halt von anfang an Main, und eine zuhause, und naja die heisst halt auch main. Zumindest die Einstiegsklasse. Hab mir so da noch nie Gedanken drüber gemacht.

Aber pranger mich deswegen doch an, ich bin auch nur ein Mensch ich hab auch Gefühle


----------



## Marco13 (26. Jan 2007)

Es wurde jetzt ein paarmal gesagt: "Ja, in der main macht man so initialisierungen und so...". Das ist IMHO (!) schon viel zu viel. In der main kann man (wenn nötig) Kommandozeilenargumente auswerten. Wenn das nicht nötig ist, kann man dort EIN Objekt EINER Klasse erstellen. (Oder einen SwingWorker bauen, der EIN Swing-Objekt (nämlich das Hauptfenster)) aufmacht. Falls nötig, kann man auf diesem EINEN Objekt dann noch EINE Methode aufrufen. Aber was darüber hinausgeht, hat IMHO (!) in der main nichts verloren.


----------



## Azrahel (26. Jan 2007)

@Marco13 Das macht deine Main auf jeden Fall mal sehr übersichtlich. 
Also ist das wohl so das es wieder mal Stilabhängig ist...

Danke schön an alle


----------



## Leroy42 (26. Jan 2007)

Azrahel hat gesagt.:
			
		

> Danke schön an alle



Nehme ich gerne an! (  )


----------



## Marco13 (26. Jan 2007)

... und es gibt guten und schlechten Stil :wink: Was in der main steht, gehört zu keiner Klasse und zu keinem Objekt. Das andere Extrem (nur, um das zu verdeutlichen) wäre ja eine main, die das gesamte Programm als prozeduralen, ge-inlineten code enthält...


----------



## WieselAc (26. Jan 2007)

Marco13 hat gesagt.:
			
		

> ... Was in der main steht, gehört zu keiner Klasse und zu keinem Objekt. ...




Dann schließ ich mal die nächste Frage Stellung an was haltet ihr von static Blöcken? Bei denen würd ich ansatzweise das Gleiche behaupten.

Ich find die ziemlich eigenartig, sie wirken auf mich immer etwas der Sprache Java entrückt. Deshalb versuche ich sie immer zu vermeiden. Aber hin und wieder sind die teile schon sehr praktisch.


----------



## Leroy42 (26. Jan 2007)

Ich sehe das genauso wie Marco13.

In meinen mains steht auch (fast) ausschließlich nur


```
public static void main(String[] args) {
  Toolkit.getDefaultToolkit().setDynamicLayout(true);
  new MeineKlasse(/* evtl. hier args */).setVisible(true);
}
```


----------



## Azrahel (26. Jan 2007)

Also dann doch lieber die erste Variante. Obwohl wenn ich mir überlege das mein Projekt mittlerweile über 1000 Klassen hat, das in der main alles zusammengepackt ist garantiert der perfekte Schutz vor Code-Dieben  :lol:


----------



## Leroy42 (26. Jan 2007)

In static-Blöcken gehört eben auch nur das rein,
was bei _Initialisierung der Klasse_ (Laden der Klasse)
gemacht _werden muß_.



			
				WieselAc hat gesagt.:
			
		

> sie wirken auf mich immer etwas der Sprache Java entrückt.



Sieh' Klassen einfach als *Objekte* einer Metaklasse an, 
die auch initialisiert werden wollen, dann passen auch static-Blöcke
in dein _Java-Gefühl_.


----------



## WieselAc (26. Jan 2007)

Sehr schön dann kann ich jetzt mit einem richtig guten _Javafeeling_ ins Wochenende gehen


----------



## The_S (26. Jan 2007)

Marco13 hat gesagt.:
			
		

> Es wurde jetzt ein paarmal gesagt: "Ja, in der main macht man so initialisierungen und so...". Das ist IMHO (!) schon viel zu viel. In der main kann man (wenn nötig) Kommandozeilenargumente auswerten. Wenn das nicht nötig ist, kann man dort EIN Objekt EINER Klasse erstellen. (Oder einen SwingWorker bauen, der EIN Swing-Objekt (nämlich das Hauptfenster)) aufmacht. Falls nötig, kann man auf diesem EINEN Objekt dann noch EINE Methode aufrufen. Aber was darüber hinausgeht, hat IMHO (!) in der main nichts verloren.



Das verstehe ich eigentlich unter initialisieren der Anwendung  .


----------



## mephi (26. Jan 2007)

was meint ihr mit static 'blöcken'?
ich benutz überall da static wo eigenschaften für alle objekte gelten oder methoden unabhängig von einem objekt aufgerufen werden sollen

wüsste jetzt nicht was man da anders machen kann


----------



## Leroy42 (26. Jan 2007)

```
class MeinInt {
  static private int anzahl;
  static {
    Sytem.out.println("Die Klasse MeinInt wird initialisiert");
    anzahl = 0;
  }

  int theInt;
  public MeinInt() {
    anzahl++;
  }

  public static int bisherErzeugteInstanzen() {return anzahl;}
}
```


----------



## mephi (26. Jan 2007)

interessant. hab ich noch nie gesehen


----------



## Leroy42 (26. Jan 2007)

mephi hat gesagt.:
			
		

> interessant. hab ich noch nie gesehen



War das jetzt ironisch?  :shock:  ???:L


----------



## mephi (26. Jan 2007)

nein das war ernst gemeint. hab das echt noch nie gesehn.

edith meint jetzt versteh ich auch warum ihr diskutiert ob das nötig ist...


----------



## Jango (26. Jan 2007)

Marco13 hat gesagt.:
			
		

> Es wurde jetzt ein paarmal gesagt: "Ja, in der main macht man so initialisierungen und so...". Das ist IMHO (!) schon viel zu viel. In der main kann man (wenn nötig) Kommandozeilenargumente auswerten. Wenn das nicht nötig ist, kann man dort EIN Objekt EINER Klasse erstellen. (Oder einen SwingWorker bauen, der EIN Swing-Objekt (nämlich das Hauptfenster)) aufmacht. Falls nötig, kann man auf diesem EINEN Objekt dann noch EINE Methode aufrufen. Aber was darüber hinausgeht, hat IMHO (!) in der main nichts verloren.



Dein Wort in Gottes Ohr. Ich kenne Programmierer, die basteln in die main() sogar einen Konstructor...


----------



## Beni (26. Jan 2007)

Ich benutz die Main-Klasse und -Methode gerne noch um Debug-Code zu de-/aktivieren; ansonsten kreiere ich hier nur das Programm-Objekt, und starte es.


----------



## Illuvatar (26. Jan 2007)

@Jango: Sorry, ich versteh grad net so ganz, was du meinst 

Einen Konstruktor in die main-Methode machen? Das geht ja nicht. Und einen aus der main-Methode aufrufen? Das muss man ja wohl.


----------

