# Statische und Nicht-Statische Methoden



## Dreezard (20. Okt 2004)

Hallo Leute. Ich wende mich heute zum ersten mal an euch.
Ich habe eine (garantiert) ziehmlich dumme Anfänger-Frage.
Ich habe mal so ein kleines Übungsprogramm geschrieben und meine 1000 Fehler rausbekommen.
Nur an einem scheitere ich. In Java scheint es wohl nicht möglich zu sein von einer statischen Methode zu einer nicht-statischen zu verweisen... Wie kann man das umgehen? Ok ich bezweifle dass man das kann, aber ich müsse mein "prog" dann ziehmlich umschreiben...
Warum kann man statische und nicht statische Methoden eigentlich nicht aufeinander verweisen?

Many thanks 4 your help!


----------



## bygones (20. Okt 2004)

statische Methoden sind Methode der Klasse, nicht-statische Methoden sind Methode einer Instanz einer Klasse.

Eine KlassenMethode bzw. eine Klassenvariable gilt für alle Instanzen einer Klasse, instanzmethoden bzw. instanzvariablen gelten nur für die aktuelle Instanz.

Daher kann eine statische Methode nicht eine nicht-statische Methode aufrufen, da sie sich in versch. Scopes befinden...

entweder alles statisch machen (nicht so gut) oder die statischen in nicht-statische Methoden umwandeln...


----------



## Beni (20. Okt 2004)

Man möchte doch glatt ein Verweis in die FAQ angeben :wink:


----------



## Dreezard (20. Okt 2004)

gut, das prinzip hab ich verstanden. thx.

Aus der main-Methode (und die ist bekanntlich statisch) eine nicht-statische aufzurufen, die einen text ausgibt, eine eingabe erwartet (ist ein Konsolenprogramm) und nach auswertung dieser eine Instanzvariable des Aufgerufenen Objektes setzt zu wollen ist also nicht möglich? Ich kann das schlecht in die main-methode schreiben, da ich einige methoden eingerichtet habe die sich untereinander aufrufen, da ja main, das ganze von oben nach unten abarbeitet...


----------



## akira (20. Okt 2004)

Hi,

Du könntest das in etwa so lösen:


```
public class MyClass {

    public static void main(String args[]) {
          MyClass instance = new MyClass();
          instance.hauptMethode();
    }


    private void hauptMethode() {
          //....
          andereMethode();
          //...
   }

    private void andereMethode() {
        // ....
        weitereMethode();
        // ....
    }

    private void weitereMethode() {
        // ....
    }
}
```


----------



## Dreezard (20. Okt 2004)

aaahhh! Klingt plausibel! werd ich gleich mal probieren!


----------



## Dreezard (20. Okt 2004)

funktioniert wunderbar. Many thx nochmal!


----------



## thE_29 (21. Okt 2004)

du könntest auch alle Funktionien static machen, dann brauchst du sie auch nicht mit deiner instanz.funktion() aufrufen!

also so:


```
public class MyClass {

    public static void main(String args[]) {
         hauptMethode();
    }


    public static void hauptMethode() {
          //....
          andereMethode();
          //...
   }

    public static void andereMethode() {
        // ....
        weitereMethode();
        // ....
    }

    public static void weitereMethode() {
        // ....
    }
}
```

du musst hatl deine variablen dann auch alle static machen!

Empfehlen würde ich dir sowas nicht, aber das du gesehen hast, dass das auch geht (und probieren kannst du es ja auch)!


----------

