Java 异常(一):初识异常

1. 发生异常的原因?

答:

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

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

答:

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

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

答:

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

4. throw 关键字的含义?

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

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

答:

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

6. 异常处理机制的流程?

答:

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