10、异常
一、 什么是异常:
a) 异常是程序执行期间发生的各种意外或不正常的事件,它会中断正在运行的程序。
虽说对某些异常JVM已做出处理,但应用程序中还会有很多JVM不能预知的情况,那么这些异常就需用应用程序来编码处理了。
二、 处理异常的语法:
public void method(){
try {
// 代码段(此处是会产生异常的代码)
//2
} catch (异常类型 ex) {
// 对异常进行处理的代码段
} finally{
//这里的代码始终都会被执行
}
// 其它代码
}
a) catch异常处理块可以不是必须的,可以省略如: try{ ….. } finally{ …… }
三、 try、catch、finally、throw、throws
a) try代码块用以包含可能出现异常的代码。
b) catch块捕获try代码块中产生的异常。
c) finally块跟在catch或try之后用于确保无论是否发生异常都需执行的代码。
d) throw用在方法或构造函数里,用于手动(编码)引发一个异常。如:
public void method(){
throw new IllegalArgumentException(“参数不合法”);
}
e) thows用在方法或构造函数的定义上,说明方法或构造函数会产生哪些异常,多个异常用逗号分隔。如下指示方法method可产生算术异常和非法参数异常:
public void method(…) throws ArithmeticException, IllegalArgumentException {
//方法声明已经可抛出两个异常,那么方法体内产生这两个异常的代码就可以不需要try-catch处理。
}
四、 java.lang.Exception是所有异常的父类
五、 Throwable 类具有两个子类,它们是:
a) Exception异常、例外:合理的用户程序应当捕获处理的异常情况。
b) Error错误:用于指示合理的应用程序不应该试图捕获的严重问题。如JVM进程内部错误、系统级的错误,这些不是合理的应用程序应处理的。
六、 常见异常类:
七、 多重catch块:
如果出现多重catch块时,catch块的先后顺序有规定,异常的子类(越具体的异常)放在最前面的catch块来处理,异常的父类放在最后面处理,Exception放在最后面处理。
八、 异常的分类:
a) 检查异常
(受控异常):这类异常一定要在代码里必须用try-[catch]-[finally]来处理
。Exceptionn属于检查型异常。
b) 非检查异常
(即运行时异常也叫不受控异常,RuntimeException或RuntimeException的子类都属于这类异常,如被0除、NullPointerExceptiont,数组下标越界等操作就会出现这类异常,这类异常JVM会自动处理不强制的要求在用户代码里用try-catch处理)。常见的运行时异常有如下:
九、 throw
关键字:
a) 用在方法体内或者是构造函数内手动向外(调用方)抛出一个异常。
b) 语法:
throw new 异常类(); 或throw ex; //ex为异常对象
十、 throws
关键字:
a) 在声明方法或者构造函数头时声明可以抛出哪些类型的异常。
b) 语法:
public void method() throws 异常类型1, 异常类型2…n { }
十一、 自定义异常:
a) 异常是类(可把它看成一种特殊的类),所可用异常表示一种业务问题的类型,那么自定义异常可以更加明确具体的知道应用出现了何种问题,使开发人员更容易的定位应用程序产生问题的具体原因和位置。
b) 语法:
public class MyException extends Exception{
//构造函数
//重写父类的方法
}