Ich vermute auch, das „mangelndes Wissen über Klassen und Methoden der Auslöser für dieses Problem ist.“, Deswegen fange ich bei den Grundlagen an:
Stell dir vor du möchtest ein Auto bauen. Dann könnte man folgendes sagen:
* Die Klasse Auto ist ein Bauplan für ein Auto
* Objekte sind die tatsächlichen Autos:
Auto meinAuto = new Auto();
* Methoden teilen sich in zwei Bereiche
** Prozeduren: Sie manipulieren den Zustand des Objektes und haben Rückgabewert (bzw Pseudorückgabewert void)
** Funktionen: Sie haben einen Rückgabewert und können z.B. etwas über den Zustand des Objekte aussagen.
Ein Prozedur könnte z.B sein: public void FahreGeradeAus(). Sie verändert den Zustand des Objektes von stillstehend zu fahrend.
Ein Funktion könnte sein: public bool StehtAutoStill(). Sie liefert dir Informationen über den Fahrtzustand.
Bsp:
Auto myCar = new Auto();
Auto yourCar = new Auto();
Wenn ich wissen möchte ob ein das ein Objekt vom Typ Auto in Bewegung ist, dann müsste ich in etwa folgendes fragen:
bool inBewegung = myCar.StehtAutoStill();
yourCar.FahreGeradeAus();
bool inBewegung2 = !yourCar.StehtAutoStill();
Diese Funktionen sind Instanzemethoden, d.h. sie sind abhängig von dem Objekt welches ich abfrage. So würde im ohrigen Beispiel inBewegung false sein, inBewegung2 jedoch true.
Statische Methoden haben hier eine besondere Bedeutung: Sie haben keinen Bezug zum konkreten Objekt/Instanz. Das bedeutet sie sind für alle Objekte der Klasse gleich. Man könnte z.B wissen wollen, ob ein Typ (Typ == Klasse) ein Fortbewegungsmittel ist, dann würde man folgendes definieren:
public static bool IsFortbewegungmittel(){
return true;
}
Da alle Objekte vom Typ Auto Fortbewegungsmittel sind, ist diee Eigenschaft nicht vom Konkreten Objekt myCar oder yourCar abhängig, sondern vom Typ. Deswegen wird diese Methode auch Typenabhängig abgefragt:
bool istFortbewegungsMittel = Auto.IsFortbewegungmittel();
Kommen wir nun zu deinem Problem:
Du hast einen Typ fibo2 definiert, der eine statische Methode static int fib2(int n) besitzt. Statische Methode bedeutet, dass du die Methode fib2 nicht über einen Instanz, sondern über den Typ aufrufst:
int fib = fibo2.fib2(5);
System.out.println(gib);
Diesen Aufruf kannst du z.B der Methode
static void main(string args)
unterbringen. Dies ist der Einstiegspunkt eines Java-Programm. Dann sollte auch alles klappen.
PS diese Beispiel ist nur für blutige Anfänger geeignet, da die Erklärung so stark vereinfacht ist, dass Sie für Fortgeschrittene zu ungenau ist.