– Cześć, Amigo! Dzisiaj Bilaabo opowie o kolejności inicjalizacji zmiennych.

Wyobraź sobie, że patrzysz na pewien kod. Jakie wartości przyjmują te zmienne?

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

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

– Czy to naprawdę jest dozwolone?

– Oczywiście. Kolejność, w jakiej deklarowane są metody i pola członków klasy, nie jest istotna.

Klasa jest ładowana w kolejności od góry do dołu, więc ważne jest, aby dane pole miało dostęp tylko do tych pól, które zostały już załadowane. W tym przykładzie b ma dostęp do a, ale nie wie nic o c.

– I co się stanie?

– Tworzone zmienne przyjmują wartości domyślne.

Kod Co się dzieje naprawdę
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;
 }
}

– Kurka wodna! To takie proste. Dziękuję, Bilaabo. Dobry z Ciebie kumpel!

– Hurra! Bilaabo ma kumpla!