2016-01-21 106 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」不是一個名字,它只是一個你傳遞給構造函數的參數,就是這樣。

相關問題