2013-12-12 67 views
0

我一直在從互聯網下載一個.java文件,其中包含一些我不太熟悉的代碼。該文件的名稱是「Class1.java」。Java:1.1:從該類創建類的實例。 1.2:線程實例化

Class1.java

public class Class1 implements Runnable { 
     public static Class1 instantiation1 = null; 

     public static void main(String[] args) { 
       instantiation1 = new Class1(); 

       (new Thread(instantiation1)).start(); 
     } 

     public void run() { 
       /* Do whatever the threads should do. 
       I don't think this part is so important... */ 
     } 
} 

1.1:從該類創建類的實例。

public static Class1 instantiation1 = null; 
instantiation1 = new Class1(); 

爲什麼Class1製作自己的實例?這種行爲是否有自己的名字?

1.2:線程化實例化。

(new Thread(instantiation1)).start(); 

它是通常使用的實例作爲線程,而不是創建這樣一個線程:

Thread <thread name> = new Thread(); 

我期待着問題和答案。 謝謝你的時間。

回答

1

1.1。如果要在Class1上運行實例(非靜態)方法,這是正確的做法;在你的情況下,你需要這個,因爲你需要將Class1實例傳遞給下一行的Thread構造函數。

1.2。這是正常的,你有兩種方法來創建一個線程(通過擴展線程或通過實現Runnable),這裏這段代碼使用Runnable方法(即這是第二種方法);第一種方法是你提到的方法(但是Class1需要擴展Thread)。

1

1.1:您可能會因爲名稱「Class1」而感到困惑。它是類的名稱,就像「Socket」,「XMLReader」或其他。這與「Class」對象無關,這是完全正常的。如果你閱讀開始爲Socket _socket = new Socket();這是有道理的,對嗎?嘗試重命名(如果使用eclipse,則使用alt-shift-R)「Class1」到「MyRunnableObject」,它會更好:)

1.2:儘管線程與「類的瞬時」無關他的名字。該對象之前已創建,現在已運行,可以是任何可運行的。重命名「instantation」到「_runnable」,突然,它更有意義:)

我覺得你被窮變量命名誤導,如果不是這樣,原諒我的不恰當的答案:)

+1

謝謝兩位!解釋說你不能使用這個類的非靜態變量或方法而不操作這個類的實例本身就幫助我清理了很多東西。 C4stor;我很難理解爲什麼啓動是在與啓動指向的同一類中進行的,並且我仍然難以理解爲什麼代碼將類的啓動用作線程,要麼是使用啓動本身,要麼是無論啓動如何,它只是調用線程「Class1」。 對不起,如果我的意見有點混亂... –