2014-07-10 72 views
0

在我的課上,我有一個利用awt.Robot類的方法,並且每次運行此方法時都會實例化Robot()。我認爲這會顯着減慢我的處理速度,因爲在循環中運行10000次方法的情況下,我將實例化Robot()10000次而不是一次。如果我能將其宣佈爲全球性的,那將解決我的問題。我試過:在課堂級別拋出異常

Robot robot = new Robot(); 

就在我的課下,但我需要拋出異常來使用該行。不幸的是,我不知道如何在沒有try/catch塊的情況下做到這一點,這是我無法在方法之外完成的。

我該如何解決這個問題並將機器人初始化爲全局?

+4

爲什麼不在你的類的構造函數中做到這一點? –

+0

我班的建築師?我學會了如何在初始化一個類時使用構造函數來獲取參數,但我不知道如何使用這些參數來執行此操作... – Nathan

+0

此類用作庫/導入的方式,如果這會產生任何影響 – Nathan

回答

1

你可以把實例化一個靜態塊

static Robot robot; 
static { 
    try { 
     robot = new Robot(); 
    catch() 
    {} 
    } 
+0

但是隻有'robot'聲明爲'static'。如果不是的話,你會像HFOE所說的那樣將初始化語句放在構造函數中。 –

+0

你能解釋它是如何提高性能,所以我們可以學習? –

+1

謝謝你的回答,我實現了它,但@KickButtowski實際上沒有提高性能......它必須是其他的東西,然後讓我困惑,我只是不得不小心撥弄我猜。我認爲這會有所作爲,因爲現在我們只創造一次而不是n次。 – Nathan

1

你能做到這一點?

只要您只有這些類中的一個,請參閱單例模式。只有一個機器人,使所有對「yourRobotUsingMethod」的調用只使用一個機器人。

通過在您的類構造函數中初始化您的機器人類,您可以嘗試/捕獲類初始化的初始化。

class YourClass { 

    private Robot robot;  

    public YourClass() { 

     try { 
      robot = new Robot(); 
     } 
     catch(Exception e) { 
      //Catch your exception here 
     } 
    } 

    public void yourRobotUsingMethod() { 
     //Use your robot here 
     //You might want to check if robot is not null here too. 
    } 
} 

對不起,如果我弄糟了關鍵字,我已經習慣了C++的塊訪問級別。但你應該明白