解析:
Java异常机制定义了Throwable类,其中Exception类和Error类均是其子类。
(1)Error类表示Java运行时环境出现的错误,是程序无法处理的错误,表示运行应用程序中较严重的问题,大多数与代码编写者的操作无关,而表示代码运行时JVM出现的问题,例如:OutOfMemoryError表示虚拟机无法为对象分配足够的空间;StackOverflowError表示虚拟机无法分配足够的栈内存,当程序无限制使用递归,会抛出该错误。
(2)Exception类表示程序本身可以处理的异常。Java异常可以分为可检测异常和非检测异常。
不可检测异常(Unchecked Exception或Runtime Exception):编译器不要求强制处理的异常,也称为运行时异常,都是RuntimeException类及其子类,例如:NullPointerException表示空指针异常,若对象为空,但调用其属性或方法,会抛出该异常;ArithmeticException表示计算异常,若在除法中,除数为0,会抛出该错误;ArrayIndexOutOfBoundsException表示数组下标越界异常,若数组下标超出数组范围,会抛出该异常;ClassCastException表示类型转换异常,若进行强制类型转换时,类型不同,会抛出该异常。
可检测异常(Checked Exception):编译器要求必须处理的异常,即在eclipse开发过程中,就必须处理的异常。例如:ClassNotFoundException表示通过类名称去加载类时,若找不到该类就会抛出异常。
处理:
异常的处理方式有两种,分别是捕获异常,声明异常。
(1)捕获异常------通过try-catch-finally语句
上面过程的详细解析:
try:
try语句指定了一段代码,该段代码就是异常捕获并处理的返回。在执行过程中,当任意一条语句产生异常时,就会跳过该条语句中后面的代码。代码中可能会产生并抛出一种或多种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。
注意:一个try语句必须带有至少一个catch语句块或一个finally语句块,当异常处理的代码执行结束以后,不会回到try语句中执行尚未执行的代码。
catch:
每个try语句可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
常用方法如下(继承自Throwable类):printStackTrace()方法用来跟踪异常事件发生时堆栈的内容
注意:多个catch中,异常类之间有继承关系时,在顺序安排上应注意,子类放在前面,父类放在后面,即先捕获子类异常再捕获父类异常。
finally:
不管是否发生异常,都必须要执行。通常finally中关闭程序块已打开的资源,例如关闭文件流,释放数据库连接等。
(2)声明异常---通过throws语句
程序中的方法可能会因某些错误而引发异常,但不希望在这个方法中处理这些异常,而希望调用它的方法来统一处理,这个时候可以使用throws关键字来声明这个方法将会抛出异常,而该方法的任何调用者必须遵守处理(立即处理)或声明规则(继续抛出)。最后抛出至main方法,main方法也可以使用throws关键字声明抛出异常,交由JVM来处理。
总结:
异常类型:一张图
异常处理:处理(try-catch-finally)or不处理(throws)