Reference to non-static method

Status
Nicht offen für weitere Antworten.

nzuri

Mitglied
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;
	}
}

Edit:
mehr kommentar
 
Zuletzt bearbeitet:
Ist denn überhaupt klar, was der Unterschied zwischen einer Klasse und einer Instanz bzw. einem Objekt ist?
 
äähm. eine klasse wird instanziert und somit zu einem objekt?
ok. vllt fange ich noch mal von vorne an...
 
>ää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)

so in kurz
 
Zuletzt bearbeitet:
vielen dank!

würde also helfen, wenn ich einfach aus "private String ..." ein "private static String" machen würde?
 
>würde also helfen, wenn ich einfach aus "private String ..." ein "private static String" machen würde?

ja. (static ist aber meisten böse, va bei Anfängern)

oder, du machst eine Instanz:
Main main = new Main();
main.getPw();
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben