Mit der Methode zaehlen will ich die Anzahl der Methodenaufrufe zählen. Ich würde es jetzt so machen, dass ich für jede einzelne Methode eine eigene Zählvariable deklariere. Aber gibt es dafür auch noch eine elegantere Lösung? Und muss ich beim Zählen von Instanzmethoden etwas beachten?
a) Strings vergleicht man mit equals und nicht per ==.
b) Deine Methode test2 ist statisch, kann also direkt auf der Klasse aufgerufen werden. countertest2 ist nicht statisch und kann daher in test2 nicht verändert werden. Dein Code übersetzt so also nicht.
a) Strings vergleicht man mit equals und nicht per ==.
b) Deine Methode test2 ist statisch, kann also direkt auf der Klasse aufgerufen werden. countertest2 ist nicht statisch und kann daher in test2 nicht verändert werden. Dein Code übersetzt so also nicht.
Es ist ein Weg. Die Frage ist, wieso du sowas machst und was da der Hintergrund ist. Es es um das Erlernen von Java geht und da speziell um das static Keyword: ja, das wäre dann wohl die vorgesehene Lösung.
Ansonsten gibt es auch noch weitere Möglichkeiten, um da nicht den gleichen Code überall zu haben. Hier wäre z.B. AOP (Aspect Oriented Programming) denkbar. Aber wenn Du gerade mit Java anfängst, dann ist das ein Punkt, den du getrost erst einmal vergessen kannst
Ich gehe mal davon aus dass es eine Uebungsaufgabe ist. Wenn das keine Uebungsaufgabe, ist musst du deinen genauen Anwendungsfall sagen (wie @kneitzel schon meinte).
Gehen wir das mal durch, nehmen wir an wir haben einen Klasse mit drei Methoden:
Wie wir merken, wird das sehr schnell sehr wiederholend und langweilig, desweiteren haben wir dann in unserer Klasse sehr viele Variablen herum liegen. Wir koennten zum Beispiel die Variablen zusammen fassen in ein Array:
Das reduziert zwar die Variablen, aber die Verwendung ist jetzt nicht mehr so toll (welche Methode hat Index 2?). Wir koennten dann noch Konstanten mit Name und Index anlegen, aber dann sind wir wieder zurueck bei vielen Variablen. Eine Map waere eine bessere Loesung, da wir dann per Namen auf die Zahlen zugreifen koennten. Der Nachteil ist, dass wir dann einen Integer verwenden muessen anstelle eines ints, was die Handhabung etwas erschwert. Daher werden wir uns eine Methode zum zaehlen anlegen:
Ist relativ mehr geworden (ja, Teile davon wuerde der Compiler automatisch machen mit Boxing/Autoboxing, aber ich mache so etwas nicht, verklagt mich). Der Vorteil hier ist dass wir sehr einfach neue Methoden hinzunehmen koennen zum zaehlen, wir muessen einfach nur die Methode aufrufen. Der Nachteil ist, dass wir den Methodennamen duplizieren, wenn wir die Methode einmal umbenennen, koennten wir den Aufruf vergessen. Fuer eine Ubuengsaufgabe waere eine solche Loesung aber absolut ausreichend.
Wenn man auch nicht den Methodennamen im Aufruf warten will, kann man noch per Reflection auf den aktuellen Callstack zugreifen. Da sind wir aber schon sehr tief in einer komplett anderen Thematik, aber der Vollstaendigkeit halber: