-1

これが私のコードの一部です...コンパイルしたいときは、SelfDefineExceptionのUnreachable catchブロックが常に表示されます。この例外は、try ステートメント本体からスローされることはありません

どうすれば修正できますか、誰かが私を助けることができますか、私はそれを解決するために何百万回も試しました

    try
    {
        Statement 1;
        Statement 1;
        Statement 1;
        Statement 1;

        try
        {
           Statement 3;
        }
        catch (SelfDefineException er)
        {
            String error = er.getMessage();

            System.out.print("issue: \n\t(" +er.getMessage() + ")");
                result = false;
            }
        }
    }
    catch (SelfDefineException er)
    {
        System.out.print("failed: " + er.getMessage());
    }
4

2 に答える 2

1

SelfDefineException がチェック済み例外である場合 (RuntimeException を拡張していない限り、おそらくそうです)、それをキャッチするか宣言する必要があります ( http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html )。ここで「到達不能コード」が発生する可能性のあるシナリオは 3 つあります。

  1. ステートメント 3 が SelfDefineException をスローするメソッドを呼び出す唯一のステートメントである場合、上記のステートメントはそれをスローできないため、2 番目のキャッチには到達できません。
  2. ステートメント 3 に、SelfDefineException をスローするメソッドの呼び出しが含まれていない場合、最初のキャッチには到達できません。
  3. メソッド定義に「throws SelfDefineException」を宣言するメソッドの呼び出しが含まれていない場合、両方の catch ブロックに到達できません。
于 2013-05-15T01:33:36.300 に答える
0

中かっこは、到達不能ステートメント エラーではなく、解析エラーを生成する必要があります。

おそらく、try ブロックの 1 つで、そもそも例外をスローするものが何もないということです。

また、なぜ使うのか

System.out.print("issue: \n\t(" +er.getMessage() + ")");

前の行に含まれていると宣言された変数が既にある場合はer.getMessage()

変数を使用するだけで、少なくともコードが少し読みやすくなります。

System.out.print("issue: \n\t(" + error + ")");
于 2013-05-15T01:43:59.690 に答える