1. ホーム
  2. java

[解決済み] 対応する try 文の本体で例外がスローされない。

2022-01-31 13:34:45

質問

Javaでの例外処理に問題があり、以下が私のコードです。この行を実行しようとすると、コンパイラーエラーが発生します。 throw new MojException("Bledne dane"); . エラーは

例外MojExceptionは、対応するtry文の本体で投げられることはありません。

以下はそのコードです。

public class Test {
  public static void main(String[] args) throws MojException {
    // TODO Auto-generated method stub

    for(int i=1;i<args.length;i++){
      try{
        Integer.parseInt(args[i-1]);
      }
      catch(MojException e){
        throw new MojException("Bledne dane");
      }
      try{
        WierszTrojkataPascala a = new WierszTrojkataPascala(Integer.parseInt(args[0]));
        System.out.println(args[i]+" : "+a.wspolczynnik(Integer.parseInt(args[i])));
      }
      catch(MojException e){
        throw new MojException(args[i]+" "+e.getMessage());
      }
    }
  }
}

そして、以下はMojExceptionのコードです。

public class MojException extends Exception{
    MojException(String s){
        super(s);
    }
}

どなたか教えてください。

どのように解決するのですか?

try文の中のcatch-blockは、以下のものをキャッチする必要があります。 まさに の中のコードが例外となる。 try {} -ブロック を投げる(またはその上位クラス)。

try {
    //do something that throws ExceptionA, e.g.
    throw new ExceptionA("I am Exception Alpha!");
}
catch(ExceptionA e) {
    //do something to handle the exception, e.g.
    System.out.println("Message: " + e.getMessage());
}

やろうとしていることは、こうです。

try {
    throw new ExceptionB("I am Exception Bravo!");
}
catch(ExceptionA e) {
    System.out.println("Message: " + e.getMessage());
}

これはコンパイラのエラーになります。なぜなら、決して起こらない例外をキャッチしようとしていることがJavaに分かってしまうからです。したがって、次のようになります。 exception ExceptionA is never thrown in body of corresponding try statement .