„Hallo Amigo! Heute wird Bilaabo über die Reihenfolge sprechen, in der die Variablen initialisiert werden.“

Stell dir vor, du siehst dir einen Code an. Welche Werte erhalten die Variablen?

Code
class Cat
{
 public int a = 5;
 public int b = a + 1;
 public int c = a * b;
}
Code
class Cat
{
 public int a = getSum();
 public int b = getSum() - a;
 public int c = getSum() - a - b;

 public int getSum()
 {
  return a + b + c;
 }
}

„Ist das wirklich erlaubt?“

„Natürlich. Die Reihenfolge, in der die Member-Methoden und -Felder einer Klasse deklariert werden, ist nicht wichtig.

Eine Klasse wird von oben nach unten geladen, daher ist es wichtig, dass ein Feld nur auf andere Felder zugreift, die bereits geladen wurden. Im Beispiel kann b auf a zugreifen, weiß aber nichts von c.

„Und was wird dann passieren?“

„Wenn Variablen erstellt werden, erhalten sie Standardwerte.“

Code Das passiert tatsächlich
class Cat
{
 public int a = 5;
 public int b = a + 1;
 public int c = a * b;
}
class Cat
{
 public int a = 0;
 public int b = 0;
 public int c = 0;

 public Cat()
 {
  super();

  a = 5;
  b = a + 1; //5+1 = 6
  c = a * b; //5*6 = 30
 }
}
class Cat
{
 public int a = getSum();
 public int b = getSum() - a;
 public int c = getSum() - a - b;

 public getSum()
 {
  return a + b + c;
 }
}
class Cat
{
 public int a = 0;
 public int b = 0;
 public int c = 0;

 public Cat()
 {
  super();

  a = getSum(); //(a+b+c)=0
  b = getSum() - a; //(a+b+c)-a=b=0
  c = getSum() - a - b; //(a+b+c)-a-b=c=0
 }

 public getSum()
 {
  return a + b + c;
 }
}

„Heiliger Strohsack! So einfach ist das. Danke, Bilaabo. Du bist ein echter Freund!“

„Hurra! Bilaabo hat einen Freund!“