好吧,我可能听起来很天真,.Please,原谅我,me.But,我不能理解一个简单的场景。
以下是一段代码
class Utils {
int getInt(String x) throws Exception {
return 7;
}
}
public class Tutorial4 extends Utils {
public static void main(String[] args) {
Utils u = new Tutorial4();
u.getInt("2");
}
int getInt(String arg) {
return Integer.parseInt(arg);
}
}但是下面的代码显示了编译时错误
u.getInt("2");它要求我声明或处理异常。
但是,当我重写上面的方法时,为什么它会显示错误
其次,当我用NUllPointerException代替Exception时,它不会给我任何错误
它背后的概念是什么?
谢谢
发布于 2013-07-03 16:58:02
它要求我声明或处理异常。
是啊,没错。当您调用已声明要引发异常的方法时,调用方法也应该声明要引发的异常,或者处理该异常。
但是,当我重写上面的方法时,为什么它会显示错误
在重写方法时,不能移除或减少限制。您的重写方法必须至少声明异常或其在重写方法中声明的子类。
第二,当我用NUllPointerException代替Exception时,它不会给我任何错误
NPE是一个未检查的异常,所以不需要声明它被抛出。
发布于 2013-07-03 16:58:16
但是,当我重写上面的方法时,为什么它会显示错误
这是因为您的变量u的类型是Utils。在Utils中,getInt()方法抛出一个为Checked Exception的Exception
将声明更改为
Tutorial4 u = new Tutorial4();
u.getInt();在这里,您不必处理Exception,因为在覆盖时,您已经从getInt()定义中删除了throws Exception子句
;其次,当我用NUllPointerException代替Exception时,它不会给我任何错误
因为NullPointerException是一个Unchecked Exception。如果任何方法抛出未检查的异常,则调用者不会被强制捕获该异常。
发布于 2013-07-03 17:05:42
看看这个链接:http://www.artima.com/designtechniques/exceptions.html这是一个非常容易理解的异常概念的描述。
,但是下面的代码向我展示了编译时错误,它要求我声明或处理异常。
您已经声明该方法抛出了异常。你的意思是覆盖,所以你也继承了throws声明,因此你也得到了编译错误。
;其次,当我用NUllPointerException代替Exception时,它不会给我任何错误
这是因为NullPointerException是一个RuntimeException,在编译过程中不会被标记为错误。请参阅上面链接中的小继承图。
https://stackoverflow.com/questions/17443667
复制相似问题