0

メソッドが例外をスローする場合、メソッド内に try ブロックが必要ですか?

例えば、

    public void foo() throws SomeException{
        try{
            // content of method
        }
    }

try ブロックは必要ですか? または、それなしで SomeException をスローできるメソッドですか?

    public void foo() throws SomeException{
            // content of method
    }

これは、 throwで SomeException を明示的にスローしていない場合です。

4

6 に答える 6

3

チェックされた例外の場合SomeExceptionは、次のいずれかを行う必要があります

  • try{}catchブロックを使用するか、
  • メソッドがそれをスローすることを宣言します。

両方を行う必要はありません。質問に表示されている例はどちらも問題なく機能します。

違いは、try句を使用するとSomeException自分で処理するのに対し、独自のメソッドを宣言することで、呼び出し元のメソッドthrowsに処理の責任を委譲することです。SomeException

于 2012-07-25T10:09:27.193 に答える
0

1.プログラムから呼び出して throws an Exceptionいるメソッドの場合、メソッド呼び出しの前後で使用する必要があります。try/catch

2.メソッドを記述している と仮定するとthrows an exception、そのメソッドを使用しないようにする必要があり throw new Exception object ます。

3.例外は、タイプExceptionのオブジェクトです。、、がChecked ExceptionありUnchecked Exception (Runtime Exception)ます。

于 2012-07-25T10:11:18.557 に答える
0

tryブロックは必要ありません。

public void foo() throws SomeException {
  // do some stuff
  // you decide to throw the exception by yourself:
  if (throwAnException) throw new SomeException();
  // or you call a method that throws SomeExpection:
  methodThatCanThrowSomeException();
  // do more stuff
}

あなたが署名でそれを宣言する限り、あなたは完全に元気です。メソッドの呼び出し元は、あなたではなく、例外を処理する必要があります。したがって、発信者は次のことを行う可能性があります。

try {
  foo();
} catch (SomeException e) {
  // handle exception
}

または彼はそれを一人でさらに渡すかもしれません。

于 2012-07-25T10:13:20.297 に答える
0

メソッドが例外をスローすると、例外を処理する責任が呼び出し元に渡されます。したがって、署名で例外をスローした場合、例外を処理する必要はありません。以下のように。

public void foo(){
        try{
            // content of method
        }
    }

でもこう書くと。

public void foo() throws SomeException{

    }

次のようにメソッドを呼び出します。

try{

   foo();
}
于 2012-07-25T10:09:51.860 に答える
0

基本的に、try ブロックを含める必要はありません

      public void foo() throws SomeException {
// do some stuff
// you decide to throw the exception by yourself:
if (throwAnException) throw new SomeException();
// or you call a method that throws SomeExpection:
methodThatCanThrowSomeException();
// do more stuff
 }
于 2012-07-25T10:37:28.540 に答える
0

定期的に遭遇する最も問題のあるケースは、チェック済み例外を宣言するメソッドを呼び出すことです。実際のケースの大部分では、その場でその例外を処理するのは適切ではありませんが、それを上方に伝播させます。残念なことに、Java では、この同じ例外をずっと上まで再宣言する必要があります。これにより、混乱が生じ、実装の詳細が公開され、既存のメソッドの契約が破られることもよくあります。

そのような場合、先に進む方法はラップして再スローすることです:

catch (RuntimeException e) {throw e;} catch (Exception e) {throw new RuntimeException(e);}
于 2012-07-25T10:15:06.213 に答える