异常永远不会在相应的try语句的主体中抛出

use*_*967 13 java exception

我在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());
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是MojException的代码:

public class MojException extends Exception{
    MojException(String s){
        super(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

谁能帮我这个?

Chr*_*ian 18

try语句中的catch块需要准确捕获try {}-block 中的代码可以抛出的异常(或者超类的异常).

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());
}
Run Code Online (Sandbox Code Playgroud)

你要做的是这样的:

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

这将导致编译器错误,因为您的java知道您正在尝试捕获永远不会发生的异常.因此你会得到:exception ExceptionA is never thrown in body of corresponding try statement.


Dun*_*nes 8

正如评论中指出的那样,您无法捕获try块中代码不会抛出的异常.尝试将代码更改为:

try{
    Integer.parseInt(args[i-1]); // this only throws a NumberFormatException
}
catch(NumberFormatException e){
    throw new MojException("Bledne dane");
}
Run Code Online (Sandbox Code Playgroud)

请务必查看文档以了解每种方法引发的异常.您可能还希望阅读有关已检查与未经检查的例外的主题,然后再引起您的混淆.