为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Qyouu 2019-02-22 16:26:20
下面节选自类 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 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

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即可。

查看完整回答
反对 回复 2019-03-01
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

JSONException RuntimeException(继承) 是运行时异常 不用捕捉

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 1563 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信