"안녕하세요, 아미고! 오늘은 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;
 }
}

"이런 몰리! 너무 간단해. 고마워, Bilaabo. 넌 진짜 친구야!"

"만세! 빌라아보에게 친구가 생겼다!"