2016-12-20 8 views
1

Вот мой следующий код:Что означает «это» ключевое слово в коде?

public class SharedState { 

    private static final List<SharedState> list = new ArrayList<>(); 

    public SharedState() { 
     list.add(this); // What does "this" mean here? 
     System.out.println(list); 
    } 


    public static void main(String[] args) { 

     Thread t1 = new Thread("t1") { 
      @Override 
      public void run() { 
       /* try { 
        Thread.sleep(200); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } */ 
       new SharedState(); 
      } 
     }; 
     Thread t2 = new Thread("t2") { 
      @Override 
      public void run() { 
       new SharedState(); 
      } 
     }; 

     t1.start(); 
     t2.start(); 
    } 

    @Override 
    public String toString() { 
     return "SharedSate"; 
    } 
} 
  • Мое понимание this относится к текущему объекту и здесь list.add(this)SharedSate добавляют к списку, не так ли? Таким образом, это означает, что он вызывает toString(), а затем печатает list на консоли. Я прав?
  • Я просто хотел бы знать, как эти две строчки работают:

    list.add(this);

    System.out.println(list);

+0

@KevinEsche Итак, что я говорю, что 'list.add (this)' как-то вызывает 'toString()' правильно? Потому что это единственный способ добавить элементы в список. –

+0

@KevinEsche Он напечатает все, что определено в '.toString(); ' –

+0

Работает в ocnjonction с' private static final List list = new ArrayList <>(); 'это способ иметь некоторые общие значения приложения в одноэлементном. – Zorglube

ответ

0

здесь list.add (это) добавляет SharedSateto в список, не так ли? Таким образом, это означает, что он вызывает toString()

2-ая часть вашего заявления неверна. Откуда у вас это получилось? add метод никогда не вызывает toString().

Я просто хотел бы знать, как эти две строчки работают:

list.add (это);

System.out.println (список);

list.add (this) добавит текущий объект в список.

и, при печати объекта, вызывается метод toString(). Если класс не имеет метода toString, каждый объект получит его от Object супер самого класса.

0

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

SharedState sharedState = new SharedState(); и list.add(this) средства sh Объект isState, то есть объект, на который был вызван этот конструктор.

0

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

SharedState obj=new SharedState(); 

OBJ объект добавляется в список

System.out.println(list); 

выше линии аналогично вызову list.toString() и печать на консоли

 Смежные вопросы

  • Нет связанных вопросов^_^