# Klassen- und Instanzvariablen / Klassen- und Instanzmethode



## Gravity7 (25. Sep 2004)

Hallo Leute!
Also ich bin grad am Javalernen. Doch scheitere an den Klasenvariablen und Instanzvariablen.
1. Wie werden die Klassenvariablen deklariert und wie die Instanzvariablen (falls gleich, wo wird was definiert)? Für was benötigt man Klassenvariablen und für was die Instanzvariablen. Denn ich checke den Unterschied nicht so genau.

2. Was ist der Unterschied zwischen Klassenmethoden und Instanzmethoden? Welche Methode kann man wie und wo verwenden und wie werden sie "deklariert"?

mfg Gravity7 ???:L


----------



## Beni (25. Sep 2004)

Klassen/Instanz-Variablen oder -Methoden kann man am Schlüsselwort "static" unterscheiden:


```
public class Blupp{
  private int instancVariable = 1;
  private static int klassenVariable = 2;

  public void instancMethode(){}
  public static void klassenMethode(){}
}
```

Wann immer du eine Klassenmethode/-Variable benutzen musst, merkst du, dass dein Programm falsch aufgebaut ist :bae:

Klassenvariablen/Methoden gehören sozusagen zum Bauplan einer Klasse, Instancvariablen/methoden zu dem Objekt, das durch den Bauplan beschrieben wird.

Such mal in der FAQ nach "static", das kommt etwa 3 mal vor.


----------



## Kaan (26. Sep 2004)

Instanzvariablen und Klassenvariablen werden innerhalb einer Klasse definiert. 

Instanzvariablen werden mit dem Objekt zusammen instanziert (bzw. erstellt) und haben daher von Objekt zu Objekt einer Klasse einen anderen Wert. 

Klassenvariablen werden nicht für jedes Objekt einer Klasse erzeugt, sonder alle Objekte dieser einen Klasse können dieselbe Variable nutzen.

Wenn du willst, schreib ich dir auch ein Beispiel zu Instanz- und Klassenvariablen.

PS: Wir sehen uns morgen in der Schule Ciao


----------



## Kaan (26. Sep 2004)

Achja, für den Aufruf von Klassen- und Instanzmethoden gilt dasselbe.


----------



## Gravity7 (26. Sep 2004)

Also wenn ich das jetzt richtig verstanden habe, dann kann man mit Instanzvariablen sowas machen bzw. aufrufen für ein Objekt einer Klasse:

```
//zuerstmal Objekte erstellen.
Klasse objekt = new Klasse();
Klasse objekt2 = new Klasse();

//dann die Variable z.B. name für das Objekt
objekt.name = "Hubert";
objekt2.name = "Anton";
```

und eine Klassenvariable ist dann etwa sowas:

```
//zuerst mal die Klassenvariable erstellen.
int name = "Hubert";

//dann die Variable einem Objekt "zufügen".
System.out.println(objekt.name) //hier wird Hubert ausgegeben.
System.out.println(objekt2.name)//hier wird ebenfalls Hubert ausgegeben.
```

Also ich habe es so verstanden, dass man bei Klassenvariablen den Wert nicht ändern kann (wie in dem Beispiel wo Hubert bei beiden Objekten ausgegeben wird), aber bei Instanzvariablen schon (wie im ersten Beispiel mit Anton und Hubert).


----------



## Kaan (26. Sep 2004)

Ne, da muss ich dich entäuschen.
Ich zeig dir ein Beispiel:


```
class Pi
{
    public double pi1 = 3.14159;           //Instanvariable
    public static double pi2 = 3.14159;  //Klassenvariable
}

public class Main
{
    public static void main(String[] args)
    {
        //Pi über Instanzvariable ausgeben
        Pi test = new Pi();
        System.out.println(test.pi1);
        
        //Pi über Klassenvariable ausgeben
        System.out.println(Pi.pi2);
    }
}
```

Beim abgreifen der Klassenvariable musst du kein Objekt erzeugen. Du liest und schreibst den Inhalt der Variable über _Klassenname.Variablennamen_. Klassenvariablen sind z.B. gut, wenn es unnötig wäre um eine Hilfsvariable in deinem Programm zu verwenden jedesmal im Code ein Objekt dafür zu erzeugen.


----------



## Gravity7 (26. Sep 2004)

Ok, danke Kaan. Jetzt kapiere ich das ganze.
mfg Gravity :###


----------



## foobar (26. Sep 2004)

> Wann immer du eine Klassenmethode/-Variable benutzen musst, merkst du, dass dein Programm falsch aufgebaut ist


Das sehe ich anders. Was ist mit Singletons, Factories usw.? Da kommt man um Klassenmethoden nicht herum.


----------



## Roar (26. Sep 2004)

das war wohl eher ironisch gemeint bzw. vor allem im zsuammenhang: klasse1 greift auf klasse2 über statische variablen zu


----------

