2012-11-08 67 views
1

不允許有例外在C++中我可以聲明不能再拋出異常的下功能在Java

int myfunction (int param) throw(); // no exceptions allowed 

我可以在Java編程語言這樣聲明的功能?

回答

5

不,任何方法總是可以拋出未經檢查的異常(RuntimeExceptionError)。

您只需要在方法聲明中列出檢查的異常(Exception子類,它們不是從RuntimeException派生的)。

而醜陋的邊注:當編譯器確實檢查,沒有檢查異常被拋出未聲明的,你可以工作圍繞一些醜陋的技巧(這有時被稱爲sneaky throw,項目龍目島supports it explicitly )。

+1

怎麼樣'myFunction的( ){try {....} catch(Throwable t){/ * ignore * /}}':-) –

+0

你是對的,但我沒有得到你討論的醜陋技巧?請詳細說明 –

+0

從技術上講,這並不會引發異常,但這並不意味着該方法被聲明爲「不引發異常」。在C中看到問題中的聲明足以知道該函數永遠不會拋出任何東西在Java中沒有等效的聲明 –

0

不,從這個意義上說。你可以聲明一個不拋出異常的函數(不包括throws關鍵字),但是你不能阻止函數拋出任何異常。想象一下,你將在該函數中除以零 - 程序的行爲將是未定義的。

0

有一種方法可以確保異常完全不會被拋出到前一層。只需將所有代碼放在try catch語句中,即使方法中發生任何異常,它也會始終處於捕獲狀態。

但是,請記住它只會確保異常不會傳播到以前的(呼叫)layer.It肯定不會確保異常不會出現在所有的方法體