“阿米哥你好!今天比拉博要講的是變量初始化的順序。”

假設您正在查看一些代碼。變量得到什麼值?

代碼
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;
 }
}

“天哪!這太簡單了。謝謝你,Bilaabo。你是一個真正的朋友!”

“萬歲!Bilaabo 有朋友了!”