新手提问 关于java中异常的处理

这个自定义的异常类publicclassMyexceptionextendsException{publicMyexception(){}publicMyexceptio... 这个自定义的异常类
public class Myexception extends Exception
{
public Myexception(){}
public Myexception(String message)
{
......
}
public Myexception(Throwable b)
{
..............

}
public Myexception(String message,Throwable b)
{
....
}
}

这里为什么还要定义一个含有参数为throwable b的构造函数??

throwable b 那写的时候应该则么些呢?
就是具体要实例化的时候?new Myexception(这里写什么才是throwable)????
展开
 我来答
tiamo_man_man
2012-08-09 · 超过10用户采纳过TA的回答
知道答主
回答量:110
采纳率:0%
帮助的人:40.6万
展开全部
这个自己定义的话,一般不会有throwable,只是有些时候,我们运用别人的框架时,它所抛出的异常是throwable类型的,而我们需要包装它的异常才会用到,就好比常用的ORM框架hibernate有的异常就是throwable类型的
liang_Henry
推荐于2018-04-05 · TA获得超过145个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:87.3万
展开全部
异常处理 有两种 一种是捕获 一种是抛出
Throwable是 Exception的父类

Exceptionpublic Exception(Throwable cause)

根据指定的原因和 (cause==null ? null : cause.toString()) 的详细消息构造新异常(它通常包含
cause 的类和详细消息)。对于那些与其他可抛出异常(例如,PrivilegedActionException)的包装器相同的异常,此构造方法很有用。

Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java
虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch
子句中的参数类型。
Throwable 包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。最后,它还可以包含
cause(原因):另一个导致此 throwable 抛出的 throwable。此 cause 设施在 1.4
版本中首次出现。它也称为异常链 设施,因为 cause 自身也会有 cause,依此类推,就形成了异常链,每个异常都是由另一个异常引起的。
导致 throwable cause 的一个理由是,抛出它的类构建在低层抽象之中,而高层操作由于低层操作的失败而失败。让低层抛出的 throwable
向外传播是一种糟糕的设计方法,因为它通常与高层提供的抽象不相关。此外,这样做将高层 API
与其实现细节关联起来,假定低层异常是经过检查的异常。抛出“经过包装的异常”(即包含 cause
的异常)允许高层与其调用方交流失败详细信息,而不会招致上述任何一个缺点。这种方式保留了改变高层实现而不改变其 API
的灵活性(尤其是,异常集合通过其方法抛出)。
导致 throwable cause 的另一个 cause 是,抛出它的方法必须符合通用接口,而通用接口不允许方法直接抛出
cause。例如,假定持久集合符合 Collection 接口,而其持久性在
java.io 的基础上实现。假定 add 方法的内部可以抛出 IOException。实现可以与其调用方交流
IOException 的详细消息,同时通过以一种合适的未检查的异常来包装 IOException,使其符合
Collection 接口。(持久集合的规范应该指示它能够抛出这种异常。)
Cause 可以通过两种方式与 throwable 关联起来:通过一个将 cause 看作参数的构造方法;或者通过 initCause(Throwable)
方法。对于那些希望将 cause 与其关联起来的新 throwable 类,应该提供带有 cause 的构造方法,并委托(可能间接)给一个带有 cause 的
Throwable 构造方法。例如:
try {
lowLevelOp();
} catch (LowLevelException le) {
throw new HighLevelException(le); // Chaining-aware constructor
}
因为 initCause 方法是公共的,它允许 cause 与任何 throwable 相关联,甚至包括“遗留
throwable”,它的实现提前将异常链机制的附件应用到 Throwable。例如: try {
lowLevelOp();
} catch (LowLevelException le) {
throw (HighLevelException)
new HighLevelException().initCause(le); // Legacy constructor
}
在版本 1.4 之前,许多 throwable 有自己的非标准异常链机制( ExceptionInInitializerError、
ClassNotFoundException、
UndeclaredThrowableException、
InvocationTargetException、
WriteAbortedException、
PrivilegedActionException、
PrinterIOException、
RemoteException 和 NamingException)。所有这些
throwable 都已经更新过,可以使用标准异常链机制,同时继续实现其“遗留”链机制,以保持兼容性。
此外,从版本 1.4 开始,许多通用的 Throwable 类(例如,Exception、RuntimeException、Error)都已经更新,具有带 cause
的构造方法。由于有 initCause 方法存在,这不是严格要求的,但它更方便,也更形象地委托给一个带有 cause 的构造方法。
根据惯例,Throwable 类及其子类有两个构造方法,一个不带参数,另一个带有 String
参数,此参数可用于生成详细消息。此外,这些子类很可能有与其相关联的 cause,因此也应有两个构造方法,一个带 Throwable
(cause),一个带 String(详细消息)和 Throwable (cause)。
在版本 1.4 中还引入了 getStackTrace()
方法,它允许通过各种形式的 printStackTrace()
方法编程访问堆栈跟踪信息,这些信息以前只能以文本形式使用。此信息已经添加到该类的序列化表示形式,因此 getStackTrace
和 printStackTrace 将可在反序列化时获得的 throwable 上正确操作。

参考资料: jdk API 1.6.0 中文版本

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式