# Initialisierung von Attributen



## Matrim (9. Aug 2004)

Hallo,

so wie ich es seh, gibt es zwei offensichtliche Arten, Attribute einer Klasse zu initialisieren:

```
class MyClass
{
  // Hier in der Deklaration
  private String myString = null;

  // bzw im Konstruktor
  MyClass()
  {
     myString = null;
  }
}
```

Nun meine Frage, wo sollte man es machen? Spielt es keine Rolle (Rechenzeit...) oder gibt es gar eine Konvention, an die man sich halten sollte? 

Danke für einen Hinweis.


----------



## Illuvatar (9. Aug 2004)

Laut den SUN Coding Conventions nicht:

```
class X
{
    String x = "hallo";
}
```
sondern

```
class X
{
    String x;
    public X()
    {
        x = "hallo";
    }
}
```

Der Unterschied in der Rechenzeit ist, wenn es überhaupt einen gibt, vernachlässigbar gering.


----------



## Matrim (9. Aug 2004)

Alles klar, danke.

Macht auch Sinn, da man nicht alle Deklarationen durchsuchen muss, sondern im Konstruktor schaut.
Mat.


----------



## thE_29 (9. Aug 2004)

man könnte es halt private machen und dann gewisse schreib und lese funktionen implementieren 

also setX(String bla)

und getX() return X;


----------



## Matrim (9. Aug 2004)

thE_29 hat gesagt.:
			
		

> man könnte es halt private machen und dann gewisse schreib und lese funktionen implementieren
> 
> also setX(String bla)
> 
> und getX() return X;


Es geht hierbei um die Initialisierung der Attribute. Da dies im Konstruktor vonstatten geht, braucht man keine getter/setter Methoden, unabhängig ob private, public oder protected.


----------



## bygones (9. Aug 2004)

1. sollte man alle instanz variablen private machen !

2. Bin ich der Meinung Instanzvariablen sollte im Konstruktor initialisiert werden da das anzeigt dass sie zu einer Instanz gehören... Klassenvariablen sollte daher außerhalb des Konstruktors intialisiert werden !


----------



## Illuvatar (9. Aug 2004)

deathbyaclown hat gesagt.:
			
		

> 1. sollte man alle instanz variablen private machen !
> 2. Bin ich der Meinung Instanzvariablen sollte im Konstruktor initialisiert werden da das anzeigt dass sie zu einer Instanz gehören... Klassenvariablen sollte daher außerhalb des Konstruktors intialisiert werden !



1. Ja, ich wollte da oben schnell schreiben  
2. a) Sag ich doch
    b) Würd ja keinen Sinn machen, aber vielleich noch in einem "static initializer"


----------



## thE_29 (9. Aug 2004)

naja, final strings oder sonstiges initialisiere ich gleich vor dem konstruktor, da sie sowieso nie geändert werden  so wie man es in C macht mit den #define

sonstige vars, belege ich vielleicht mit einem default wert, aber sonstige init vars werden im konstruktor, aber auch nur zur übersichtbarkeit gemacht, weil man kann eigentlich schon vorher andere (static) funktionen aufrufen und sie eigentlich "vorm" konstruktor setzen lassen. was aber net wirklich schlau oder sinnvoll ist


----------

