2016-01-21 85 views
1
public static void main(String[] args) { 
    Thread myThread = new Thread("YOYO") { 
     public void run() { 
      Thread t = Thread.currentThread(); 
      System.out.println(t.getName()); 
     } 
    }; 

    myThread.start(); 
} 

谁能解释什么样的功能,大括号代码块的旁边的Thread类构造器new Thread("YOYO")的callling?据我所知,它不应该是匿名类,因为如果是匿名类,旁边Thread应该是空的,而不是()("YOYO")匿名类的构造函数调用可以有参数

回答

5

按照Java docs

匿名类表达式由以下部分组成:

  1. 的新的运营商

  2. 的接口的名称来实现或类以延伸。在这个例子中,匿名类正在实现接口HelloWorld。

  3. 圆括号包含构造函数的参数,就像普通的类实例创建表达式一样。注意:当您实现一个接口 时,没有构造函数,因此您使用一对空括号 括号,如本例所示。

  4. 身体,这是一个类声明的主体。更具体地说,在主体中,方法声明是允许的,但声明不是。

Thread是一个类,它包含一个constructor with a String parameter,所以,这是一个有效的匿名类表达式。

+1

可能值得添加的是,您可以在不使用字符串的情况下调用它,因为[无参数构造函数](https://docs.oracle.com/javase/7/docs/api/java/lang/ Thread.html#Thread())。 –

+0

@AndyTurner,我想,*“构造函数的参数”*假定,可能有空的参数列表。好,但是:) – soon

+1

@soon:根据Java文档,所以我上面的语句是:使用'public Thread(@NotNull java.lang.String name)'调用Thread类的构造函数,然后扩展线程类并最终覆盖超类(即Thread类)的运行方法 – bufferoverflow76

3

它是一个匿名内部类的支架..

“YOYO”不是一个名字,它只是一个你传递给构造函数的参数,就是这样。

相关问题