| 

.NET C# Java Javascript Exception

4
Ich fange gerade an Java intensiv zu lernen. Derzeit beschäftige ich mich mit Klassen und frage mich, was man bei einer Klassendefinition zu beachten hat. Ich meine dabei nicht den eigentlichen Aufruf, sondern die Deklaration von Variablen. Insbesondere geht es um die Unterscheidung von Instanzvariablen und Klassenvariablen. Was verbirgt sich dahinter genau?
News:
08.02.2012
webgranth 11 1 1 2
1 Antwort
2
Klassenvariablen sind unabhängig von einer Instanz der Klasse verfügbar. Sie werden bereits im Byte-Code instanziert. Klassenvariablen werden von allen Instanzen der Klasse geteilt.
Instanzvariablen hingegen stehen nur innerhalb einer Instanz der Klasse zur Verfügung.

public class InstanzenZaehler{
// Klassenvariable
public static int counter = 0;

// Instanzvariable
public int num = 0;

// Konstruktor
public InstanzenZaehler() {
counter++;
num++;
}

// Klassenmethode
static int getCounter() {
return counter;
}
}

//Beispiel 1:
System.out.println("Klassenvariable: " + InstanzenZaehler.counter); //0 (bin mir nicht sicher ob das so in Java geht)
System.out.println("Klassenvariable: " + InstanzenZaehler.getCounter()); //0
System.out.println("Instanzvariable: " + InstanzenZaehler.num); //Fehler, da es sich um eine Instanzvariable handelt

//Beispiel 2:
InstanzenZaehler obj_1 = new InstanzenZaehler();
InstanzenZaehler obj_2 = new InstanzenZaehler();

System.out.println("Klassenvariable: " + InstanzenZaehler.counter); //2 (bin mir nicht sicher ob das so in Java geht)
System.out.println("Klassenvariable: " + InstanzenZaehler.getCounter()); //2
System.out.println("Klassenvariable: " + obj_1.counter); //2 (bin mir nicht sicher ob das so in Java geht)
System.out.println("Klassenvariable: " + obj_1.getCounter()); //2
System.out.println("Instanzvariable: " + obj_1.num); //1
System.out.println("Instanzvariable: " + obj_2.num); //1


In Beispiel 1 erkennst du, dass, obwohl noch keine Instanz der Klasse "InstanzenZaehler" angelegt wurde, du bereits auf die Variable counter und die Funktion getCounter zugreifen kann.
In Beispiel 2 werden nun 2 Instanzen angelegt. counter und getCounter liefern nun jeweils 2 zurück da die Variable zwischen den Instanzen geteilt wird. num hingegen liefert jeweils nur 1 zurück da es sich hier um eine Instanzvariable handelt die nur innerhalb einer Instanz der Klasse verfügbar ist.
08.02.2012
Floyd 14,6k 3 9

Stelle deine Java-Frage jetzt!