异常

abstract

Java异常(Throwable)有两个子类Error和Exception.

Error主要是机器或环境异常。如虚拟机异常、内存溢出、线程死锁。

Exception主要是指项目运行过程中可能出现的异常。运行时异常(RuntimeException)、IO异常、SQL异常等。

Error

表示代码运行时 JVM(Java 虚拟机)出现的问题。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

Exception

异常主要分为运行时异常和非运行时异常。

运行时异常:RuntimeException及其子类属于运行时异常,指在程序运行过程中,因为逻辑问题而产生的异常,像空指针异常、数组下标越界等等。这些异常都是在编译阶段无法检查的,所以也成为非检查异常。

非运行时异常:除了RuntimeException及其子类称为非运行时异常,对于程序而言是必须处理的异常,不处理,可能编译就不会通过。对于这些异常是必须捕获处理或者抛出的异常。

捕获处理异常try-catch-finally

关于try-catch-finally的几个关键点

  1. try必须存在,catch可以是〇个或多个,finally只能是〇个或一个。
  2. 使用finally后,无论是否有异常,finally块都会运行,常用来关闭流。
  3. 如果try或catch块中有return,虽然执行完他们之后还会执行finally,但是他们要return的东西是已经定好了,finally中修改不生效。(查看字节码文件可知要return的表达式结果已用新变量承接)⭐
  4. finally中有return的话try-catch中的return会被截胡。

抛出异常

类使用Throws关键字指定要抛给谁来处理异常。

Q&A

Q:如何判断什么时候捕获异常,什么时候抛出异常?

A:知道如何处理的异常,就捕获处理。不知道如果和处理的就抛出。