异常处理
异常
Java程序运行过程中所发生的异常事件可分为两类:
错误(Error):JVM系统内部错误、资源耗尽等严重情况(无法补救,只能修改代码)
异常(Exception): 其它因编程错误或偶然的外在因素导致的一般性问题,
例如:
- 对负数开平方根
- 空指针访问
- 试图读取不存在的文件
- 网络连接中断
所有异常的父类Exception
常见异常
v RuntimeException运行时异常
在运行期间有可能发生异常 也可能不会发生异常,
那么我们可以捕获,我们也可以不捕获;这种异常叫做《非检查异常》
1.程序在运行过程中如果出现了异常,你也进行了异常捕获 那么此程序可以顺利执行完成,而不会异常终止
2.如果已经捕获异常,就可以对出现异常的代码进行补救or处理
- ArithmeticException:数学计算异常
- NullPointerException:空指针异常
- NegativeArraySizeException:负数组长度异常
- ArrayOutOfBoundsException:数组索引越界异常
- ClassNotFoundException:类文件未找到异常
- ClassCastException:造型异常
例 public class ExceptionTest { public static void main(String[] args) { String s=null; try {//异常捕获 Object o=new String(); String str1=(String) o; String str=(String) new Object();//造型 System.out.println(args[1000]); System.out.println(s.length()); } catch (NullPointerException e) {//异常处理 空指针异常 System.out.println("使用null对象出现异常,请检查你的代码!"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组下标越界!"); } catch (ClassCastException e) {//造型(类型转换)异常 System.out.println("类型转换异常"); e.printStackTrace();//打印异常 } System.out.println("程序执行完成!"); } }
e.printStackTrace();//打印异常
v IOExceptionIO流异常
- FileNotFoundException:文件未找到异常
- EOFException:读写文件尾异常
- MalformedURLException:URL格式错误异常
- SocketException:Socket异常
Java异常处理机制
v Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
v 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
v 如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
v 程序员通常只能处理违例(Exception),而对错误(Error)无能为力。
异常处理的try-catch-finally语句
try{
// 可能会抛出特定异常的代码段
}catch(MyExceptionType myException){
// 如果myException 被抛出,则执行这段代码
}catch(Exception otherException){
//如果另外的异常otherException被抛出,则执行这段代码
} [finally{
//无条件执行的语句
}]
v try—将可能出现异常的代码都放在try代码块中,当然,也可以将其他的一些不会引起异常的代码也一并放到try代码块中
v catch 从句中引入一个可能出现的异常,一个try块可以和多个catch块配合以处理多个异常
v 当try块内的任何代码抛出了由catch 子句指定的异常,则try代码端中的程序将会终止执行,并跳到相应的catch代码块中来执行
v 无论是否出现异常,程序最后都会执行finally代码块中的内容
抛出异常
v 在定义一个方法的时候,如果并不能确定如何处理其中可能出现的异常,可以不在方法中对异常进行处理,而是将可能发生的异常让这个方法的调用者来处理
v 可以对下列情形在方法定义中抛出异常:
- 方法中调用了一个会抛出“已检查异常”的方法
- 程序运行过程中发生了错误,并且用throw子句抛出了一个“已检查异常”
v 不要抛出如下异常:
- 从Error中派生的那些异常
- 从RuntimeException中派生的那些异常,如NullPointerException等
除了RuntimeException异常和它的子异常都是检查检查异常
以外的异常都是检查异常 是必须捕获的or必须处理的;
检查异常:必须要对它进行捕获or处理,如果不去捕获也不处理,将会报错



浙公网安备 33010602011771号