문제의 역사:
자바는 다른 객체 지향 언어와 마찬가지로 현재 객체에 대한 포인터 메커니즘을 사용합니다. 자바에서는 현재 인스턴스를 명확하게 참조할 수 있도록 this라는 키워드를 도입했습니다.
문제:
this를 사용하지 않으면, 지역 변수(예: 생성자나 메서드의 매개변수)가 인스턴스 필드를 가리는 모호한 상황이 발생할 수 있습니다. 또한 현재 객체를 다른 구성요소에 전달하거나 클래스 내에서 메서드를 호출해야 할 때도 필요합니다.
해결책:
this 키워드는:
예:
public class Person { private String name; public Person(String name) { this.name = name; // 필드와 매개변수 간의 충돌 해소 } }
주요 특징:
this 없이 비정적 메서드와 필드에 접근할 수 있습니까?
예. 클래스의 메서드 내에서 this를 사용할 필요는 없습니다: 컴파일러는 기본적으로 현재 객체의 비정적 멤버에 접근합니다. this의 사용은 매개변수가 필드를 가리킬 때와 같이 모호함이 있을 때 필수가 됩니다.
this는 정적 메서드나 정적 블록에서 사용될 수 있습니까?
아니요. 정적 컨텍스트에서는 this 변수가 존재하지 않으며, 정적 요소는 특정 인스턴스에 의존하지 않기 때문입니다.
this(...) (오버로드된 생성자 호출)은 생성자의 첫 번째 줄이 아닐 수 있습니까?
아니요. this를 사용하여 다른 생성자를 호출하는 것은 반드시 생성자의 첫 번째 줄이어야 하며, 그렇지 않으면 컴파일 오류가 발생합니다.
개발자가 this를 사용하지 않고 생성자를 작성하여 인스턴스 필드가 올바르게 초기화되지 않습니다:
public class A { private int a; public A(int a) { a = a; } // 오류! }
장점:
단점:
생성자가 명시적으로 this를 사용하여 이름 충돌을 해결하고 필드를 초기화합니다:
public class A { private int a; public A(int a) { this.a = a; } }
장점:
단점: