자바에서this의 사용 방법을 이야기하다
public class A {
String s = "Hello";
public A(String s) {
System.out.println("s = " + s);
System.out.println("1 -> this.s = " + this.s);
this.s = s;
System.out.println("2 -> this.s = " + this.s);
}
public static void main(String[] args) {
new A("HelloWorld!");
}
}
실행 결과:s = HelloWorld! 1 -> this.s = Hello 2 -> this.s = HelloWorld!
이 예에서 구조 함수 A에서 매개 변수 s는 클래스 A의 변수 s와 동명인데 이때 s를 직접 조작하면 매개 변수 s를 조작한다.클래스 A의 변수 s를 조작하려면this로 인용해야 합니다.실행 결과의 첫 줄은 매개 변수 s를 직접 출력하는 것이다.다음 두 줄은 객체 A의 변수 s 작업 전후의 인쇄 결과입니다.
2.this를 매개 변수로 전달
당신이 자신을 매개 변수로 다른 대상에 전달할 때,this를 사용할 수도 있습니다.예:
public class A {
public A() {
new B(this).print();
}
public void print() {
System.out.println("Hello from A!");
}
}
public class B {
A a;
public B(A a) {
this.a = a;
}
public void print() {
a.print();
System.out.println("Hello from B!");
}
}
실행 결과: Hello from A!Hello from B! 이 예에서 대상 A의 구조 함수에서 new B(this)로 대상 A 자신을 매개 변수로 대상 B의 구조 함수에 전달했다.
3. 익명 클래스와 내부 클래스의this를 주의하십시오.때때로 우리는 내부 클래스와 익명 클래스를 사용한다.익명 클래스에서this를 사용할 때, 이this는 익명 클래스나 내부 클래스 자체를 가리킨다.이때 우리가 외부 클래스의 방법과 변수를 사용하려면 외부 클래스의 클래스 이름을 붙여야 한다.아래의 예:
public class A {
int i = 1;
public A() {
Thread thread = new Thread() {
public void run() {
for(;;) {
A.this.run();
try {
sleep(1000);
} catch(InterruptedException ie) {
}
}
}
};
thread.start();
}
public void run() {
System.out.println("i = " + i);
i++;
}
public static void main(String[] args) throws Exception {
new A();
}
}
위의 예에서thread는 익명 클래스의 대상입니다. 그 정의에서run 함수에 외부 클래스의run 함수를 사용합니다.이때 함수가 동명이기 때문에 직접 호출하면 안 된다.이때 두 가지 방법이 있는데 하나는 외부의run함수를 이름으로 바꾸는 것이다. 그러나 이런 방법은 중도에 개발된 응용에 있어서 취할 수 없는 것이다.그러면 이 예에서 외부 클래스의 클래스 이름에this 인용을 추가하여 외부 클래스를 호출하는 방법run을 설명할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.