Подтвердить что ты не робот

Использование ключевого слова "this" в java

Я пытаюсь понять, что на самом деле имеет ключевое слово java this. Я читал документацию Sun, но я все еще не понял, что на самом деле делает this.

4b9b3361

Ответ 1

Ключевое слово this - это ссылка на текущий объект.

class Foo
{
    private int bar;

    public Foo(int bar)
    {
        // the "this" keyword allows you to specify that
        // you mean "this type" and reference the members
        // of this type - in this instance it is allowing
        // you to disambiguate between the private member
        // "bar" and the parameter "bar" passed into the
        // constructor
        this.bar = bar;
    }
}

Еще один способ подумать о том, что ключевое слово this похоже на личное местоимение, которое вы используете для ссылки на себя. Другие языки имеют разные слова для одной и той же концепции. VB использует Me и соглашение Python (поскольку Python не использует ключевое слово, просто неявный параметр для каждого метода) заключается в использовании self.

Если вы хотите ссылаться на объекты, которые по своей сути принадлежат вам, вы бы сказали примерно следующее:

Моя рука или нога

Подумайте о this как о простом типе, чтобы сказать "мой". Таким образом, представление psuedocode будет выглядеть так:

class Foo
{
    private int bar;

    public Foo(int bar)
    {
        my.bar = bar;
    }
}

Ответ 2

Ключевое слово this может означать разные вещи в разных контекстах, что, вероятно, является источником вашей путаницы.

Его можно использовать как ссылку на объект, которая ссылается на экземпляр, на который был вызван текущий метод: return this;

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

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

Он может использоваться для вызова другого конструктора класса a из конструктора:

MyClass()
{
    this("default name");
}

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

public class MyClass
{
    String name;

    public class MyClass
    {
        String name;

        public String getOuterName()
        {
            return MyClass.this.name;
        }
    }
}

Ответ 3

"this" - ссылка на текущий объект.

Подробнее здесь

Ответ 4

Ключевое слово this - это ссылка на текущий объект. Это лучше всего объясняется следующим фрагментом кода:

public class MyClass {

    public void testingThis() 
    {
        // You can access the stuff below by 
        // using this (although this is not mandatory)

        System.out.println(this.myInt);
        System.out.println(this.myStringMethod());

        // Will print out:
        // 100
        // Hello World
    }

    int myInt = 100;
    string myStringMethod() 
    {
        return "Hello World";
    }

}

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

public class ProperExample {
    private int numberOfExamples;

    public ProperExample(int numberOfExamples) 
    {
        this.numberOfExamples = numberOfExamples;
    }
}

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

public class Square {
    public Square() 
    {
        this(0, 0);
    }

    public Square(int x_and_y) 
    {
        this(x_and_y, x_and_y);
    }

    public Square(int x, int y)
    {
       // finally do something with x and y
    }
}

Это ключевое слово работает так же, как, например, С#.

Ответ 5

Еще лучше использовать этот

public class Blah implements Foo {

   public Foo getFoo() {
      return this;
   }
}

Он позволяет вам конкретно "this" объект в текущем контексте. Другой пример:

public class Blah {

   public void process(Foo foo) { 
      foo.setBar(this);
   }
}

Как еще вы могли бы выполнять эти операции.

Ответ 6

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

Пример:

public class ThisDemo1 
{
    public static void main(String[] args) 
   {
        A a1=new A(4,5);       
   }
}

class A
{
    int num1;
    int num2;

    A(int num1)
    {
        this.num1=num1; //here "this" refers to instance variable num1. 
       //"this" avoids ambigutiy between local variable "num1" & instance variable "num1"

        System.out.println("num1 :: "+(this.num1));
    }

    A(int num, int num2)
    {
        this(num); //here "this" calls 1 argument constructor within the same class.
        this.num2=num2;
        System.out.println("num2 :: "+(this.num2)); 
       //Above line prints value of the instance variable num2.
    }
}

Ответ 7

Ключевое слово 'this' относится к контексту текущего объекта. Во многих случаях (поскольку Andrew указывает), вы будете использовать явное это, чтобы было ясно, что вы ссылаетесь на текущий объект.

Кроме того, из this и super ':

