异常(Exception)

  1. 异常指程序运行过程中出现的非正常现象

Java是采用面向对象的方式来处理异常的。处理过程:
1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
2. 捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。

Java异常分类

Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception。
image.png

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语句最多只能有一条,根据自己的需要可有可无)。
image.png

  1. public class TextTryCatch {
  2. public static void main(String[] args) {
  3. FileReader reader = null;
  4. try {
  5. reader = new FileReader("d:\\新建文件夹\\removebg.rar"); //不存在文件夹 抛出异常 到catch
  6. System.out.println("1");
  7. char c1 = (char) reader.read();
  8. System.out.println(c1);
  9. } catch (FileNotFoundException e) {//字类异常在父类前面
  10. System.out.println("2");
  11. e.printStackTrace(); //打印相关错误信息
  12. } catch (IOException e) {
  13. e.printStackTrace();
  14. }finally {
  15. System.out.println("3");
  16. try {
  17. if (reader != null) {
  18. reader.close(); //关闭异常
  19. }
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. }
  25. }

结果图:
image.png

声明异常(throws子句)

当CheckedException产生时,不一定立刻处理它,可以再把异常throws出去。