异常类的体系结构如下:
Throwable
|-Error
|-Exception
|-IoExcetion
|-SQLException
|-RuntimeException
*派生与Error与RuntimeException(运行时异常)的异常叫未检查异常,不用程序员处理,直接虚拟机会进行处理,这也就是说程序本身的错误
其他的异常叫做已检查异常,必须由程序员进行处理
常见的异常如下:
类型转化异常 ClassCastException
数组越界异常 ArrayIndexOutOfBoundsException
空指针异常 NullPointerException
以上都是派生与RuntimeException
文件尾读取数据异常 EOFException
打开不存在的文件异常 FileNotFoundException
查找不存在的Class对象异常 ClassNotFoundException
*使用异常的4种情况:
调用一个抛出已检查异常的方法
程序运行过程中发生错误
程序出现错误
JAVA虚拟机和运行库出现内部错误
*throw与throws区别
throw用于抛出异常,throws用于声明异常,即在方法体后注明可能抛出的异常
*try catch字句
*可以捕获多个异常
try{}
catch(e){}
catch(e){}
....
*可以合并异常
try{}
catch(e1 | e2){}
*catch子句可以再次抛出异常
方式:一般把原始异常当作再次抛出异常的原因
代码举例:
... catch(e) { Throwable se = new ServletException("data error"); se.initCause(e); throw se; }
当捕获异常se后,可以利用如下代码获得原始异常
Throwable e = se.getCause();
*finaly子句
当利用try catch抛出异常后,剩余代码不会执行,会停止程序,键入在程序终止之前会申请一些本地资源还未关闭,于是引入了finally子句。
执行时刻:不管抛没抛异常,finally子句一定执行。
*带资源的try语句
使用条件:所使用的资源类实现了一个AutoCloseable接口类,其中有个方法void close() throws Exception,这是JDK7中的特性
形式:代码举例
try(Scanner in = new Scanner(new FileInputStream("/...."))); { while(in.hasNext()) .... }
此中使用形式,确保发生任何情况发生异常都会被关闭