# Unterschied main-Methode und Konstruktor



## Maxga (10. Dez 2008)

Guten Tag,
bin gerade dabei Java zu erlernen.
Habe nun eine Frage, habe gelernt, in jeder Klasse muss es eine main-Methode geben, und in jeder Klasse muss es einen Konstruktor geben, wo ist der Unterschied zwischen beiden, was schreibt man in was rein, müssen beide vorhanden sein, und was sind die Einsatzbereiche von beiden? =)
Danke,

MfG


----------



## maki (10. Dez 2008)

>> habe gelernt, in jeder Klasse muss es eine main-Methode geben

Da hast du etwas falsches gelernt.

Jede Klasse _kann_ eine Main Methode haben.
Mit der Main Methode startet man ein Programm.


----------



## paldawin (10. Dez 2008)

Es muss nicht jede Klasse eine main-Methode besitzen, aber wohl einen Konstruktor! Die Main-Methode ist der Startpunkt deines gesamten Programmes, während du im Konstruktor Befehle ausführen kannst die bei der Instanziierung der Klasse ausgeführt werden!


----------



## SlaterB (10. Dez 2008)

jeder Mensch hat einen Kopf und jeder Mensch muss atmen,
wo sind die Unterschiede/ Gemeinsamkeiten?

so kann man da doch nicht rangehen, lies in einem Lehrbuch nach, was ein Konstruktor und eine main-Methode überhaupt sind, 
außer dem Fakt, dass sie in jeder Klasse, sagen wir mal, vorhanden sein können


----------



## Maxga (10. Dez 2008)

Ok, im Konstruktor kann ich Variablen instanzieren oder?
Aber was genau schreibt man denn in die main-Methode, was man nicht in andere Methoden oder in den Konstruktor schreibt?

MfG


----------



## André Uhres (10. Dez 2008)

Die main enthält gewöhnlich ausser der Erzeugung der Hauptklasse fast nix. Die main ist ausserdem "static", der Konstruktor nicht. Die main startet auch auf dem "Initial Thread". Falls wir eine Gui-Anwendung  haben, müssen wir sie auf dem "EventDispatchThread" starten, etwa so:

```
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewFrame().setVisible(true);
        }
    });
}
```


----------



## Maxga (10. Dez 2008)

Ah ok, jetz versteh ich es einigermaßen.
Main-Methode stellt also den Programmeinstiegspunkt dar.
Gibt es Fälle, wo die main-Methode Pflicht ist? Oder ist diese immer umgänglich?

MfG


Edit: Tach, hab noch ne Frage, will nen Programm 3 Sekunden warten lassen.
        Habe gegoogelt, dabei kam das raus:

```
try{
       //do what you want to do before sleeping
       Thread.currentThread().sleep(1000);//sleep for 1000 ms
       //do what you want to do after sleeptig
      }
catch(InterruptedException ie)
{
     //If this thread was intrrupted by nother thread 
}
```
Kann mir wer das erklären? sleep ja einfach die Methode zum warten oder? Threads sind die kleinste Verarbeitungseinheit oder? Aber genau so im Zusammenhang erklären, wäre nett, falls sich wer dazu herablässt, einem kleinen Anfänger zu helfen 

MfG


----------



## André Uhres (10. Dez 2008)

"sleep" ist die Methode zum Schlafen, "wait" ist die Methode zum Warten. Der vorgeschlagenen Code legt einfach den laufenden Thread ein Sekunde lang schlafen.

Eine Anwendung braucht immer eine einzige Klasse mit der main Methode.


----------



## Maxga (10. Dez 2008)

Ok, das verstehe ich, kannst du mir vielleicht nurnoch erklären, was der Teil mit catch bewirkt, wozu man diesen hinschreiben muss?(Will halt gerne verstehen, was ich mache)

Danke schonmal,

MfG


----------



## Landei (10. Dez 2008)

> Eine Anwendung braucht immer eine einzige Klasse mit der main Methode.



Normalerweise ja, aber rein technisch gibt es andere Möglichkeiten, etwa:


```
class NoMain {
   static{
      System.out.println("Hi world");
      System.exit(0);
   }
}
```

oder


```
enum S{T;System y;String s="enum S{T;System y;String s=%c%s%1$c;{y.out.printf(s,34,s);y.exit(0);}}";{y.out.printf(s,34,s);y.exit(0);}}
```

Und ja, letzteres Programm läuft tatsächlich.


----------



## ARadauer (10. Dez 2008)

> Ok, das verstehe ich, kannst du mir vielleicht nurnoch erklären, was der Teil mit catch bewirkt


ich weiß nicht, ist es nicht sinnvoller wenn du dich zuerst mal in das thema einließt bevor du dir jeden schritt erklären lässt?

http://openbook.galileocomputing.de...08_001.htm#mj629aba1939df9485c69f15d6e54b33ab


----------



## André Uhres (10. Dez 2008)

Mit der Methode "interrupt" kann ein anderer Thread den schlafenden Thread aufwecken. "sleep" wirft dann eine InterruptedException, die hier im catch-Block aufgefangen wird.


----------



## Maxga (10. Dez 2008)

Ok Danke. Naja bei Exceptions bin ich noch nicht, ich brauchte das halt nur jetzt, das warten zu lassen das Programm, und da würde ich auch gern nicht nur was hinschreiben, sondern es auch verstehen =)

MfG


----------



## ARadauer (10. Dez 2008)

grundsätzlich gehts bei exceptions um fehlerbehandlung...
was machst du wenn du in eine datenbank schreibst und die verbindung geht verlohren...
in datei schreiben und speicher ist voll...
dividieren und jemand dividiert durch 0...

-du wirfst "throw" einen fehler "exception"

wenn du etwas benutzt, das einen fehler werfen kann, versuchst "try" du es auszuführen... wenn ein fehler geworfen wird fängst "catch" du ihn, oder auch nicht, aber dann muss eine methode ihn weiterwerfen....

try{
//hier gefährliche sachen machen
catch(Exception ie) 
{ 
     hier fehler behandlung machen...
}


----------

