[java] Java에서 “this”의 의미는 무엇입니까?

일반적으로 this생성자에서만 사용 합니다.

this.something전역 변수와 이름이 같은 경우 매개 변수를 식별하는 데 사용됩니다 (을 사용하여 ).

그러나 thisJava 의 실제 의미 가 this도트 ( .) 없이 사용하면 어떻게 될지 알 수 없습니다 .



답변

this 현재 객체를 나타냅니다.

각 비 정적 메서드는 개체의 컨텍스트에서 실행됩니다. 따라서 다음과 같은 수업이 있으면

public class MyThisTest {
  private int a;

  public MyThisTest() {
    this(42); // calls the other constructor
  }

  public MyThisTest(int a) {
    this.a = a; // assigns the value of the parameter a to the field of the same name
  }

  public void frobnicate() {
    int a = 1;

    System.out.println(a); // refers to the local variable a
    System.out.println(this.a); // refers to the field a
    System.out.println(this); // refers to this entire object
  }

  public String toString() {
    return "MyThisTest a=" + a; // refers to the field a
  }
}

그런 다음 호출 frobnicate()new MyThisTest()인쇄됩니다

1
42
MyThisTest a = 42

따라서 여러 가지 용도로 효과적으로 사용합니다.

  • 필드와 이름이 같은 다른 것이있을 때 필드에 대해 이야기하고 있음을 분명히하십시오.
  • 현재 객체를 전체적으로 참조
  • 생성자에서 현재 클래스의 다른 생성자를 호출하십시오.

답변

다음은 here 의 복사 및 붙여 넣기 이지만 this키워드 의 모든 다른 사용법을 잘 설명 합니다.

정의 : Java의 this키워드는 사용되는 메소드의 현재 인스턴스를 참조하는 데 사용됩니다.

이를 사용하는 방법은 다음과 같습니다.

  1. 정적 또는 로컬 변수 대신 인스턴스 변수가 사용됨을 구체적으로 나타냅니다. 그건,

    private String javaFAQ;
    void methodName(String javaFAQ) {
        this.javaFAQ = javaFAQ;
    }

    여기서 이것은 인스턴스 변수를 나타냅니다. 여기서 로컬 변수의 우선 순위가 높습니다. 따라서 부재this 는 지역 변수를 나타냅니다. 매개 변수 이름 인 로컬 변수가 인스턴스 변수와 동일하지 않은 경우에 관계없이 인스턴스 변수를 this나타냅니다.

  2. This 생성자를 참조하는 데 사용됩니다

     public JavaQuestions(String javapapers) {
         this(javapapers, true);
     }

    두 개의 매개 변수가있는 동일한 Java 클래스의 생성자를 호출합니다.

  3. This 현재 Java 인스턴스를 매개 변수로 전달하는 데 사용됩니다.

    obj.itIsMe(this);
  4. 위와 유사하게 현재 인스턴스를 반환하는 데 사용될 수도 있습니다.

    CurrentClassName startMethod() {
         return this;
    }

    참고 : 위 두 가지 점에서 내부 클래스에서 사용되는 경우 원하지 않는 결과가 발생할 수 있습니다. 이것은 외부 인스턴스가 아닌 내부 클래스를 참조하기 때문입니다.

  5. This 현재 클래스의 핸들을 얻는 데 사용할 수 있습니다

    Class className = this.getClass(); // this methodology is preferable in java

    이 작업을 수행 할 수 있지만

    Class className = ABC.class; // here ABC refers to the class name and you need to know that!

항상 그렇듯이 this인스턴스와 연관되어 있으며 정적 메소드에서는 작동하지 않습니다.


답변

완료하려면 this외부 객체를 참조하는 데 사용할 수도 있습니다

class Outer {
    class Inner {
        void foo() {
            Outer o = Outer.this;
    }
  }
}


답변

특정 객체의 현재 인스턴스를 참조하므로 다음과 같이 작성할 수 있습니다.

public Object getMe() {
    return this;
}

일반적인 사용 사례는 this그림자를 방지하는 것입니다. 다음 예제를 보자.

public class Person {
    private final String name;

    public Person(String name) {
        // how would we initialize the field using parameter?
        // we can't do: name = name;
    }
}

위의 예에서 매개 변수 값을 사용하여 필드 멤버를 지정하려고합니다. 그것들은 같은 이름을 공유하기 때문에 필드와 매개 변수를 구별 할 수있는 방법이 필요합니다. this필드를 포함하여이 인스턴스의 멤버에 액세스 할 수 있습니다.

public class Person {
    private final String name;

    public Person(String name) {
        this.name = name;
    }
}


답변

Swing ActionListener에서 현재 인스턴스 (예 : ‘this’) 를 구현 하고 컴포넌트의 ActionListener로 추가 하는 클래스를 작성하는 것이 일반적 입니다.

public class MyDialog extends JDialog implements ActionListener
{
    public MyDialog()
    {
        JButton myButton = new JButton("Hello");
        myButton.addActionListener(this);
    }

    public void actionPerformed(ActionEvent evt)
    {
        System.out.println("Hurdy Gurdy!");
    }

}


답변

효과적으로 “현재 컨텍스트의 개체에 대한 참조”입니다. 예를 들어 “this object”를 인쇄하려면 다음과 같이 작성하십시오.

System.out.println(this);

“전역 변수”의 사용법은 다소 벗어난 점에 유의하십시오. 사용하는 경우 this.variableName정의에 따라 전역 변수 가 아닙니다 .이 특정 인스턴스에 특정한 변수입니다.


답변

programming.guide에서 기사 인용하기 :


this두 가지 용도를 자바 프로그램을.

1. 현재 객체에 대한 참조

이 경우 구문은 일반적으로 다음과 같습니다.

this.someVariable = someVariable;

이 사용 유형은 여기에 설명되어 있습니다 : ‘this’참조 (예제 포함)

2. 다른 생성자를 호출하려면

이 경우 구문은 일반적으로 다음과 같습니다.

MyClass() {
    this(DEFAULT_VALUE); // delegate to other constructor
}

MyClass(int value) {
    // ...
}

이 사용 유형은 여기에 설명되어 있습니다. this (…) 생성자 호출 (예제 포함)