错误消息:永远不会从try语句主体抛出此异常。
这里显示了一个java程序:
class err1 extends Exception {}
class Obj1 {
Obj1() throws err1 {
throw new err1();
}
}
class Main {
public static void main(String[]argv) {
Class a[] = {Obj1.class};
try {
a[0].newInstance();
} catch(err1 e) { //Here meet my error
}
}
}
我该怎么做才能处理它?
不要告诉我将catch(err1 e)
替换为catch(Exception e)
,因为我的Eclipse不知道可以抛出异常。
此外,当我启动它时,发生了如下事情。
Exception in thread "main" java.lang.Error:Unresolved compilation problem:
Unreachable catch block for err1. This exception is never thrown from the try statement body
然后我突然知道自己要做什么......
答案 0 :(得分:2)
反射方法newInstance()
除其他外引发InstantiationException
。如果在构造函数中遇到任何类型的异常,则抛出此异常。您需要捕获那个,并使用err1
类中的适当方法抽象InstantiationException
。
newInstance()
本身并不知道您的特定例外情况,而是将其封装在InstantiationException
中。
答案 1 :(得分:0)
Exception类型在编译时是未知的,因为任何东西都可以包含在Class数组中。
您可以做的是检查catch块中的类型:
public class Example {
public static void main(String[] args) {
Class a[] = {Obj1.class};
try {
a[0].newInstance();
} catch (Exception e) {
if(e instanceof CustomException) {
System.out.println("CustomException");
}
}
}
}
class Obj1 {
Obj1() throws CustomException {
throw new CustomException();
}
}
class CustomException extends Exception {
}
无法提及:如果您遵守普遍接受的编码/命名/格式约定,则对其他人非常有帮助。