一、基本异常
-
异常参数
(1)和其他Java对象一样,可以使用new从heap产生出一个异常对象
(2)所有的标准异常都有两个构造参数:第一个是default构造函数,第二个可以接受字符串参数,允许你将相关信息置于异常之中.此外,这些子类很可能有与其相关联的 cause, 因此也应有两个构造方法,一个带 Throwable (cause),一个带 String(详细消息)和 Throwable (cause)。
(3)在版本 1.4 中还引入了 getStackTrace() 方法,它允许通过各种形式的 printStackTrace() 方法编程访问堆栈跟踪信息,这些信息以前只能以文本形式使用。此信息已经添加到该类的序列化表示形式,因此 getStackTrace 和 printStackTrace 将可在反序列化时获得的 throwable 上正确操作。 -
异常的捕捉和处理
(1)try模块捕捉异常
(2)紧接try的catch模块处理异常 -
编写自己的异常类
(1)如果要编写自己的异常类,一定得继承某个既有的异常型别,这些子类很可能有与其相关联的 cause,因此也应有两个构造方法,一个带 Throwable (cause),一个 带 String(详细消息)和 Throwable (cause)。在版本 1.4 中还引入了 getStackTrace() 方法,它允许通过各种形式的 printStackTrace() 方法编程访问堆栈 踪信息,这些信息以前只能以文本形式使用。此信息已经添加到该类的序列化表示形式,因此 getStackTrace 和 printStackTrace 将可在反序列化时获得 的throwable上正确操作。
如下为内置IO异常的源码:
public class IOException extends Exception {
static final long serialVersionUID = 7818375828146090155L;
public IOException() {
super();
}
public IOException(String message) {
super(message);
}
public IOException(String message, Throwable cause) {
super(message, cause);
}
public IOException(Throwable cause) {
super(cause);
}
}
(2)Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地, 只有此类或其子类之一才可以是 catch 子句中的参数类型。
(3)所有的异常类都继承自Exception,所有的错误类都继承自Error类(我们只关注异常)
-
异常规格
(1)异常规格是在关键字throws之后接一连串可能引发的异常型别。
(2)例如:void method() throws Exception_1,Exception_2,Exception_3; -
捕捉所有异常
(1)可以使用java.lang.Exception捕捉所有异常,但该类是型别是所有重要异常类的基类,因此无法从中获取得到太多特定信息。不过可以调用一些源于Thorwable (Throwable 类是 Java 语言中所有错误或异常的超类)的函数。 -
重掷异常
(1)实例如下:catch(Exceptiosn e){
throw e;
}
二、Java标准异常
- 运行时异常的特殊情况
(1)你无法捕捉的错误(如:你的函数收到客户端传来的一个null reference)
(2)身为程序员的你应该在自己的程序代码中检查的错误(如:ArrayIndexOutOfBound Exception) - 以finally进行清理
(1)无论try block是否掷出异常,finally语句都会执行其子句
三、异常限制
四、构造函数
五、异常的匹配
- 异常会被它所吻合的第一个catch子句捕捉过去
六、异常的使用原则
- 修正问题,并在此调用引发异常的那个函数
- 暂时解决问题,不再尝试执行该函数,转而继续程序的执行
- 计算出某个可替代结果,用来替代函数原本的值
- 终止程序
- 进行简化
- 让程序库和程序更安全。
七、总结
暂且当做对异常机制的简单了解吧。