Java异常

62 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情

Java的异常分为Exception 和 Error,他们都是java.lang包的Throwable类的子类。

  • Exception 程序本身可以处理的异常
  • Error 程序无法处理的错误 如Java 虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等 。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。不能被catch到。

Exception

Exception又分为

  • Checked Exception 受检查异常,没有catch 和 throws 关键字处理,就没办法通过编译
  • Unchecked Excpetion 不处理也能通过编译

Checked Exception

除了RuntimeException及其子类以外,其他的Exception类及其子类都属于受检查异常 。常见的受检查异常有: IO 相关的异常、ClassNotFoundException、SQLException...。

  • IOException:输入输出流异常
  • FileNotFoundException:文件找不到的异常
  • ClassNotFoundException:类找不到的异常
  • DataFormatException:数据格式化异常
  • NoSuchFieldException:没有匹配的属性异常
  • NoSuchMethodException:没有匹配的方法异常
  • SQLException:数据库操作异常
  • TimeoutException:执行超时异常

Unchecked Exception

RuntimeException 及其子类都统称为非受检查异常,常见的有(建议记下来,日常开发中会经常用到):

  • NullPointerException(空指针错误)
  • IllegalArgumentException(参数错误比如方法入参类型错误)
  • NumberFormatException(字符串转换为数字格式错误,IllegalArgumentException的子类)
  • ArrayIndexOutOfBoundsException(数组越界错误)
  • ClassCastException(类型转换错误)
  • ArithmeticException(算术错误)
  • SecurityException (安全错误比如权限不够)
  • UnsupportedOperationException(不支持的操作错误比如重复创建同一用户)

Throwable的常用方法?

  • getMessage() 异常发生的简要描述
  • toString()异常发生时的详细信息
  • getLocalizedMessage()异常对象的本地化信息,如果子类没有重写,与getMessage()方法返回相同
  • printStackTrace() 打印异常信息

Try catch finally的使用

  • try 捕获异常,后面可以跟0个或1个或多个catch,0个catch则必须有finally
  • catch 处理捕获的异常
  • finally 无论是否异常都会执行

需要注意的是,如果try中有return语句,则会等到finally执行完才return,如果两者都有return,try的return 会被忽视。

finally不被执行的两种情况:

  • 线程死亡
  • CPU不工作