什么"这"代码中的关键字是什么意思?

时间:2016-12-20 10:30:53

标签: java multithreading this

以下是我的以下代码:

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);

3 个答案:

答案 0 :(得分:0)

你是对的this引用当前对象,在这种情况下它意味着 -

SharedState sharedState = new SharedState(); list.add(this)表示sharedState对象,即调用此构造函数的对象。

答案 1 :(得分:0)

这指的是当前对象,因此调用SharedState()的每个对象都被添加到列表中。您可以在创建对象时检查,如下所示

SharedState obj=new SharedState();

obj 对象已添加到列表

System.out.println(list); 

上面的行类似于调用list.toString()并在控制台上打印

答案 2 :(得分:0)

  

这里list.add(this)正在将SharedSate添加到列表中,对吧?所以这意味着它正在调用toString()

你的陈述的第二部分是错误的。你从哪里得到的? add方法永远不会调用toString()

  

我只是想知道这两行是如何工作的:

     

list.add(本);

     

的System.out.println(列表);

list.add(this)将当前对象添加到列表中。

并且,在打印对象时,将调用toString()方法。如果类没有定义toString方法,那么每个对象都将从Object超级类中获取它。