* Для этого существуют другие виды использования. Иногда, когда вы пишете метод экземпляра, вам необходимо передать объект, содержащий этот метод, в подпрограмму в качестве фактического параметра. В этом случае вы можете использовать это как фактический параметр. Например, если вы хотите распечатать строковое представление объекта, вы можете сказать "System.out.println(this);". Или вы можете присвоить значение этой переменной другой переменной в инструкции присваивания.

Фактически вы можете сделать что-нибудь с этим, что вы можете сделать с любой другой переменной, кроме изменения ее значения. *

Этот сайт также ссылается на связанную концепцию "супер", что может оказаться полезным для понимания того, как они работают с наследованием.

Ответ 8

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

public class A{
    int attr=10;

    public int calc(){
     return this.getA()+10;
   }
   /**
   *get and set
   **/    

}//end class A

В языке calc() программное обеспечение запускает метод внутри выделенного объекта.

Как возможно, что поведение объекта может увидеть себя? С ключевым словом this.

Действительно, это ключевое слово не требует обязательного использования (как супер), потому что JVM знает, где вызов метода в области памяти, но, на мой взгляд, это делает код более понятным.

Ответ 9

Это может быть также способ доступа к информации о текущем контексте. Например:

public class OuterClass
{
  public static void main(String[] args)
  {
    OuterClass oc = new OuterClass();
  }

  OuterClass()
  {
    InnerClass ic = new InnerClass(this);
  }

  class InnerClass
  {
    InnerClass(OuterClass oc)
    {
      System.out.println("Enclosing class: " + oc + " / " + oc.getClass());
      System.out.println("This class: " + this + " / " + this.getClass());
      System.out.println("Parent of this class: " + this.getClass().getEnclosingClass());
      System.out.println("Other way to parent: " + OuterClass.this);
    }
  }
}

Ответ 10

Подумайте об этом с точки зрения английского языка, "этот объект" - это тот объект, который у вас есть.

WindowMaker foo = new WindowMaker(this);

Например, вы находитесь внутри класса, который выходит из JFrame, и вы хотите передать ссылку на объект WindowMaker для JFrame, чтобы он мог взаимодействовать с JFrame. Вы можете передать ссылку на JFrame, передав ее ссылку на объект, который называется "this".

Ответ 11

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

Сначала давайте посмотрим на код

public class Employee  {

private int empId;
private String name;

public int getEmpId() {
    return this.empId;
}

public String getName() {
    return this.name;
}

public void setEmpId(int empId) {
    this.empId = empId;
}

public void setName(String name) {
    this.name = name;
}

}

В приведенном выше методе getName() возвращает имя переменной экземпляра. Теперь давайте еще раз взглянуть на похожий код

public class Employee  {

private int empId;
private String name;

public int getEmpId() {
    return this.empId;
}

public String getName() {

    String name="Yasir Shabbir";
    return name;
}

public void setEmpId(int empId) {
    this.empId = empId;
}

public void setName(String name) {
    this.name = name;
}


public static void main(String []args){
    Employee e=new Employee();
    e.setName("Programmer of UOS");

    System.out.println(e.getName());

}

}

Выход Ясир Шаббир

  • этот оператор всегда работает с переменной экземпляра (Belong to Object) не любая переменная класса (принадлежит классу)
  • это всегда относится к классу нестационарного атрибута, а не к любому другому параметру или локальной переменной.
  • это всегда используется в нестационарном методе
  • этот оператор не может работать с статической переменной (переменная класса)

** ПРИМЕЧАНИЕ: ** Часто это логическая ошибка, когда метод содержит параметр или локальную переменную, которая имеет то же имя, что и поле класса. В этом случае используйте ссылку, если вы хотите получить доступ к поле класса - иначе будет указан параметр метода или локальная переменная.

Ответ 12

Что делает 'this' очень просто. В нем содержится ссылка на текущие объект.

  • Это ключевое слово содержит ссылку на экземпляр текущего класса
  • Это ключевое слово не может использоваться внутри статической функции или статических блоков
  • Это ключевое слово можно использовать для доступа к теневой переменной экземпляра
  • Это ключевое слово может использоваться для передачи текущего объекта в качестве параметра при вызове функций
  • Это ключевое слово можно использовать для создания цепочки конструкторов

Источник: http://javaandme.com/core-java/this-word