활용도가 많을 수 있어요 자바 이 키워드 . 자바에서 이것은 참조변수 현재 객체를 가리키는 말입니다.
Java this 키워드 사용법
여기에는 java this 키워드의 6가지 사용법이 나와 있습니다.
- 이는 현재 클래스 인스턴스 변수를 참조하는 데 사용될 수 있습니다.
- 이는 현재 클래스 메소드를 (암시적으로) 호출하는 데 사용될 수 있습니다.
- this()를 사용하여 현재 클래스 생성자를 호출할 수 있습니다.
- 이는 메서드 호출에서 인수로 전달될 수 있습니다.
- 이는 생성자 호출에서 인수로 전달될 수 있습니다.
- 이는 메서드에서 현재 클래스 인스턴스를 반환하는 데 사용할 수 있습니다.
제안: Java 초보자라면 이 키워드의 사용법을 세 번만 찾아보세요.
1) this: 현재 클래스 인스턴스 변수를 참조합니다.
this 키워드는 현재 클래스 인스턴스 변수를 참조하는 데 사용할 수 있습니다. 인스턴스 변수와 매개변수 사이에 모호성이 있는 경우 이 키워드는 모호성 문제를 해결합니다.
이 키워드가 없는 문제 이해
아래 예제를 통해 이 키워드를 사용하지 않을 경우 문제를 이해해 보겠습니다.
스프링 부트
class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ rollno=rollno; name=name; fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis1{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }}지금 테스트해보세요
산출:
0 null 0.0 0 null 0.0
위의 예에서는 매개변수(형식인자)와 인스턴스 변수가 동일합니다. 그래서 우리는 이 키워드를 사용하여 지역변수와 인스턴스변수를 구별하고 있습니다.
위의 문제를 이 키워드로 해결
class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ this.rollno=rollno; this.name=name; this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis2{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }}지금 테스트해보세요
산출:
111 ankit 5000.0 112 sumit 6000.0
지역 변수(형식 인수)와 인스턴스 변수가 다른 경우에는 다음 프로그램처럼 이 키워드를 사용할 필요가 없습니다.
이 키워드가 필요하지 않은 프로그램
class Student{ int rollno; String name; float fee; Student(int r,String n,float f){ rollno=r; name=n; fee=f; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis3{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }}지금 테스트해보세요
산출:
자바 쌍
111 ankit 5000.0 112 sumit 6000.0
변수에 의미 있는 이름을 사용하는 것이 더 나은 접근 방식입니다. 그래서 실시간으로 인스턴스 변수와 매개변수에 동일한 이름을 사용하고, 항상 이 키워드를 사용합니다.
2) 이: 현재 클래스 메소드를 호출합니다.
this 키워드를 사용하여 현재 클래스의 메서드를 호출할 수 있습니다. this 키워드를 사용하지 않으면 컴파일러는 메서드를 호출하는 동안 자동으로 이 키워드를 추가합니다. 예를 보자
class A{ void m(){System.out.println('hello m');} void n(){ System.out.println('hello n'); //m();//same as this.m() this.m(); } } class TestThis4{ public static void main(String args[]){ A a=new A(); a.n(); }}지금 테스트해보세요
산출:
hello n hello m
3) this() : 현재 클래스 생성자를 호출합니다.
this() 생성자 호출을 사용하여 현재 클래스 생성자를 호출할 수 있습니다. 생성자를 재사용하는 데 사용됩니다. 즉, 생성자 체이닝에 사용됩니다.
매개변수화된 생성자에서 기본 생성자 호출:
class A{ A(){System.out.println('hello a');} A(int x){ this(); System.out.println(x); } } class TestThis5{ public static void main(String args[]){ A a=new A(10); }}지금 테스트해보세요
산출:
hello a 10
기본 생성자에서 매개변수화된 생성자를 호출합니다.
class A{ A(){ this(5); System.out.println('hello a'); } A(int x){ System.out.println(x); } } class TestThis6{ public static void main(String args[]){ A a=new A(); }}지금 테스트해보세요
산출:
문자열 메소드
5 hello a
this() 생성자 호출의 실제 사용법
생성자에서 생성자를 재사용하려면 this() 생성자 호출을 사용해야 합니다. 생성자 간의 체인을 유지합니다. 즉 생성자 연결에 사용됩니다. 이 키워드의 실제 사용을 표시하는 아래 예제를 살펴보겠습니다.
class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this(rollno,name,course);//reusing constructor this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis7{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }}지금 테스트해보세요
산출:
111 ankit java 0.0 112 sumit java 6000.0
규칙: this()에 대한 호출은 생성자의 첫 번째 문이어야 합니다.
class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this.fee=fee; this(rollno,name,course);//C.T.Error } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis8{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }}지금 테스트해보세요
산출:
Compile Time Error: Call to this must be first statement in constructor
4) this: 메서드에 인수로 전달합니다.
this 키워드는 메서드의 인수로 전달될 수도 있습니다. 주로 이벤트 처리에 사용됩니다. 예를 살펴보겠습니다:
class S2{ void m(S2 obj){ System.out.println('method is invoked'); } void p(){ m(this); } public static void main(String args[]){ S2 s1 = new S2(); s1.p(); } }지금 테스트해보세요
산출:
method is invoked
인수로 전달될 수 있는 적용:
이벤트 처리(또는) 클래스에 대한 참조를 다른 클래스에 제공해야 하는 상황에서. 하나의 객체를 여러 메소드에 재사용할 때 사용됩니다.
5) 이: 생성자 호출에서 인수로 전달합니다.
생성자에 this 키워드를 전달할 수도 있습니다. 여러 클래스에서 하나의 객체를 사용해야 하는 경우 유용합니다. 예를 살펴보겠습니다:
i d e의 완전한 형태
class B{ A4 obj; B(A4 obj){ this.obj=obj; } void display(){ System.out.println(obj.data);//using data member of A4 class } } class A4{ int data=10; A4(){ B b=new B(this); b.display(); } public static void main(String args[]){ A4 a=new A4(); } }지금 테스트해보세요
Output:10
6) 이 키워드는 현재 클래스 인스턴스를 반환하는 데 사용될 수 있습니다.
이 키워드를 메서드의 명령문으로 반환할 수 있습니다. 이 경우 메서드의 반환 유형은 클래스 유형(비원시형)이어야 합니다. 예를 살펴보겠습니다:
명령문으로 반환될 수 있는 구문
return_type method_name(){ return this; }
메소드에서 명령문으로 반환하는 이 키워드의 예
class A{ A getA(){ return this; } void msg(){System.out.println('Hello java');} } class Test1{ public static void main(String args[]){ new A().getA().msg(); } }지금 테스트해보세요
산출:
Hello java
이 키워드를 증명
이 키워드가 현재 클래스 인스턴스 변수를 참조한다는 것을 증명해 보겠습니다. 이 프로그램에서는 참조 변수를 인쇄하고 있으며 두 변수의 출력은 동일합니다.
class A5{ void m(){ System.out.println(this);//prints same reference ID } public static void main(String args[]){ A5 obj=new A5(); System.out.println(obj);//prints the reference ID obj.m(); } }지금 테스트해보세요
산출:
A5@22b3ea59 A5@22b3ea59