异常(Exception)
异常指程序运行过程中出现的非正常现象
Java是采用面向对象的方式来处理异常的。处理过程:
1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
2. 捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
Java异常分类
Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception。
Error表明系统JVM已经处于不可恢复的崩溃状态中。不需要管它。
Exception是程序本身能够处理的异常
RuntimeException的异常
这类异常通常是由编程错误导致的
比如:NullPointerException异常(空指针异常),ClassCastException异常(类型转换异常),ArrayIndexOutOfBoundsException异常(下标越界异常),数字格式异常(NumberFormatException)
解决空指针异常,通常是增加非空判断
Checked Exception
已检查异常。这类异常在编译时就必须做出处理,否则无法通过编译。异常的处理方式有两种:使用 “try/catch” 捕获异常、使用”throws”声明异常。如NoSuchMethodException、IOException、FileNotFoundException
捕获异常:
通过3个关键词来实现的:try-catch-finally。用try来执行一段程序,如果出现异常,系统抛出一个异常,可以通过它的类型来捕捉(catch)并处理它,最后一步是通过finally语句为异常处理提供一个统一的出口,finally所指定的代码都要被执行(catch语句可有多条;finally语句最多只能有一条,根据自己的需要可有可无)。
public class TextTryCatch {
public static void main(String[] args) {
FileReader reader = null;
try {
reader = new FileReader("d:\\新建文件夹\\removebg.rar"); //不存在文件夹 抛出异常 到catch
System.out.println("1");
char c1 = (char) reader.read();
System.out.println(c1);
} catch (FileNotFoundException e) {//字类异常在父类前面
System.out.println("2");
e.printStackTrace(); //打印相关错误信息
} catch (IOException e) {
e.printStackTrace();
}finally {
System.out.println("3");
try {
if (reader != null) {
reader.close(); //关闭异常
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
结果图:
声明异常(throws子句)
当CheckedException产生时,不一定立刻处理它,可以再把异常throws出去。