Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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:
public class Main {
public static void main (String[] args) {
System.out.println(getPW());
}
private String 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:
public class StaticTest {
// alle haben das
static int test = 42;
// nur die instant hat den Wert und kann verschieden sein
private int instanceInt;
public StaticTest(int i) {
this.instanceInt = i;
}
/**
* @param args
*/
public static void main(String[] args) {
// alle kenen statics
System.out.println(StaticTest.test);
// 2 instanzen
StaticTest s = new StaticTest(456);
StaticTest s1 = new StaticTest(798);
// jeweils auf der instanz: nicht static
System.out.println(s.getInstanceInt());
System.out.println(s1.getInstanceInt());
// staische Methode für alle gleich
System.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 das
public int getInstanceInt() {
return instanceInt;
}
// alle können das
public static int blub() {
return 741;
}
}
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)