Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Для чего нужен this


Автор: bogomol 23.3.2007, 12:28
И что это вообще такое?

Автор: jManiak 23.3.2007, 12:46
this - это ссылка на самого себя.
Т.е. Если мы используем this в методе какого-то объекта, то это будет ссылка на этот самый объект.

Используется например при создании JOptionPane, когда нужно получить ссылку на объект который будет родителем для него.

Автор: y3u 23.3.2007, 12:49
cамое частое использование - это для передачи параметров, которые имеют точно такое же название как и поля класа, в этом случае мы пишем this.myParam = myParam;

Автор: LSD 23.3.2007, 13:22
Методы в Java бывают статические, и не статические. Основное различие между ними состоит в том, что в не статические методы всегда неявно передается ссылка на объект у которого этот метод был вызыван. Так вот this - это способ эту ссылку получить. Эта ссылка всегда гарантированно не равно null.
Например есть у нас такой код:
Код
class A
{
  String s;
  
  void foo()
  {
    System.out.println(s);
  }
}

при обращении к str мы неявно обращаемся к this.str. Иногда, как писал y3u, это обращение требуется сделать явно:
Код
class A
{
  String str;
  
  void setStr(String str)
  {
    this.str = str;
  }
}

Есть еще одно использование ссылки this, при работе с внутренними не статическим классами. Дело в том, что внутренний не статический класс содержит ссылку на экземпляр родительского класса, вот например:
Код
class A
{
  String str;

  class Inner
  {
    Inner()
    {
      System.out.println("A.this.str = " + A.this.str);
    }
  }
}

Автор: nornad 23.3.2007, 15:31
Добавлю от себя.
Ключевое слово this ещё используется, если в одном конструкторе требуется вызвать другой конструктор этого же класса.
Код

class Test {
  public Test() {
    this( 0 );
  }
  
  public Test( int param ) {
    // do something
  }
}

Автор: Jubei 23.3.2007, 15:55
Цитата(nornad @ 23.3.2007,  15:31)
Добавлю от себя.
Ключевое слово this ещё используется, если в одном конструкторе требуется вызвать другой конструктор этого же класса.
Код

class Test {
  public Test() {
    this( 0 );
  }
  
  public Test( int param ) {
    // do something
  }
}

Хитро smile и небольшой оффтопный вопросик если вам несложно : а в каком случае, такая конструкция может пригодится, для чего такое используется ? 

Автор: LSD 23.3.2007, 16:22
Вот пример из класса Date
Код
public Date()
{
  this(System.currentTimeMillis());
}

public Date(long date)
{
  fastTime = date;
}

Автор: Jubei 23.3.2007, 16:40
Понятно, спасибо за пример !

Автор: olegrolik 23.3.2007, 17:28
Что в данном примере делает "this"?

display=Display.getDisplay(this);

Пример из J2ME.
Извиняюсь за оффтоп.

Автор: Maksym 23.3.2007, 17:58
olegrolik
Передает в метод ссылку на объект, в контексте которого вызван метод.

Автор: nornad 23.3.2007, 18:11
Конкретнее узнать, что представляет this в твоём примере можно, если посмотреть, в методе какого класса находится приведённая строка.

Автор: olegrolik 23.3.2007, 22:34
nornad

Код



public class GraphMenu extends MIDlet {
....
public void startApp() {
    display = Display.getDisplay(this);
    display.setCurrent(m);
}
public void pauseApp() {}

  public void destroyApp(boolean _boolean) {}

} // public class GraphMenu extends MIDlet 


Примерно так

Также про класс Display написано: There is exactly one instance of Display per MIDlet and the application can get a reference to that instance by calling the getDisplay() method. The application may call the getDisplay() method at any time during course of its execution. The Display object returned by all calls to getDisplay() will remain the same during this time. 


Автор: nornad 24.3.2007, 00:35
Цитата(olegrolik @  23.3.2007,  20:28 Найти цитируемый пост)
Что в данном примере делает "this"?

В данном примере this даёт ссылку на экзепляр MIDlet, для которого необходимо получить экземпляр Display.
Display.getDisplay(MIDlet midlet) - статический метод для получения Display. Из-за его статичности и требуется передача ссылки на объект, от которого надо получить Display.

Вроде бы всё сказал.  smile 

Автор: hamsterKSU 24.3.2007, 01:46
что могу сказать по этому поводу - книги надо читать с начала и до середины, а потом в произвольном порядке

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)