A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 吕振中 于 2013-9-6 15:03 编辑

以下这个总结是毕老师基础视频第9天第10节末尾所提到的,看了好几遍实在是理解不了了,求大神们帮解释一下。{:soso_e181:}

自定义异常继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都被抛出。
他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
我是这样理解的,也不知道对不对啊。Throwable有两个子类Exception和Error。Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题。Exception 类及其子类是  的一种形式,它指出了合理的应用程序想要捕获的条件。我们自定义异常,就是为了解决问题,扑捉异常的,所以直接继Exception就好了。

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

回复 使用道具 举报
Throwable是可抛的意思。在Throwable体系中Error类及其子类也具有可抛性。但在这里是需要定义一个自定义异常类。所以继承Exception就合情合理了。
回复 使用道具 举报
本帖最后由 苏联兵 于 2013-9-5 20:58 编辑

首先在Throwable类中具有Error和Exception类这两个直接子类,而Error类主要作用是用于表示硬件相关的错误,所以继承Error类或者是Throwable是没有任何意义的,从而让自定义类直接继承Exception类。Throwable是所有异常的父类抛出它的类构建在低层抽象之中,而高层操作由于低层操作的失败而失败。让低层抛出的 throwable 向外传播是一种糟糕的设计方法,因为它通常与高层提供的抽象不相关。此外,这样做将高层 API 与其实现细节关联起来,假定低层异常是经过检查的异常。抛出“经过包装的异常”(即包含 cause 的异常)允许高层与其调用方交流失败详细信息,而不会招致上述任何一个缺点。这种方式保留了改变高层实现而不改变其 API 的灵活性(尤其是,异常集合通过其方法抛出)。 导致 throwable cause 的另一个 cause 是,抛出它的方法必须符合通用接口,而通用接口不允许方法直接抛出 cause。例如,假定持久集合符合 Collection 接口,而其持久性在 java.io 的基础上实现。假定 add 方法的内部可以抛出 IOException。实现可以与其调用方交流 IOException 的详细消息,同时通过以一种合适的未检查的异常来包装 IOException,使其符合 Collection 接口。(持久集合的规范应该指示它能够抛出这种异常。)
  Throwable是属于一个高级别的处理异常的类,而且 只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
你用一个高级别的异常类去处理低级别的异常很明显不合适,还有你直接继承Throwable在去实例化子类对象,在通过子类对象去处理异常,按照这样的思路为了处理一个异常我们大动干戈的整那么多代码,如果为了体验写代码的乐趣的话可以试试,真正开发还是回归正道吧,这样做不仅让程序很臃肿而且还完全没有体现出Java异常处理的特点。希望能帮到你。不对的地方还请指正。


评分

参与人数 2技术分 +1 黑马币 +30 收起 理由
吕振中 + 30 很给力!
黄文伯 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
苏联兵 发表于 2013-9-5 20:56
首先在Throwable类中具有Error和Exception类这两个直接子类,而Error类主要作用是用于表示硬件相关的错误, ...

问题已经解决,好像突然之间又明白了很多问题,{:soso_e179:}
回复 使用道具 举报
吕振中 发表于 2013-9-6 14:43
问题已经解决,好像突然之间又明白了很多问题,

能把问题想明白对于解决问题是很有帮助的,加油!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马