JAVA 의 this 사용법

5404 단어
자바 에 있 는 this 는 어디서나 볼 수 있 고 용법 도 많 습 니 다. 현재 정리 한 것 은 몇 가지 가 있 습 니 다. this 1. 전역 변수 와 부분 변수 가 이름 을 바 꿀 때 전역 변 수 를 사용 하 는 것 을 의미 합 니 다. (이때 this 는 본 대상 을 대체 합 니 다) 예 는 class A {String name; void setName (String name) {this. name = name;} 2. 구조 방법 이 서로 호출 됩 니 다.이때 this 는 본 유형의 이름 을 가리 키 며 this 는 구조 방법의 첫 번 째 문장 에 만 놓 을 수 있 습 니 다.
class B{
    String name;
    B(){
       this("name");//会自动调用带String参数的构造方法
    }

    B(String name){
        this.name = name;
    }

}
  • this 는 현재 대상 자신 을 가리킨다.한 클래스 에서 사용 대상 의 변수 나 함 수 를 명확 하 게 지적 하려 면 this 인용 을 추가 해 야 합 니 다.다음 과 같은 예 에서:
  • public class Hello {
    
        String s = "Hello";
    
        public Hello(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) {
        Hello x=new Hello("HelloWorld!");
        }
    }
    

    실행 결과:
    s = HelloWorld! 1 -> this.s = Hello 2 -> this.s = HelloWorld!
    이 예 에서 구조 함수 Hello 에서 매개 변수 s 는 Hello 와 같은 이름 입 니 다. 이때 s 를 직접 조작 하면 매개 변수 s 를 조작 합 니 다.Hello 와 같은 구성원 변수 s 를 조작 하려 면 this 로 참조 해 야 합 니 다.실행 결과 의 첫 줄 은 구조 함수 에서 전 달 된 매개 변수 s 를 직접 인쇄 하 는 것 입 니 다.두 번 째 줄 은 구성원 변수 s 에 대한 인쇄 입 니 다.세 번 째 줄 은 구성원 변수 s 에 전 달 된 인자 s 값 을 먼저 부여 한 다음 에 인쇄 하 는 것 이기 때문에 결 과 는 Hello World 입 니 다!
  • 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 의 구조 함수 에 전달 했다.
  • 익명 류 와 내부 류 중의 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 을 호출 하 는 것 을 설명 할 수 있 습 니 다.
    4.구조 함수 에서 this 를 통 해 같은 class 의 다른 구조 함 수 를 호출 할 수 있 습 니 다. 예 를 들 어
    public class Flower{
               Flower (int petals){}
               Flower(String ss){}
               Flower(int petals, Sting ss){
                    //petals++;调用另一个构造函数的语句必须在最起始的位置
                    this(petals);
                   //this(ss);会产生错误,因为在一个构造函数中只能调用一个构造函数
               }
    }

    주의해 야 할 것 은: 1: 구조 에서 다른 구조 함 수 를 호출 할 때 호출 동작 은 반드시 최초의 위치 에 두 어야 한다.2: 구조 함수 이외 의 어떤 함수 에서 도 구조 함 수 를 호출 할 수 없습니다.3: 하나의 구조 함수 에서 하나의 구조 함수 만 호출 할 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기