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