当程序在运行过程中出现了异常,JVM自动创建一个该类型的异常对象。同时把这个异常对象交给运行时系统。(抛出异常)
受查异常:(一定要补获或抛出,否则编译不通过)
这类异常是由一些外部的偶然因素所引起的。Java编译器强制要求处理。也就是说,程序必须进行对这类异常进行处理。
- FileNotFoundException 读取的文件找不到
- IOException
- SQLException
非受查异常:(也叫运行时异常,不进行处理也不会报错)
也叫非受检异常(unchecked exception).这类异常是编程人员的逻辑问题。应该承担责任。Java编译器不进行强制要求处理。 也就是说,这类异常在程序中,可以进行处理,也可以不处理。
- NullPointerException 空指针异常
- ClassCastException 类型转换异常
- IndexOutOfBoundsException 索引超出边界的异常
- ArrayStoreException (数据存储异常,操作数组时类型不一致)
- BufferOverflowException (IO操作时出现的缓冲区上溢异常)
- InputMismatchException (输入类型不匹配异常)
- ArithmeticException (算术异常)
注意:try后面可以加(),()中可以声明属性,这样在catch中也可以用的到,在括号中声明的属性最终会被自动回收
FileInputStream fs = null;
try{
fs = new FileInputStream("");
}catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try(在此声明的属性最终都会被自动回收,因此不需要自己关闭fs){}
try( FileInputStream fs = new FileInputStream("");){
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException i){
}
自定义异常
自定义的异常若一定要被处理,则继承Exception;如果无所谓被不被处理,则继承RunTimeException。