error/exception/runtime exception区别

时间:2020-12-30 02:04:01

(1)java中的异常是什么?

  异常指的是程序运行过程中出现的非正常情况或错误,当程序违反了语义规则时,jvm就会将出现的错误表示为一个异常抛出。在java中,一切皆对象,异常也是,它被当作一个对象,可以在try块中进行捕获,使用catch进行处理,对于任何情况都要执行的代码,放在finally代码块中。

  上面提到的语义规则有两大类,一个是javaAPI中定义好的,还有一种是自定义的(所有异常类都必须是Trowable的子类)。

(2)java中异常有哪几种类型

  1. 首先异常类的父类是Throwable。
  2. Throwable类有两大子类:Error,Exception
  3. Error:错误
    1. 程序在运行过程中发生了非常严重的错误,并且该错误是不可恢复的。
    2. 由于类错误是jvm层的错误,因此,此种错误会导致程序的终止运行
    3. 编译器不会检查程序中是否有错误
  4. Exception:异常
    1. 异常是可恢复的
    2. Exception可以分为CheckedException和RuntimeException
    3. checkedException(检查异常):
      1. 最常见的就是IO异常,和sql异常。这种异常通常发生的编译阶段
      2. 编译器会强制要求程序员去捕获此类异常
      3. 异常的发生不会导致程序出错
      4. 对异常处理之后程序还能继续运行
      5. 程序依赖于不可靠的外部条件
    4. RuntImeException(运行时异常):
      1. 程序在运行的时候发生的异常
      2. 编译器没有去强制对其进行捕获并处理
      3. 如果不对这类异常进行处理,jvm将会对其处理。例:空指针异常
      4. 出现运行时异常,系统会将异常向上抛出,知道遇到处理代码为止。
      5. 如果没有就跑到最上层(main/run),抛出之后,程序也就退出了

(3)finally中的代码什么时候执行?

  1. 不管try中是否发生异常,finally都会执行(以下几种情况除外) 
  2. try-finally,try-catch-finally代码中的return语句优先级高于代码块外面的,也就是try-finally,try-catch-finally代码块中的return将覆盖其他的return语句

(4)finally中的代码什么情况不会被执行?

  1. finally对应的try-catch-finally之前有运行时异常未被处理
  2. finally之前强制退出程序(System.exit(0))
  3. finally之前调用return结束函数的运行