В чем смысл "this" в Java?

Обычно я использую this только в конструкторах.

Я понимаю, что он используется для идентификации переменной параметра (с помощью this.something), если он имеет одно и то же имя с глобальной переменной.

Однако я не знаю, что такое реальное значение this в Java и что произойдет, если я использую this без точки (.).

Ответ 1

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

Так эффективно вы используете его для нескольких вещей:

  • уточните, что вы говорите о поле, когда есть еще что-то другое с тем же именем, что и поле
  • относятся к текущему объекту в целом
  • вызывать другие конструкторы текущего класса в вашем конструкторе

Ответ 2

Ниже приведена копия и вставка из здесь, но очень хорошо объясняется все различные применения ключевого слова this:

Определение: Ключевое слово Javas this используется для ссылки на текущий экземпляр метода, на котором он используется.

Ниже приведены способы использования этого:

  • Чтобы специально указать, что вместо переменной или локальной переменной используется переменная экземпляра. То есть

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

    Здесь это относится к переменной экземпляра. Здесь приоритет высокий для локальной переменной. Поэтому отсутствие this обозначает локальную переменную. Если локальная переменная, которая является именем параметра, не такая же, как переменная экземпляра, то независимо от this используется или нет, она обозначает переменную экземпляра.

  • this используется для ссылки на конструкторы

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

    Это вызывает конструктор того же класса java, который имеет два параметра.

  • this используется для передачи текущего экземпляра java в качестве параметра

    obj.itIsMe(this);
    
  • Как и выше, это также можно использовать для возврата текущего экземпляра

    CurrentClassName startMethod() {
         return this;
    }
    

    Примечание. Это может привести к нежелательным результатам при использовании во внутренних классах в двух указанных выше пунктах. Поскольку это будет относиться к внутреннему классу, а не к внешнему экземпляру.

  • 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 связан с его экземпляром, и это не будет работать в статических методах.

Ответ 3

Чтобы быть полным, this также может использоваться для ссылки на внешний объект

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

Ответ 4

Он относится к текущему экземпляру определенного объекта, поэтому вы можете написать что-то вроде

public Object getMe() {
    return this;
}

Ответ 5

В 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!");
    }

}

Ответ 6

Если вы вызываете myObject.method(), то this будет ссылаться на myObject внутри method.

Ответ 7

Это относится к экземпляру, на который вызывается метод

class A {

  public boolean is(Object o) {
    return o == this;
  }

}

A someA = new A();
A anotherA = new A();
someA.is(someA); // returns true
someA.is(anotherA); // returns false

Ответ 8

Объекты имеют методы и атрибуты (переменные), которые производятся от классов, чтобы указать, какие методы и переменные принадлежат к определенному объекту, используется зарезервированное слово this. в случае переменных экземпляра важно понять разницу между неявными и явными параметрами. Взгляните на вызов fillTank для объекта audi.

Car audi= new Car();

audi.fillTank(5); // 5 is the explicit parameter and the car object is the implicit parameter 

Значение в скобках является неявным параметром, а сам объект является явным параметром, методы, которые не имеют явных параметров, используют неявные параметры, метод fillTank имеет как явный, так и неявный параметр.

Давайте более подробно рассмотрим метод fillTank в классе Car

public class Car()
{
   private double tank;

   public Car()
   {
      tank = 0;
   }

   public void fillTank(double gallons)
   {
      tank = tank + gallons;
   }

}

В этом классе мы имеем переменную экземпляра "tank" . Может быть много объектов, которые используют переменную экземпляра резервуара, чтобы указать, что переменная экземпляра "tank" используется для определенного объекта, в нашем случае объект "audi", который мы создали ранее, мы используем ключевое слово this reserved, для переменных экземпляра использование 'this' в методе указывает, что переменная экземпляра в нашем случае "tank" является переменной экземпляра неявного параметра.

Компилятор java автоматически добавляет зарезервированное слово this, поэтому вам не нужно его добавлять, это вопрос предпочтения. Вы не можете использовать this без точки (.), Потому что это правила java (синтаксис).

В заключение.

  • Объекты определяются классами и имеют методы и переменные
  • Использование this в переменной экземпляра в методе указывает, что переменная экземпляра принадлежит неявному параметру или что это переменная экземпляра неявный параметр.
  • Неявный параметр - это объект, из которого в этом случае вызывается метод "audi".
  • Компилятор java автоматически добавляет это зарезервированное слово, добавляя, что это вопрос предпочтения
  • this нельзя использовать без точки (.) это синтаксически недействительно
  • this также может использоваться для различения локальных переменных и глобальных переменных, имеющих одно и то же имя
  • зарезервированное слово this также применяется к методам, чтобы указать, что метод принадлежит определенному объекту.

Ответ 10

это может использоваться внутри некоторого метода или конструктора.

Возвращает ссылку на текущий объект.

Ответ 11

Ключевое слово this используется для ссылки на текущую переменную блока, например, рассмотрим приведенный ниже код (просто пример, поэтому не ожидайте стандартного кода JAVA):

Public class test{

test(int a) {
this.a=a;
}

Void print(){
System.out.println(a);
}

   Public static void main(String args[]){
    test s=new test(2);
    s.print();
 }
}

Вот оно. Выход будет "2". Если мы не использовали ключевое слово this, то вывод будет: 0

Ответ 12

Это "ссылка на объект в текущем контексте" эффективно. Например, чтобы распечатать "этот объект", вы можете написать:

System.out.println(this);

Обратите внимание, что использование "глобальной переменной" несколько не работает... если вы используете this.variableName, то по определению это не глобальная переменная - это переменная, специфичная для этого конкретного экземпляра.

Ответ 13

Быстрый поиск в Google принес этот результат: http://xahlee.org/java-a-day/this.html

В значительной степени ключевое слово "this" является ссылкой на текущий объект (сам).

Ответ 14

Если переменные экземпляра такие же, как переменные, объявленные в конструкторе, мы используем "this" для назначения данных.

class Example{
     int assign;// instance variable

     Example(int assign){ // variable inside constructor
          this.assign=assign;
     }
}

Надеюсь, что это поможет.

Ответ 15

Я тоже искал тот же ответ и как-то не мог понять концепцию четко. Но, наконец, я понял это из ссылка

это ключевое слово в Java. Который может использоваться внутри метода или конструктора класса. Он (это) работает как ссылка на текущий объект, метод которого или конструктор вызывается. это ключевое слово может использоваться для ссылки на любого члена текущего объекта из метода экземпляра или конструктора.

Проверьте примеры в ссылке для четкого понимания

Ответ 16

В Java "this" есть предопределенная переменная. Если мы используем "this" в методе, который означает, что мы получаем ссылку (адрес) текущего текущего объекта. Например.

this.age --- > возраст текущего текущего объекта.