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

我在Java中遇到exception处理问题,这是我的代码。 当我尝试运行此行时出现编译器错误: throw new MojException("Bledne dane"); 。 错误是:

exceptionMojException永远不会在相应的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块需要准确捕获try {} -block中的代码可以抛出的exception(或者它的超类)。

 try { //do something that throws ExceptionA, eg throw new ExceptionA("I am Exception Alpha!"); } catch(ExceptionA e) { //do something to handle the exception, eg 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。 因此,您将获得: exception ExceptionA is never thrown in body of corresponding try statement

正如评论中指出的那样,您无法捕获try块中代码未抛出的exception。 尝试将代码更改为:

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

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

永远记住,在检查exception的情况下,你只能在抛出exception之后捕获(无论是抛出还是代码中使用的任何内置方法都可以抛出),但是在未经检查的exception的情况下,即使你没有抛出exception也是一个问题。

任何扩展Exception类的类都将是一个用户定义的Checkedexception类 ,其中任何扩展RuntimeException类都将是Uncheckedexception类 。 用户定义的exception中提到的是已检查或未检查的exception因此,不抛出已检查的exception(无论是用户定义的exception还是内置exception)会产生编译时错误。

已检查的exception是在编译时检查的exception。

未经检查的exception是在编译时未检查的exception