2012-02-17 7 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); 
} 

私のサプライヤークラスのコンストラクタ:

私はFileNotFoundExceptionをjava.ioの 「報告されていない例外を取得し続ける
public ColorSet(File source) throws FileNotFoundException 
{ 
    if (!source.exists()) { 
     throw new FileNotFoundException(("File not found")); 
    } 
    colorInput = source; 
} 

は、キャッチする必要がありますか

私はクライアントメソッドでキャッチしようとしましたが、ボディブロックで呼び出すことができないと言っています。間違っているのでしょうか?

答えて

1

inputFiles()

+0

私のクライアントメソッドでは、次のようになります。public static void inputFile()throws FileNotFoundException? – pood

+0

はい、そうする必要があります –

2

それが不平を言っている理由は、それがinputFiles() throws FileNotFoundExceptionを望んでいることであるだけでなく、それを宣言する必要があります。

あなたが ColorSetのコンストラクタで、それを持っている場合、私はあなたが inputFilesでそれを必要とする理由として好奇心、そしてなぜ inputFilesはそれだけで一つのファイルを入力しているにもかかわらず、複数である、と述べた

代わりに、FileNotFoundExceptionをスローして、InputSetメソッドのColorSetのコンストラクタで例外をキャッチしないでください。

2

javaでチェック例外をスローしている場合、メソッドのシグネチャで宣言する必要があります。あなたは、あなたがのようにtry-catchブロックでその例外を処理する必要がありますいずれかのチェック例外をスローするメソッド(またはコンストラクタ)を呼び出す場合も:

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

あなたが代わりに実行時例外をスローした場合、あなたは何あなたのメソッドがそれらをスローすることを宣言する必要はありません。この場合、メソッドに渡された引数が有効かどうかを確認しているようだから、IllegalArgumentExceptionを使うことをお勧めします。

コンストラクタから例外をスローすることはよく考えられないことに注意してください。親指のルールのより多くの考えです...

+0

私はあなたがコンストラクタを投げてはいけないとは知らなかった。 (CS proffの)正確なコンストラクタを使用することになっています – pood

+0

コンストラクタと例外にはいくつかの問題があります:http://stackoverflow.com/a/1371559/355499、http://futuretask.blogspot.com/ 2006/05/java-tip-10-constructor-exceptions-are.html –

0

前述したように、inputFiles()にもあなたの現在の方法で投げる必要があります。

しかし、ColorSetのコンストラクタだけで例外をスローしてから、inputFiles()で例外をキャッチするか、inputFiles()を呼び出し元に例外を渡すようにしてください(inputFiles ) 方法)。この方法では、重複したコードが削除され、誰かがColorSetオブジェクトを作成するたびに例外がスローされます。

関連する問題