2

例外をスローする責任があるcatchブロックからメソッドを呼び出すとどうなるかを知りたいだけです(例外をスローします)。一生懸命探しましたが、納得のいく答えが見つかりませんでした....

たとえば。

public void A()
{
 try{
     //code which may throw exception
    }
 catch(Exception e)
  {
   A();
  }
}
4

8 に答える 8

4

試してみましたか?そこでメソッドを呼び出すことは、どこでも呼び出すことと同じです。値を返したり、例外をスローしたり、JVM を停止したりしても、どこでも同じように機能します。あなたがしているのは、メソッドがそれ自体を呼び出す、何らかの形の再帰です。そうしないと、 Java を使用しているため、 StackOverflowErrorが発生したときにスタック領域がなくなるまで、自分自身を永遠に呼び出し続けます。

于 2013-01-28T06:52:34.723 に答える
2

例外がスローされた catch ブロックで同じメソッドを呼び出す必要があるのはなぜですか?

例外をスローし続けると、無限ループが発生し、Java ヒープ スペース エラーが発生する可能性があります。

その例外を処理するメソッドを呼び出すか、例外に対して適切な手順を実行する必要があります。

A()質問のために、catch ブロック内のメソッド内でアクセス可能な任意のメソッドを呼び出すことができます。

public void myMethod(){

}
public void A()
{
 try{
     //code which may throw exception
 }
 catch(Exception e)
 {
   myMethod();
 }
}
于 2013-01-28T06:56:37.200 に答える
0

例外がキャッチ/スローされたときにそのメソッドが特定のタスクを実行するようにする場合は、catchブロックのメソッドを呼び出す必要があります。例:発生した例外の理由を出力したい場合があります;)

于 2013-01-28T07:03:51.357 に答える
0

これにより、無限ループが発生します。このコードで:

package com.sandbox;

public class Sandbox {

    public static void main(String[] args) {
        new Sandbox().run();
    }

    private void run() {
        try {
            throw new RuntimeException("A");
        } catch (Exception e) {
            run();
        }
    }
}

これはスローされる例外です:

Exception in thread "main" java.lang.StackOverflowError
at java.lang.Exception.<init>(Exception.java:66)
at java.lang.RuntimeException.<init>(RuntimeException.java:62)
at com.sandbox.Sandbox.run(Sandbox.java:11)
at com.sandbox.Sandbox.run(Sandbox.java:13)
at com.sandbox.Sandbox.run(Sandbox.java:13)
at com.sandbox.Sandbox.run(Sandbox.java:13)
于 2013-01-28T06:52:50.267 に答える
0

メソッドを再試行しますA()

ただし、例外が発生しないまで、これは再試行を続けます。

このシナリオが一時的なものでない限りException、これにより無限ループが発生する可能性があります。

おそらく最善の方法はA()、何らかの条件/タイムアウトで呼び出しを発行することです。

于 2013-01-28T06:56:24.960 に答える