1

私はJAVAでの例外処理に不慣れです。私はそれについていくつかの基本的な質問があります:

First.javaの内部:

public void foo ()
{
  Second obj = new Second();
  obj.boo();
}

Second.javaの内部

public void boo()
{
   try { /* may throw some I/O Exception here */ }
   catch (IOException e) { System.err.println(e.message()); }
   catch (Exception e) { System.err.println(e.message()); }
}

私の質問は、First.javaのfoo()メソッド内にもtry / catchブロックを追加する必要がありますか(すべきですか)?

4

3 に答える 3

1

する必要はありませんが、boo()で処理したくない場合は、次のようにすることができます。

public void boo() throws IOException{

...

}

public void foo(){
   try{
   boo();
   }catch(IOException ioe){ System.out.println(ioe.message());}
}

しかし、あなたが持っているものはうまくいくはずです。お役に立てば幸いです。

于 2012-12-01T22:29:32.423 に答える
0

いいえ、それは実際にはコンパイルエラー(または警告?)でbooあり、(のコンストラクターがスローしない限りSecond)スローされません。それを試してみてください。

于 2012-12-01T22:29:06.247 に答える
0

boo() メソッド内で例外をキャッチしているので、あなたも持っていません。

ただし、代わりに、呼び出し元のメソッドが例外を処理するために例外をスローした場合は、そこで例外を処理する必要があります..

public void boo() throws IOException{
//something raising IOException
}

public void foo(){
  try{
      Sound obj = new Sound();
        obj.boo();
} catch(IOException io) {

//handle your exception
}
}

それでも、foo() メソッド内で例外を処理したくない場合は、再度スローすることを選択できます。

public void foo() throws IOException{
   //your code here
}

再び foo() を呼び出すメソッドは例外を処理する必要があり、それ以外の場合は例外が発生します

于 2012-12-01T22:36:15.207 に答える