异常

  • 异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序的运行
  • 如果异常出现了,没有得到相应的处理的话,程序就会被中断,不会继续往下执行了

异常的处理

  • try–用来监测可能出现异常的代码块【把你认为可能出现异常的代码段放入try{}语句块里】
  • catch–用来捕获发生的异常,如果异常类型相匹配则进入catch{}块进行相应的处理,如果异常类型不匹配,则不进入catch{}块处理,此时程序会中断。

注意:只要异常没有得到相应的匹配处理,则程序会中断,反之,程序继续运行

异常处理的3种情况

  • 程序正常运行,此时没有异常,不进入catch{}块处理,而是会继续catch{}块后面的代码
  • 程序出现了异常,并且异常的类型和catch()中定义的类型相匹配,则进入catch{}进行相应的处理,处理完了,继续后面代码的运行
  • 程序出现了异常,但是异常的类型和catch()中定义的类型不匹配,此时程序不进入catch{}块处理,相当于,异常没有得到处理,程序会中断,不会继续往后执行

常用的显示方法

  • System.err.println(“”); 放在异常处理块中用来打印自定义的信息
  • printStackTrace() 打印异常处理的堆栈信息
  • getMessage() 获取异常描述的字符串信息,若没有则返回null

常见的异常类型

  • ArrayIndexOutOfBoundsException 数组越界的异常
  • ClassNotFoundException 无法加载指定的类
  • ArithmeticException 算术出错异常 【除数为0了】
  • NullPointerException 空指针异常
  • IllegalArgumentException 方法接收到非法的参数
  • ClassCastException 对象强制类型转换出错
  • NumberFormatException 数字格式转换异常,如把”abc”转换成数字

finally块的作用

  • 它放在catch{}块之后,无论是否出现异常,finally块中的代码都会被执行,唯一不执行的情况就是在finally块之前出现了System.exit(1)的系统退出语句。

注意:如果在catch{}块中出现了return 语句,程序会先执行完return语句之前的语句,再执行finally块中的语句,跑完finally块再回到return语句。所以在catch{}块加入return语句,对finally块的执行没有影响

多重catch块的排列

  • 排列的时候,异常类型一定是先子类再父类
  • 运行时只要匹配到一个catch()块里的异常,则其他的catch{}里的代码就不会被执行了

注意:Exception类是其他异常类的父类

throws关键字

  • 声明某个方法可能抛出的异常,多个异常之间用逗号隔开
  • throws关键字用在方法声明的地方,并且抛出的是异常的类型
  • 注意声明的位置!!!方法的()后面{}前面

语法:

public static void test4() throws FileNotFoundException,IOException{

}

throw关键字

  • 用在方法中的代码块中,自定义异常对象并抛出
  • throw 抛出的是一个异常对象,且每次只能抛出一个,而throws抛出的是异常的类型,可以抛出多个异常类型,之间用逗号隔开

异常的分类

  • 运行时异常—不要求程序必须做出处理,它是在程序运行的时候才会发生
  • checked异常[检查时异常]—要求程序必须做出处理,在代码编写的阶段就要处理,否则编译不过。处理的方式有2种,要么自己处理,要么使用throws关键字声明方法往外抛

自定义的异常

语法格式:

throw new Exception("自定义异常的内容");