首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于抛出异常的困惑

关于抛出异常的困惑
EN

Stack Overflow用户
提问于 2013-07-03 16:54:40
回答 6查看 97关注 0票数 1

好吧,我可能听起来很天真,.Please,原谅我,me.But,我不能理解一个简单的场景。

以下是一段代码

代码语言:javascript
运行
复制
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);
    }
}

但是下面的代码显示了编译时错误

代码语言:javascript
运行
复制
u.getInt("2");

它要求我声明或处理异常。

但是,当我重写上面的方法时,为什么它会显示错误

其次,当我用NUllPointerException代替Exception时,它不会给我任何错误

它背后的概念是什么?

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-07-03 16:58:02

它要求我声明或处理异常。

是啊,没错。当您调用已声明要引发异常的方法时,调用方法也应该声明要引发的异常,或者处理该异常。

但是,当我重写上面的方法时,为什么它会显示错误

在重写方法时,不能移除或减少限制。您的重写方法必须至少声明异常或其在重写方法中声明的子类。

第二,当我用NUllPointerException代替Exception时,它不会给我任何错误

NPE是一个未检查的异常,所以不需要声明它被抛出。

票数 3
EN

Stack Overflow用户

发布于 2013-07-03 16:58:16

但是,当我重写上面的方法时,为什么它会显示错误

这是因为您的变量u的类型是Utils。在Utils中,getInt()方法抛出一个为Checked ExceptionException

将声明更改为

代码语言:javascript
运行
复制
Tutorial4 u = new Tutorial4();
u.getInt();

在这里,您不必处理Exception,因为在覆盖时,您已经从getInt()定义中删除了throws Exception子句

;其次,当我用NUllPointerException代替Exception时,它不会给我任何错误

因为NullPointerException是一个Unchecked Exception。如果任何方法抛出未检查的异常,则调用者不会被强制捕获该异常。

票数 1
EN

Stack Overflow用户

发布于 2013-07-03 17:05:42

看看这个链接:http://www.artima.com/designtechniques/exceptions.html这是一个非常容易理解的异常概念的描述。

,但是下面的代码向我展示了编译时错误,它要求我声明或处理异常。

您已经声明该方法抛出了异常。你的意思是覆盖,所以你也继承了throws声明,因此你也得到了编译错误。

;其次,当我用NUllPointerException代替Exception时,它不会给我任何错误

这是因为NullPointerException是一个RuntimeException,在编译过程中不会被标记为错误。请参阅上面链接中的小继承图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17443667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档