我在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.
正如评论中指出的那样,您无法捕获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)
请务必查看文档以了解每种方法引发的异常.您可能还希望阅读有关已检查与未经检查的例外的主题,然后再引起您的混淆.
| 归档时间: |
|
| 查看次数: |
89848 次 |
| 最近记录: |