Java中的异常

Java中的异常

1. 异常机制

当程序出现错误时,程序执行的流程发生改变,程序的控制权转移给异常控制器。

常见的程序错误包括以下三种:

​ (1)编译时错误:因为语法有误,编译程序能够发现并提示我们错误的位置和原因

​ (2)运行时错误:运行时产生了不能执行的操作

​ (3)逻辑错误:程序没有按照预期的逻辑顺序执行

2.异常的结构

在Java中,所有的异常的祖先是Throwable(可抛出)。它有两个重要的子类:Exception和Error,且各自都包含大量子类。异常和错误的区别就是:异常能被程序本身处理,错误是无法处理的。

Error(错误):是程序中无法处理的错误,表示运行应用程序中较严重的问题。通常错误与代码编写者的操作执行无关,而是代码在jvm中运行时出现的问题,比如oom,StackOverflowError(栈溢出错误)虚拟机运行错误。这些异常发生时,jvm通常会选择线程终止,这些错误是不可查的,它们在应用程序的控制和处理能力之外,绝大多数是程序运行时不允许出现的情况。

Exception(异常):是程序本身可以处理的异常,Exception本身有个重要子类叫RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常NullPointerException、ArithmeticException和ArrayIndexOutOfBoundException。

​ Exception可以分为两大类,运行时异常非运行时异常

  1. 运行时异常:都是RuntimeException的子类,常见的包括空指针异常NullPointerException,下标越界异常IndexOutOfBoundsException,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。通常是由程序逻辑错误引起的,这类异常的特点是运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
  2. 非运行时异常(编译异常):程序语法上必须进行处理的异常,不处理程序编译就会不通过,是RuntimeException以外的异常,如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

3.异常处理机制

Java应用程序中,异常处理机制为:抛出异常,捕获异常

Java常见的异常关键字

「try」 – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
「catch」 – 用于捕获异常。catch用来捕获try语句块中发生的异常。
「finally」 – finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
「throw」 – 用于抛出异常。
「throws」 – 用在方法签名中,用于声明该方法可能抛出的异常

抛出异常:当一个方法出现错误引发异常时,throw关键字作用是在方法内部抛出一个Throwable类型的异常。任何Java代码都可以通过throw语句抛出异常。

异常的捕获有四种方式:

  1. try-catch
  2. try-catch-finally
  3. try-finally
  4. try-with-resource

Java中的异常
http://owoah.com/2023/04/08/Java中的异常/
作者
owoah
发布于
2023年4月8日
许可协议