一、定义
在程序开发中,异常指不期而至的各种状况,它是一个事件,当发生在程序运行期间时,会干扰正常的指令流程。
在Java中,通过Throwable及其子类描述各种不同的异常类型。
二、分类
-
Error(异常处理时不考虑)
是指程序无法处理的错误,表示运行应用程序中较严重问题。
这些错误是不可查的,因此他们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况
-
Exception(异常处理类型)
程序本身可以处理的异常。
-
unchecked exception
编译器不要求强制处置的异常,在程序中可以选择捕获处理,也可以选择不处理,照样编译通过
eg:NullPointerException(空指针异常)、
IndexOutOfBoundsException(下标越界异常) -
checked exception
编译器要求必须处置的异常。
eg:IOException、SQLException
-
三、异常处理
异常总是先被抛出,再被捕获
-
抛出异常
• 当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系
统。
• 异常对象中包含了异常类型和异常出现时的程序状态等异常信息。
• 运行时系统负责寻找处置异常的代码并执行。 -
捕捉异常
• 在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器。
• 运行时系统从发生异常的方法开始,依次回查调用栈中的方法,当异
常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合
适的异常处理器。
• 当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统
终止。同时,意味着Java程序的终止
常用关键字
-
try-catch-finally(自己处理)
public void method(){ try { // 可能会产生异常的代码段 } catch ( 异常类型 ex) { // 捕获异常 }finally{ // 无论是否发生异常,总是执行 } }
-
try-catch(自己处理)
public void method(){ try { // 产生异常的代码段 } catch ( 异常类型 ex) { // 对异常进行处理的代码段 } //try-catch执行完后执行 }
-
throws(抛给调用者处理)
-
定义:如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常
-
throws语句用在方法定义时声明该方法要抛出的异常类型
public void method() throws Exception1,Exception2,..,ExceptionN{ // 可能产生异常的代码 }
-
-
throw(抛出异常)
1.throw抛出异常对象的处理方案
-
通过try…catch包含throw语句----自己抛自己处理
public void method(){ try { // 代码段 throw new 异常类型( ); } catch ( 异常类型 ex) { // 对异常进行处理的代码段 } }
-
通过throws在方法声明处向上抛出异常类型----谁调用谁处理
public void method() throws 异常类型{ // 代码段 1 throw new 异常类型( ); }
-
- 注意事项:
-
try可以和finally组合,可以和catch组合,也可以三者一起使用,但try或catch或者finally不能单独使用
所有组合形式:
– try-catch
– try-finally
– try-catch-finally
– try-catch-catch-finally -
try后面可以跟0到多个catch模块
-
多个catch语句的排列顺序:先子类后父类
-
理论来说finally块内的代码无论如何都会执行,除非在catch块中加入(System.exit(1)-----退出java虚拟机)
-
常见的异常类型
异常类型 说明 Exception 异常层次结构的父类 ArithmeticException 算术错误情形,如以零作除数 ArrayIndexOutOfBoundsException 数组下标越界 NullPointerException 尝试访问 null 对象成员 ClassNotFoundException 不能加载所需的类 IllegalArgumentException 方法接收到非法参数 ClassCastException 对象强制类型转换出错 NumberFormatException 数字格式转换异常,如把"abc"转换成数字 -
尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
-
尽量添加finally语句块去释放占用的资源