0%

Java 异常(一):初识异常

1. 发生异常的原因

  • 不可控的内部原因,比如内存不够了、磁盘满了
  • 不可控的外部原因,比如网络连接出现问题
  • 更多的是程序编写错误,比如空指针异常等

2. 怎样理解异常这个概念

  • 这些非正常情况在 Java 中统一被认为是异常,Java 使用异常机制来统一处理
  • 异常是相对于 return 的一种退出机制,可以由系统触发,也可以由程序通过 throw 语句触发
  • 异常可以通过 try/catch 语句进行捕获并处理。如果没有捕获,则会触发默认处理机制,即输出异常栈信息并退出程序。异常有不同的类型

3. 发生空指针异常时,具体发生了什么

  • JVM 发现对象引用为 null 时,没有办法继续执行了,这时就启用异常处理机制,首先创建一个异常对象,这里是类 NullPointerException 的对象,然后查找看谁能处理这个异常。如果没有代码可以处理这个异常,那么 Java 会启用默认处理机制,即打印异常栈信息到屏幕,并退出程序
  • 异常栈信息就包括了从异常发生点到最上层调用者的轨迹,还包括行号,可以说,这个栈信息是分析异常最为重要的信息
  • Java 的默认异常处理机制是退出程序,异常发生点后的代码都不会执行

4. throw 关键字的含义

  • throw 的意思是抛出异常,它会触发 Java 的异常处理机制
  • 在比如说空指针异常中,我们没有看到 throw 的代码,可以认为 throw 是由 JVM 自己实现的

5. 对比一下 throw 关键字和 return 关键字

  • return 代表正常退出;throw 代表异常退出
  • return返回位置是确定的,就是上一级调用者;throw 后执行哪行代码则经常是不确定的,由异常处理机制动态确定

6. 异常处理机制的流程

  • 异常处理机制会从当前函数开始查看谁“捕获”了这个异常,当前函数没有就查看上一层,直到主函数。如果主函数也没有,就使用默认机制,即输出异常栈信息并退出
  • “捕获”是指使用 try/catch 关键字,try 后面的花括号 {} 包含可能抛出异常的代码
  • 捕获异常后,程序就不会异常退出了,但 try 语句内异常点之后的其他代码就不会执行了,执行完 catch 内的语句后,程序会继续执行 catch 花括号外的代码
-------------------- 本文结束感谢您的阅读 --------------------