异常

什么是异常

  • 异常是程序在“编译”或“执行”的过程中可能出现的问题,注意:语法错误不算在异常体系中
  • 比如:数组索引越界、空指针异常、日期格式化异常,等等

为什么要学习异常?

  • 异常一旦出现,如果没有提前处理,程序就会退出jvm虚拟机而终止
  • 研究异常并且避免异常,然后提前处理异常,体现的是程序的安全,健壮性

异常体系

Error

  • 系统级别问题、JVM退出等,代码无法控制
    Exception:java.lang包下,称为异常类,他表示程序本身可以处理的问题
  • RuntimeException及其子类:运行时异常,编译阶段不会报错。(空指针异常、索引越界异常)
  • 除RuntimeException之外的所有异常:编译时异常,编译器必须处理的,否则程序不能通过编译。(日期格式化异常)

编译时异常的处理形式有三种:

  • 编译时直接跑出去给调用者,调用者也继续抛出去
  • 出现异常捕获处理
  • 前两者结合,出现异常直接抛出给调用者,调用者捕获异常

异常处理方式1 —-throws

  • throws:用在方法上,可以将方法内部出现的异常跑出去给本方法的调用者
  • 这种方法并不好,发生异常的方法自己不处理异常,如果异常最终抛出去给虚拟机将引起程序死亡
    抛出异常格式

    规范做法

异常处理方法2 —-try…catch…

  • 监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理
  • 这种方式还可以,发生异常的方法自己独立完成异常的处理,程序可以继续往下执行

异常处理方式3 —-前两者结合

  • 方法直接将异常通过throws抛出去给调用者
  • 调用者收到异常后直接捕获处理