2012-02-17 77 views
0

我的客戶端代碼:未報告的異常java.io FileNotFoundException;必須捕獲或聲明拋出

public static void inputFiles() 
{ 

    File inputFile = new File("colors2.txt"); 
    if (!inputFile.exists()) { 
     throw new FileNotFoundException(("File not found")); 
    } 
    ColorSet colorSetter = new ColorSet(inputFile); 
} 

我的供應商類的構造函數:

public ColorSet(File source) throws FileNotFoundException 
{ 
    if (!source.exists()) { 
     throw new FileNotFoundException(("File not found")); 
    } 
    colorInput = source; 
} 

我不斷獲取 「沒有報告異常java.io FileNotFoundException異常;必須捕獲或聲明拋出「

我試着在客戶端方法中捕獲它,但它告訴我它不能在body block中調用,也許我做錯了嗎?

回答

1

inputFiles()有權宣佈它還有

+0

所以對於我的客戶端方法,它應該是:public static void inputFile()throws FileNotFoundException? – pood 2012-02-17 18:26:07

+0

是的,這就是它需要做的 – 2012-02-17 18:35:10

2

它是抱怨的原因是,它想inputFiles() throws FileNotFoundException


也就是說,如果你在ColorSet構造有它,我很好奇,爲什麼你需要它inputFiles,爲什麼inputFiles是複數即使只輸入一個文件。

您的替代解決方案不是拋出FileNotFoundException並在inputFiles方法的ColorSet構造函數中捕獲Exception。

2

如果你在java中拋出一個檢查異常,你需要在你的方法簽名中聲明它。此外,如果你調用拋出一個checked異常,然後一個方法(或構造函數),你要麼需要處理該異常像一個try-catch塊:

try { 
    ColorSet colorSetter = new ColorSet(inputFile); 
} catch (FileNotFoundException fnfe) { 
    // do something sensible with the exception. 
} 

如果你拋出一個運行時異常,而不是你做的不需要聲明你的方法拋出它們。在這種情況下,我建議你使用IllegalArgumentException,因爲它似乎在檢查提供給你的方法的參數是否有效。

另請注意,從構造函數中拋出異常通常被認爲是不好的。認爲這是更多的經驗法則......

+0

我不知道你不應該拋出構造函數。我們假設使用確切的構造函數(來自CS proff) – pood 2012-02-17 18:27:43

+0

構造函數和異常可能存在一些問題:http://stackoverflow.com/a/1371559/355499,http://futuretask.blogspot.com/ 2006/05/Java的針尖10構造的例外,are.html – 2012-02-17 19:53:01

0

如前所述,您需要將inputFiles()與您當前的方法一起使用。我只是建議使用ColorSet的構造函數拋出異常,然後在inputFiles()中捕獲異常,或者讓inputFiles()將異常傳遞給它的調用者(而不必在inputFiles中檢查代碼) ) 方法)。此方法刪除重複的代碼,並確保在有人仍然創建ColorSet對象時引發異常。

相關問題