# Was sind Instanzvariablen?



## pommespaula (10. Sep 2004)

Hi,

was sind Instanzvariabeln?

Sind das die Variabeln die man einer Klasse zuweisen kann? 

z.B.:


```
Punkt(int x, int y)
```

Sind dann x und y Instanzvariabeln?

Danke für eure Hilfe


----------



## Illuvatar (10. Sep 2004)

```
class Punkt
{
 int x;
 int y;
}
```
Jetzt sins welche :wink:


----------



## pommespaula (10. Sep 2004)

kannst das einwenig erläutern? hab mir nen scheiß Buch gekauft!


----------



## Illuvatar (10. Sep 2004)

Welches denn?



			
				Javabuch ([url hat gesagt.:
			
		

> www.javabuch.de[/url])]Variablen dienen dazu, Daten im Hauptspeicher eines Programms abzulegen und gegebenenfalls zu lesen oder zu verändern. In Java gibt es drei Typen von Variablen:
> 
> Instanzvariablen, die im Rahmen einer Klassendefinition definiert und zusammen mit dem Objekt angelegt werden.
> Klassenvariablen, die ebenfalls im Rahmen einer Klassendefinition definiert werden, aber unabhängig von einem konkreten Objekt existieren.
> Lokale Variablen, die innerhalb einer Methode oder eines Blocks definiert werden und nur dort existieren.



D.h., das von dir waren lokale Variablen. Instanzvariablen sind nicht-statisch und in einem gesamten Objekt sichtbar.


----------



## Isaac (10. Sep 2004)

Instanzvariablen oder auch Klassenglobale Variablen sind variablen die in der ganzen Klasse zugänglich sind. Sie unterscheiden sich von Variablen die in Methoden definiert sind durch ihre Gültigkeit und Sichtbarkeit. 






```
class Punkt 
{ 
int x = 0; 
int y = 0; 

public void movePunkt()
{
    int z = 0;
    x     = 0;
}

public void fixPunkt()
{
    z = 1;
    x = 1;
}
```

DAs funktioniert so natürlich nicht. Aber hier sieht man die Gültigkeit. Wärend x und y Klassenglobal in allen Methoden zur Verfügung stehen ist dies für z nicht der Fall. z gilt nur innerhalb der Methode movePunkt().  Grundsätzlich kann man sagen das alle Variablen innerhalb der geschweiften Klammern gelten zwischen denen sie definiert sind. 

Was man wo und wie einsetzt bleibt einem selbst überlassen. Klassenglobale Variablen sollten so wenig wie möglich eingesetzt werden, es geht auch komplett ohne. Aber sie machen das Leben an vielen Stellen einfacher.


----------



## pommespaula (10. Sep 2004)

und diese InstanzVariabeln können durch die lokalen Variabeln einer Methode überdeckt werden. Es sei denn ich häng ein this. davor.

Methoden selbst können ohne den Zeiger *this.* auf InstanzVariabeln zu greifen(jedenfalls solange in der Methode selbst keine gleichnamigen lokalen Variabeln definiert(nennt man das so?) sind), da der compiler den Zeiger *this.* selbst davor hängt. 
aber sindvoll ist es vermutlich trotzdem immer ein *this.* davor zuschreiben um den Quellcode besser lesbar zu machen! 

Habe ich das richtig verstanden?

Wenn ja bin ich wirklich ein ganzes Stück weiter!!![/b]


----------

