本帖最后由 苏联兵 于 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异常处理的特点。希望能帮到你。不对的地方还请指正。
|