在方法内部throw异常,必须要同时在方法头部声明throws吗?

0 0 java
Sily°苏暖年
Sily°苏暖年

声望值:222 0人

2019-03-07 15:11:51 提问

关注 0关注

收藏 0收藏, 167浏览

下面节选自类 JSONObject:

public String getString(String key) {
    this.verifyIsNull();
    Object o = this.get(key);
    if(o != null) {
        return o.toString();
    } else {
        throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] not    found.");
    }
}

以上直接抛出异常,而没有在方法头部声明throws。

但是我自己写的方法中,是同时有throw和throws的。去掉throws就会报错:

Unhundled Exception 。

这是为什么?

请先 登录 后评论

2个回答

  • 疯狂Clark116声望 2018-09-25 09:25

    java异常一般分为Checked异常和Runtime异常,所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException。Java认为Checked异常都是可以被处理的异常,所以Java程序必须显示处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误无法编译。而RuntimeException异常如果没有显示的捕获处理则由系统自动检测并将它们交给缺省的异常处理程序。JSONException应该是RuntimeException的子类,可以不用显式的对它try...catch或者throws.如果没有对该异常的处理会交给jvm处理。而你自己写的异常肯定是属于Checked异常,被认为是可以避免的异常,必须try...catch或者显式的抛出throws不然编译报错。如果你自定义的异常想像throw new JSONException这样处理,则你自定义的异常需要继承RuntimeException即可。
    请先 登录 后评论
  • 风中孤狼128声望 2018-09-25 09:25

    JSONException RuntimeException(继承) 是运行时异常 不用捕捉
    请先 登录 后评论

注册新账号

悬赏追问
10
  • 10
  • 20
  • 50
  • 100
  • 200
  • 输入数值
发布追问