001.什么是异常
- 异常本质上是程序上的错误;
- 错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误;
002.异常的分类:
Throwable的两个重要子类:Error(错误)和Exception(异常)
- Error:是程序无法处理的错误,这些错误是不可查的;
- Exception:是程序本身可以处理的异常;
- 包括:检查性异常(checked exception)和非检查性异常(unchecked exception)
- 非检查性异常:Java编译器不会检查这些异常,编译正常通过(发生在程序运行时)
- 包含RuntimeException类及其子类异常;
- 如:NullPointerException(空指针异常)、下标越界异常(IndexOutOfBoundsException)
- 检查性异常:Java编译器提示必须处理的异常,否则编译不会通过(发生在编译时)
- 如:IOException、SQLException
003.异常处理
异常处理机制为:抛出异常、捕获异常
5个关键字:try、catch、finally、throw、throws
//try-catch-finally
public void method(){
try{
//代码段1
//产生异常的代码段2
}catch(异常类型 ex){
//对异常进行处理的代码段3
}finally{
//代码段4
}
}
//try-catch捕获并处理异常(有异常:执行1-2-3)
public void method(){
try{
//代码段1
}catch(异常类型 ex){
//对异常进行处理的代码段2(针对代码段1处理)
}
//代码段3
}
//try-catch捕获并处理异常(无异常:执行1-3)
public void method(){
try{
//代码段1
}catch(异常类型 ex){
//对异常进行处理的代码段2
}
//代码段3
}
//try-finally
public void method(){
try{
//代码段1
}finally{
//代码段2
}
//代码段3
}
- 注意点:
- try发生异常,产生异常对象,但catch异常类型不匹配,则导致程序中断运行;
- 多重catch块:
- 一旦某个catch捕获到匹配的异常类型,将进入异常处理代码。一经处理结束,则整个try-catch语句结束;
- 尽量将捕获的底层异常类的catch子句放在前面,而尽量将捕获相对高层的异常类的catch子句的后面;
004.例图
005.常见的异常类型
006.Throw和Throws
- throws声明将要抛出何种类型的异常,而throw将产生的异常抛出;
//throws 在方法声明出用throws子句来声明抛出异常,让该方法的调用者来处理;
public void method() throws Exception1,Exception2,...,ExceptionN{
//可能产生异常的代码
}
//throw抛出一个异常
throw new IOException();
007.自定义异常
略
008.异常链
略