wie man in der Überschrift lesen kann, weis ich nicht, ob man Methoden statisch macht oder nicht, wenn man diese in anderen Methoden aufruft. Ich weis, dass man Instanzmethoden in statischen Methoden nur aufrufen kann, indem man ein Objekt referenziert, aber wie verläuft das ganze aus, wenn man Instanzmethoden in Instanzmethoden aufrufen möchte? Woher soll ich wissen ob die zu aufrufende Methode statisch sein soll?
Hier ein Bsp :
Code:
public void start()
{
schließen();
}
public void schließen()
{
//....................
}
Also zb. hier. Warum sollte ich die Methode schließen() statisch machen oder warum nicht?
Also wenn du dich fragst, ob du eine Methode/Feld statisch machen sollst, tu es nicht! Wenn du etwas statisch machen musst, dann weißt du auch das du es so brauchst.
Also wenn du dich fragst, ob du eine Methode/Feld statisch machen sollst, tu es nicht! Wenn du etwas statisch machen musst, dann weißt du auch das du es so brauchst.
Die Frage an sich ist schon komisch. Und das meine ich nicht abwertend dir gegenüber - sondern deine Herangehensweise ist einfach falsch oder zu "quer" gedacht.
Instanzmethoden sind Eigenschaften eines Objektes. Die beschreiben was ein Objekt "tut". Entweder die Methoden sind nun Eigenschaften oder eben nicht. Davon abhängig sind die dann statisch oder eben nicht statisch. Ob du die in anderen Instanzmethoden aufrufst oder nicht ist keine Frage zur Beantwortung ob du die statisch machst oder nicht. Von daher lässt sich deine Frage nicht beantworten.
Wenn du nicht mehr als etwa jede 1000te Methode statisch machst bist du in etwa auf dem richtigen Weg...
Objektorientierte Programmierung kennt eigentlich gar keine statischen Klassen oder Methoden. Das widerspricht nämlich dem ganzen Prinzip. Das es sie trotzdem gibt ist schon schlimm genug aber es gibt eben diese 0.1% wo man es wirklich braucht (z.B. Für die main(). Da es aber so schön einfach ist diese zu benutzen wird das halt von vielen einfach benutzt um sich nicht ein ordentliches Konzept ausdenken zu müssen sondern man einfach drauf los programmieren kann.
Eine statische Methode bezieht sich nie auf ein Objekt sondern immer auf die Objektklasse. Du brichst damit also auf jeden Fall die Kapselung die ja den großen Vorteil der OOP ausmacht. Wenn du also statische Methoden verwendest, kannst du auch gleich Basic oder C programmieren, da du dann keine Objekte benötigst.
Es geht nicht darum, ob die Methoden Eigenschaften sind. Ob eine Methode statisch sein sollte oder nicht hängt ganz allein davon ab, ob sie Zugriff auf "this" benötigt, egal ob man das "this" nun explizit hinschreibt oder der Compiler es implizit tut. Wenn du dir da nicht sicher bist, mach die Methode einfach statisch und teste, ob der Compiler meckert.
Doch ~ unterm Strich geht es genau darum, du hast es nur anders - vielleicht sogar genauer - formuliert.
Wenn man das verstanden hat, dann weiß man auch, dass es trotz der Konzepte von OOP und Kapselung Anwendungsfälle gibt, wo statische Methoden Sinn machen. Nämlich genau dann wenn eine Klasse nicht mehr der Bauplan für Objekte ist, sondern ein Container für statische Methoden. Die Klassenbibliothek von Java ist dafür ein gutes Beispiel, die ist nämlich voll davon (siehe z. B. die Klasse Math).
Um jetzt das mal etwas zu konkretisieren.
Static wird verwendet, ...
... wenn man eine Methode hat, die stateless ist (bestes Beispiel wie @Umik gegeben hat, die Klasse Math). Genauer: Wenn man aus der Klasse Math eine Methode nimmt, dann ist es egal mit welchem Argumenten diese aufgerufen wird und in welchen Zustand das Objekt selbst ist, denn das Ergebnis wird nur von den Parametern bestimmt und beeinflußt nicht den Zustand des Objekts.
... um Konstanten einer Klasse zu markieren (immer public static final). Beispiel: Math.PI
... das Singletonpattern anzuwenden.
Mehr fällt mir gerade nicht ein. Also wie ich bereits sagte, wenn du static brauchst, dann weißt du es das du es brauchst.