이것은 자신에 대한 암시적 포인터입니다. 간단히 말해서 어떤 객체가 이것이 위치한 메소드를 호출하면 이것이 해당 객체입니다.
샘플 코드: TestThis_1.java
다음과 같이 코드 코드를 복사합니다.
/* 질문: 이것은 무엇입니까?
* 출력 결과:
* A@4e44ac6a
*/
공개 클래스 TestThis_1 {
공개 정적 무효 메인(String[] args) {
A aa = 새로운 A();
System.out.println(aa.f()); //aa.f(), 객체 aa의 참조(포인터)를 반환합니다.
}
}
클래스 A {
공개 A f() {
return this; //f() 메서드를 호출하는 객체의 클래스 A 객체에 대한 참조를 반환합니다.
}
}
이것의 일반적인 용도
1. 같은 이름의 변수 구별하기
샘플 코드: TestThis_2.java
다음과 같이 코드 코드를 복사합니다.
/* 이것의 일반적인 사용법 1: 동일한 이름을 가진 변수 구별
* 출력 결과:
* 나 = 1
* 나는 = 33
*/
공개 클래스 TestThis_2 {
공개 정적 무효 메인(String[] args) {
A aa = 새로운 A(33);
}
}
클래스 A {
public int i = 1; //이것은 멤버 변수입니다.
/*참고: 일반적으로 이렇게 작성되지 않습니다. 생성자는 주로 초기화를 위한 것이며, 이렇게 작성된 것은 주로 이해를 돕기 위한 것입니다*/
public A(int i) { //이 i는 지역 변수입니다.
System.out.printf("this.i = %d/n", this.i); //this.i는 객체 자체의 멤버 변수 i를 참조합니다.
System.out.printf("i = %d/n", i); //i는 지역 변수 i입니다.
}
}
2. 생성자 간 상호 호출
샘플 코드: TestThis_3.java
다음과 같이 코드 코드를 복사합니다.
/* 이 2의 일반적인 사용법: 생성자에서 서로 호출 */
공개 클래스 TestThis_3 {
공개 정적 무효 메인(String[] args) {
}
}
클래스 A {
int i, j, k;
공개 A(int i) {
this.i = 나;
}
공개 A(int i, int j) {
/* i = 3; error 주석 처리하지 않으면 오류가 보고됩니다. this(...)로 생성자를 호출하면 첫 번째 문장에만 배치할 수 있습니다.
* TestThis_3.java:20: 오류: 이에 대한 호출은 생성자의 첫 번째 문이어야 합니다.
* 이(i);
* ^
*1 오류
*/
이(i);
this.j = j;
}
공개 A(int i, int j, int k) {
this(i,j);
this.k = k;
}
}
주의할 점
static으로 수정된 메서드에는 이 포인터가 없습니다. static으로 수정한 메소드는 public이기 때문에 어느 객체에 속해 있는지는 알 수 없습니다.
샘플 코드: TestThis_4.java
다음과 같이 코드 코드를 복사합니다.
/*정적 메소드 내부에는 이 포인터가 없습니다*/
공개 클래스 TestThis_4 {
공개 정적 무효 메인(String[] args) {
}
}
클래스 A {
정적 A f() {
이거 돌려줘;
/* 오류 메시지: TestThis_4.java:10: 오류: 비정적 변수는 정적 컨텍스트에서 참조할 수 없습니다.
* 이것을 반환하십시오;
* ^
*1 오류
*/
}
}