2017-12-02 15 views
1

this 키워드에 대한 안내를 찾고 있습니다. 방금 개념에 대해 배웠고 그것은 나에게 혼란 스럽습니다. 여기 내 코드가 있습니다 :내 코드에서 'this'키워드를 올바르게 사용하고 있습니까?

public class CashRegister { 
    private ArrayList<Double> items; 
    private int itemCount; 
    private double totalPrice; 

     public double getTotal() { 
      this.totalPrice = 0; 
      for (int i = 0; i < this.items.size(); i++) { 
       this.totalPrice = this.totalPrice + this.items.get(i); 
      } 
      return totalPrice; 
     } 
    } 

내 질문에 '이'권리가 있습니까? totalPrice 또는 items ArrayList와 같은 변수를 사용할 때마다 'this'를 사용해야합니까?

+1

내가하지 않을 것입니다. 그것은 중복적이고 언어를 이해하는 사람은'totalPrice'가 인스턴스 필드를 참조한다는 것을 압니다. – markspace

+0

이 경우에는 필요하지 않습니다. 이 키워드는 충돌의 가능성이있을 때 사용됩니다. 여기에서 getTotal()에서 참조되는 유일한 객체는 객체를 호출하는 데 사용 된 객체입니다. 따라서 어떤 객체의 속성에 대한 참조가 충돌하지 않습니다. –

+0

나는 그것을 좋아한다. 나를 위해 갈등을 예방하는 한 가지 방법입니다. 또 다른 방법은 전혀 이름 충돌을 일으키지 않는 것입니다. 예를 들어 회원들에게'mTotalPrice'와 같은 접두어를 주면 (다른 언어에서는'_totalPrice'와 같이). IDE로 작업한다면 아마도'this'를 사용하는 것을 잊어 버렸거나 그러한 이름 충돌을 만들었다면 (적어도 이클립스가 가지고있는) 당신에게 경고하는 것과 같은 몇 가지 고급 규칙을 설정할 수 있습니다. – Zabuza

답변

2

나쁘지 않습니다. 그러나 코드가 중복되어 코드가 오염되었습니다. 우리는 모두 itemstotalPrice이 현재 객체 (this가 참조)의 필드임을 알고 있습니다.

public class Test { 
    private String test; 

    public Test(String test) { 
     this.test = test; 
    } 
} 

당신은 test에 대한 참조가 모호 것을 볼 수 있습니다 여기에

this 이해가 만드는 코드의 조각이다. test을 그냥 사용하는 경우 생성자에 전달 된 String 참조 Test 또는 String 개체의 필드에 액세스하고 있는지 여부는 알 수 없습니다.이 경우 참조에 액세스하게됩니다. 그래서 thisTest 유형의 개체 필드를 사용하고 있는지 확인하는 데 사용됩니다.

shadowing이라는 개념이 있습니다. this을 사용하면 그렇지 않을 때 뭔가를 참조하고 있다는 생각의 함정에 빠지지 않는 데 도움이됩니다.

이 질문에 도움이됩니다 : What is variable shadowing used for in a Java class?

+0

감사합니다. 코드가 객체의 예입니까? – WizKid22

+0

@ WizKid22 사실, Test 클래스의 정의입니다. Test t1 = new Test ("abc")처럼 인스턴스화하면됩니다. 그러면 t1은 Test 유형의 객체가됩니다. 클래스를 청사진으로, 객체를 실제 건물로 생각하십시오. – wleao

1

this을 사용하는 방식은 틀리지 않지만 중복됩니다. this es없이 동일한 코드를 작성하여 동일한 결과를 얻을 수 있습니다.

+0

너무 빠르다! lol – wleao

1

일반적으로 "this"의 가장 일반적인 사용법은 객체 생성자에 있습니다. 그래서 당신은 ... 같은 몇 가지 일을 할 수

그래서 주로 당신이 전달되고있는 인수를 지정하고있는 객체를 식별하는 데 사용
public NewThing(int count, double price) { 
    this.count = count; 
    this.price = price; 
} 

. 변수 이름은 인수와 동일하기 때문에, "this"는 이러한 속성을 수신하는 것이 "this 객체"라는 신호입니다.