next up previous contents index
Next: Objekterzeugung Up: Klassen und Objekte Previous: Klassenmethoden

Initialisierer

  Attribute können bei der Deklaration initialisiert werden. Dies gilt sowohl für

Instanzvariablen

als auch für

Klassenvariablen

   class Kreis
   { double r = 1.0;
     static int kreiszahl = 100;
     ...
   }

Instanzvariablen:  

Initialisierung wird jedesmal bei Erzeugung eines Objektes ausgeführt.

Klassenvariablen:  

Initialisierung wird nur einmal durchgeführt, wenn die Klasse geladen wird.

Initialisierung von Klassenvariablen

     

    class Rechteck
    { static float max_sv = 2.0;
      static float max_h = 10.0
      static float max_b = max_sv * max_h;
      ...
    }

Die Regeln:

Daher bekommen wir hiermit 2 Compiler-Fehlermeldungen:

    class falsche_static_inits
    { static float f = j;     // VORWÄRTS!
      static int j = 1;
      public int max;
      static int k = max + 1; // INSTANZVAR!
      ...
    }

Für komplexere Initialisierungen, die nicht als einfacher Ausdruck geschrieben werden können, gibt es die statischen Initialisierungsblöcke:  

   public class Kreis
   { static private double pi = 3.14;
     static private double[] sins 
                  = new double[1000];

     // Statischer Initialisierungsblock
     static
     { double x = 0.0;
       double delta_x = pi / 2 / (1000-1);
       int i;
       for (i=0; i < 1000; i++)
         { sins[i] = Math.sin(x);
           x += delta_x;
         }
     }
   }

Es darf mehrere solcher Blöcke geben. Sie werden behandelt wie ein einziger, der durch Hintereinanderhängung entsteht.

Initialisierung von Instanzvariablen

     

   public class tisch
   { bein[] beine;
     int anz_beine = 4;
   }

Hier gelten ähnliche Regeln wie bei den Klassenvariablen (Seite gif):

Daher bekommen wir hiermit 2 Compiler-Fehlermeldungen:

    class falsche_instanz_inits
    { float f = j;     // VORWÄRTS!
      int j = 1;
      int k = k + 1;   // REKURSIV!
      ...
    }

Für komplexerer Initialisierung, die nicht als einfacher Ausdruck geschrieben werden können, gibt es die Instanz-Initialisierungsblöcke (ab Java1.1):      

public class tisch
{ String platte = "Holz";
  String[] beine;
  int anz_beine = 4;

  { int i;
    for (i = 0; i < anz_beine; i++)
      beine[i] = "Bein " + i;
  }
  
  public tisch(String p_material)
    { platte = p_material;
    }
}

Es darf mehrere solcher Blöcke geben. Sie werden behandelt wie ein einziger, der durch Hintereinanderhängung entsteht.

Nun kennen wir alle Akteure, die bei der Erzeugung neuer Objekte eine Rolle spielen:


next up previous contents index
Next: Objekterzeugung Up: Klassen und Objekte Previous: Klassenmethoden

Peter Pfahler, 1997