# Unterschied Instanz- Klassenvariable



## GroveStreet (9. Jan 2018)

Hi Leute, ich als Java Anfänger brauche eure Hilfe für einen anstehenden Test.
Es sind nur zwei fragen, 

1)Erläutern Sie, inwiefern sich Java-Instanzvariablen von Klassenvariablen unterscheiden. Geben Sie jeweils ein Beispiel an.


2)Erklären Sie anhand eines Beispiels, warum es sinnvoll sein kann, in einem Konstruktor den Wert von Instanzvariablen nicht direkt zu setzen, sondern hierfür stattdessen eine SetterMethode aufzurufen.   

Ich habe zwar schon ein Lösung rausgesucht bzw weiß eine, aber würde gerne auf Nummer sicher gehen. Wäre nett wenn ihr mir helfen könnt


----------



## mrBrown (9. Jan 2018)

GroveStreet hat gesagt.:


> Ich habe zwar schon ein Lösung rausgesucht bzw weiß eine, aber würde gerne auf Nummer sicher gehen.


Na dann zeig mal deine Antwort und wir sagen dir was zu der


----------



## olfibits (9. Jan 2018)

> Na dann zeig mal deine Antwort und wir sagen dir was zu der


Dem schließe ich mich an.

Trotzdem hier meine Lösung:
1.) Klassenvariablen stehen allen Instanzen einer Klasse zur Verfügung, Instanzvariablen jedoch nur innerhalb einer einzelnen Instanz der Klasse.
2.) Setter-Methoden können leichter auf Exceptions reagieren, wenn ein ganz schlauer Typ einem Konstruktor einen falschen Datentyp übergibt.


----------



## GroveStreet (9. Jan 2018)

zu 1)
Klassenvariablen sind "static" --> public static int zahl. Man kann in der ganzen Klasse auf diese Variable zugreifen.

Instanzvariablen sind Eigenschaften/Instanzen von einem Objekt. 
Instanzvariablen --> public String name; 

Reicht das schon aus? oder gibt es da noch mehr dazu?


----------



## mrBrown (9. Jan 2018)

olfibits hat gesagt.:


> 2.) Setter-Methoden können leichter auf Exceptions reagieren, wenn ein ganz schlauer Typ einem Konstruktor einen falschen Datentyp übergibt.


Im Konstruktor kann man genauso auf Exceptions reagieren, und falsche Datentypen kann man nicht übergeben, ohne das der Compiler meckert (und wenn, gäbe es da wieder keinen Unterschied) 

Allerdings finde ich die Frage auch ziemlich nicht sehr gut...


----------



## mrBrown (9. Jan 2018)

GroveStreet hat gesagt.:


> Reicht das schon aus? oder gibt es da noch mehr dazu?


Der wesentliche Unterschied würde mir in der Antwort fehlen


----------



## Javinner (9. Jan 2018)

mrBrown hat gesagt.:


> Der wesentliche Unterschied würde mir in der Antwort fehlen


Bitte mach es nicht so spannend


----------



## Manuel.R (10. Jan 2018)

Instanzvariabel oder auch Member-Variabeln sind für jedes erzeugte Objekt einer Klasse separiert, in der Regel (Nx).

Klassenvariablen sind der Klasse zugeordnet, in der Regel (1x).  Der Wert einer Klassenvariable ist für alle Objekte gleich.


----------



## Manuel.R (10. Jan 2018)

das ist auf jeden Fall doof zu erklären.....


----------



## GroveStreet (10. Jan 2018)

okay vielen dank leute. ja finde die fragen auch doof aber so waren sie auf unserem Übungsblatt gegeben:/
auf jedenfall vielen dank für eure Hilfe


----------



## mariomueller (22. Mrz 2018)

hi,
mal angenommen, Du hast eine Klasse 
	
	
	
	





```
Auto
```
 erstellt. Verschiedene andere Programme können Deine Autoklasse benutzen, um beispielweise eine Auto zu konfigurieren; nennen wir die Methode 
	
	
	
	





```
konfiguriereAuto
```

Weil Du neugierig bist, möchtest Du wissen, wieviele Autos schon konfiguriert wurden

Also brauchst Du einen Zähler, der unabhängig von 
	
	
	
	





```
konfiguriereAuto
```

Du legst einfach eine Klassenvariable:  

```
Public static int autoZaehler = 0;
```

Jedes externe Programm das Deine Klasse benötigt, mus diese natürlich über den Konstruktior instanzieren.
Also bohrst Du einfach den Konstruktor auf und inkrementierst den Zähler:


```
public class Auto {

    // Klassenvariable
    public static int autoZaehler = 0;
  
    // Konstruktor
    public Auto() {
        autoZaehler++;
    }


    public void konfiguriereAuto() {
        // hier wäre der konfigurator code
    }

}
```

Grüße Mio


----------



## mariomueller (22. Mrz 2018)

Zum setter:

Angenommen, Du hast eine Klasse "Mitschüler". Diese hat die Variablen, Name, Vorname, blabla und EMail-adresse

Angenommen über eine Internetoberfläche, können Deine Kameraden, sich in Dein Gästebuch eintragen.
Wenn Du nun EMail-adresse public machst, kann hier jeder jeden Mist eintragen.

Nimmst Du aber statt dessen eine Setter-Methode. Die Methode aufbohren und prüfen, ob eine korrekte Mailadresse (also mir @ und .de oder so ähnlich) eingegeben wurde.
Zudem kannst Du in der Setter Methode, noch andere Methoden aufrufen, die Dir die Gästebuchdaten evtl. auf eine Datenbank wegschreiben und und und...

Gruß
Mario


----------

