Java: Was ist an meinen Code falsch: Cannot make a static reference to the non-static method ....?
Ich bekomme die Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot make a static reference to the non-static method addRezept(String) from the type Testclasse at Testclasse.main(Testclasse.java:16
Dabei sehen die Klassen so aus:
Testclasse:
import java.util.*;
public class Testclasse { private HashMap<String, Rezept> rezeptList = new HashMap <String,Rezept>(); void addRezept(String name) { rezeptList.put(name, new Rezept(name)); }
public static void main (String[] args)
{
addRezept("Test"); <-----HIER IST DER FEHLER
}
}
und Rezept:
public class Rezept
{
private String rezeptname;
public Rezept(String name)
{
rezeptname=name;
}
}
Ich verstehe nicht, was an diesen Code falsch ist. Vielleicht kann mir ja einer helfen den Fehler zu finden. Ich wäre auch für eine kurze Erklärung, Korrektur, beziehungsweise für einen kurzen Literaturhinweis für das Problem dankbar.
Schon mal vielen Dank für die Hife.
4 Antworten
addRezept ist eine Methode eines Objekts und kann daher so nicht aufgerufen werden.
Du musst in deiner Main schreiben:
Testclasse test = new Testclasse();
test.addRezept("Test");
Jetzt klappt es und ich habe meinen Fehler verstanden. Danke, schön.
Das mit static ist zu Beginn etwas verwirrend, aber eigentlich leicht zu verstehen. Lies dir dazu mal folgende Seite durch: http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_05_003.htm#mjd51d5220468ee4a1f2a07b6796bb393b
In deinem Fall soll die Methode addRezept aber keine "allgemein gültige" Methode sein, sondern sich auf ein Objekt beziehen. Um diese aufzurufen brauchst du also zunächst ein Objekt:
public static void main (String[] args){
Testclasse testobjekt = new Testclasse(); //neues Objekt mit einer eigenen HashMap
testobjekt.addRezept("Test"); //aufruf von addRezept von deinem Objekt
}
~Tim
es fehlt das Wort "static", wenn du die Methode ohne Objekt aufrufen willst
static void addRezept(String name){
als Alternative kannst du auch ein Objekt der Testclasse erstellen
stimmt, das habe ich übersehen, die HashMap müsste auch statisch sein
Ich arbeite meist mit einer eigenen Main-Methode (nenne sie mal top()).
Das sieht dann so aus, und Du brauchst Dich nie mehr um "static" zu kümmern.
import java.util.*;
public class Testclasse {
public static void main (String[] progArgumente){
new Testclasse().top();
}
/*** DEIN CODE BEGINNT HIER: ***/
void top() {
addRezept("Test");
}
private HashMap<String, Rezept> rezeptList;
rezeptList = new HashMap <String,Rezept>();
void addRezept(String name) {
rezeptList.put(name, new Rezept(name));
}
}
static alleine würde in dem Fall nicht ausreichen, weil in der Methode auf eine nicht statische Membervariable der Klasse zugegriffen wird.