Java_总结十一(异常处理)
一、异常分类
--错误(Error):JVM系统内部错误或资源耗尽等严重情况,属于JVM需要负担的责任.
这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。程序(员)对其不做处理.
--异常(Exception):其它因编程错误或偶然的外在因素导致的一般性问题。
二、异常分类图
三、从处理的必要性角度分
--非受检(unchecked)异常:编译器不要求必须处理的异常。
--一般是指编程时的逻辑错误。是程序员应该积极避免其出现的异常
--java.lang.RuntimeException及它的子类都是非受检异常:
--错误的类型转换:java.lang.ClassCastException
--数组下标越界:java.lang.ArrayIndexOutOfBoundsException
--空指针访问:java.lang.NullPointerException
--算术异常(除0溢出):java.lang.ArithmeticException
--受检(checked)异常:编译器要求必须处理的异常。指的是程序在运行时由于外界因素造成的一般性异常。
--没有找到指定名称的类:java.lang.ClassNotFoundException
--访问不存在的文件:java.io.FileNotFoundException
--操作文件时发生的异常:java.io.IOException
--操作数据库时发生的异常:java.sql.SQLException
public class TestException2{ public int calculate(int num1, int num2) { int result = num1 / num2; return result; } public static void main(String[] args){ TestException2 test = new TestException2(); try{ int i = test.calculate(100, 10);//尝试除以0 System.out.println(i); }catch(Exception e){//注意catch语句的顺序 System.out.println("父类异常.."); }catch(ArithmeticException e){ // 错误–不能到达的代码 System.out.println("出异常啦"); e.printStackTrace(); }finally{ System.out.println("finally语句块是始终要执行的"); } } }
四、finally 语句
--finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。
--无论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。
--通常在finally语句块中可以进行资源的清理工作,如:
--关闭打开的文件
--删除临时文件
--关闭数据库的连接等
--finally语句是可选的。
五、自定义异常
继承自Exception 或其子类。通常调用一下父类的构造方法
public class MyException extends Exception { public MyException() { super(); } public MyException(String msg) { super(msg); } public MyException(Throwable cause) { super(cause); } public MyException(String msg, Throwable cause) { super(msg, cause); } }
使用自定义异常
public String[] createArray(int length) throws MyException { if (length < 0) { throw new MyException("数组长度小于0,不合法"); } return new String[length]; }