hi. ich weiß, das ist ein altleidiges thema, und ich habe auch schon viel dazu gelsesn, aber ich habe es immer noch nicht verstanden, ich glaube mir vehlt da irgendein grundlegendes verständnis:
Java:
publicclassMain{publicstaticvoid main (String[] args){System.out.println(getPW());}privateString getPW (){String password ="buh";return password;}}
warum geht das nicht? warum sagt mir eclipse: "Cannot make a static reference to the non-static method getPW() from type Main"?
ist mir n bisschen peinlich, aber kann mir das einer erklären?:rtfm:
static = Klasse
nicht static = auf das jeweilige Objekt/Instanz
Java:
publicclassStaticTest{// alle haben dasstaticint test =42;// nur die instant hat den Wert und kann verschieden seinprivateint instanceInt;publicStaticTest(int i){this.instanceInt = i;}/**
* @param args
*/publicstaticvoidmain(String[] args){// alle kenen staticsSystem.out.println(StaticTest.test);// 2 instanzenStaticTest s =newStaticTest(456);StaticTest s1 =newStaticTest(798);// jeweils auf der instanz: nicht staticSystem.out.println(s.getInstanceInt());System.out.println(s1.getInstanceInt());// staische Methode für alle gleichSystem.out.println(StaticTest.blub());// auch alle Instanzen haben die gelichen statics (sollte man nicht via Instanz machen)System.out.println(s.test);System.out.println(s1.test);System.out.println(s.blub());System.out.println(s1.blub());}// nur instanz kann daspublicintgetInstanceInt(){return instanceInt;}// alle können daspublicstaticintblub(){return741;}}
Ich glaube dir fehlt das grundlegende Verständnis der objektorientierten Programmierung. Falls du ansonsten bereits programmieren kannst, würde ich dir das (Online-)Buch Java ist auch eine Insel empfehlen.
>äähm. eine klasse wird instanziert und somit zu einem objekt?
Passt soweit.
Objekte haben spezifische Eigenschaften, welche sich unterscheiden können pro Instanz:
private int instanceInt;
aber auch Eigenschaften, welche für alle gleich sind:
static int test = 42;
Nun, kann man die spezifischen E für eines Objektes nur via instanz hohlen. Naja sie können ja verscheiden sein.
s hat 456
s1 hat 789
Allgemeine E (static) sind für alle gleich, darum muss man sie nicht speziell über die Instanz hohlen, sondern kann direkt daruaf zugreifen:
StaticTest.test
StaticTest.blub()
gilt sowohl für Methode als auch für Variablen. (nur nicht statics können static benutzen, umgekehr nicht)