"สวัสดี Amigo! วันนี้ Bilaabo จะพูดถึงลำดับที่ตัวแปรถูกเตรียมใช้งาน "

จินตนาการว่าคุณกำลังดูโค้ดบางอย่าง ตัวแปรได้ค่าอะไรบ้าง

รหัส
class Cat
{
 public int a = 5;
 public int b = a + 1;
 public int c = a * b;
}
รหัส
class Cat
{
 public int a = getSum();
 public int b = getSum() - a;
 public int c = getSum() - a - b;

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

“อนุญาตจริงเหรอ?”

"แน่นอนลำดับการประกาศเมธอดและฟิลด์สมาชิกของคลาสนั้นไม่สำคัญ "

คลาสถูกโหลดจากบนลงล่าง ดังนั้นฟิลด์จึงจำเป็นต้องเข้าถึงเฉพาะฟิลด์อื่นๆ ที่โหลดไปแล้วเท่านั้น ในตัวอย่างbสามารถเข้าถึงaแต่ไม่รู้อะไรเลยเกี่ยวกับc

"แล้วจะเกิดอะไรขึ้น"

"เมื่อสร้างตัวแปร ตัวแปรจะได้รับค่าเริ่มต้น"

รหัส เกิดอะไรขึ้นจริงๆ
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;
 }
}

"Holy moly! มันง่ายมาก ขอบคุณ Bilaabo คุณเป็นเพื่อนแท้!"

"ไชโย! บิลาโบมีเพื่อนแล้ว!"