2017-03-19 5 views
0

저는 인스턴스 데이터로 취급 할 변수와 정식 매개 변수로 취급 할 변수를 Java가 결정하는 방법 (Java를 의인화하는 것처럼 들리는 경우 변명)을 파악하려고합니다. 나는이 혼란이 적절한 코딩 기술에 따라 회피 될 수 있다는 것을 알고 있지만, 그 뒤에있는 논리에 관해서는 궁금하다. 다음 예 :Java가 형식 매개 변수 또는 인스턴스 데이터 인 경우 어떻게 감지합니까?

public Foo{ 
    int a, b, c; 

    //this assigns the formal parameters' values to the instance data's values 
    public Foo(int x, int y, int c){ 
     a = x; //makes sense 
     this.b = y; //makes sense 
     c = c; //how? 
    } 

    //how can you tell which value is being dealt with 
    public int getBar(int a, int b, int c){ 
     if(b < (b - b)) 
      a += 5; 
     else 
      a += a; 
     b = b; 
     b += c; 
     return b; 
    } 
} 

생성자, Foo()는 형식 매개 변수는 모든 인스턴스 데이터에 복사되고있다. 첫 번째 두 과제는 분명하지만 세 번째 과제는 내가 몇 가지 질문을하기 시작하는 곳입니다. Java는 사용하는 "c"를 어떻게 알 수 있습니까? 인스턴스 데이터를 저장하는 매개 변수 또는 형식 매개 변수를 나타내는 매개 변수 두 번째 함수 (너무 극단적 인 경우 미안)에서 Java가 인스턴스 데이터를 나타내는 변수와 형식 매개 변수를 나타내는 변수를 결정하는 방법은 무엇입니까?

+2

규칙은 간단합니다. 매개 변수와 필드 (여러분이 인스턴스 데이터라고 부른 것)가 같은 이름을 가진다면, 그 이름 앞에'this '가 붙지 않는 한 ** 매개 변수 **가 사용됩니다. –

+1

'c = c'는 인스턴스 변수에 할당하지 않습니다. – user2357112

답변

2

기본적으로 매개 변수와 지역 변수가 필드보다 우선합니다. 이를 shadowing of the variable or name이라고합니다. 따라서 c=c은 코드에서 아무 것도하지 않습니다. c의 값을 자체에 할당합니다.

+0

와우. 그것은 정말 간단한 대답이었습니다. 정말 고마워. 나는 최대한 빨리 (8 분 남았습니다) 받아 들일 것입니다. –

+0

@SotiriosDelimanolis Sheesh, 나는 기억 상실증에 걸릴 것임에 틀림 없다. 고침, 고마워. –

0

이 키워드는 인스턴스 변수를 참조하려는 Java에 알려줍니다. 대부분의 경우이 옵션은 선택 사항입니다. 문제는 때로는 동일한 이름을 가진 두 개의 변수가 있다는 것입니다. 생성자에서 하나는 매개 변수이고 다른 하나는 인스턴스 변수입니다. 달리 말하지 않는다면 Java는 매개 변수 인 가장 세분화 된 범위의 것을 제공합니다.