一、java异常的处理与捕获

article/2025/10/30 14:31:24

一、认识异常
在Java中所有的异常(Exception)和错误(Error)都继承了同一个父类Throwable,他们的关系如下:

1.1  Error(错误):
是指程序无法处理的错误,表示运行应用程序时比较严重的问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM(Java 虚拟机)出现的问题。


1.2  异常(Exception):
是指在程序执行时由于程序处理逻辑上的错误而导致程序中断的一种指令流。通俗的说,就是程序员写的代码错误。
两者的区别:错误无法处理,异常可以被程序本身处理。

二、异常的分类

异常体系图

1、Exception分为两大类:

        运行时异常:即程序运行时发生的异常,编译器不强制要求处理的异常。一般是指编译时的逻辑错误,是程序员应该避免出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。对于运行时异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。

        编译时异常:即编程时编译器检查出的异常,是编译器要求必须处置的异常。

2、可以统一使用Exception处理来简化异常处理。

3、处理多个异常时,捕获范围小的异常要放在捕获异常范围大的异常之前处理。

4、常见的运行时异常:

        1) NullPointerException 空指针异常
        2) ArithmeticException 数学运算异常
        3) ArrayIndexOutOfBoundsException 数组下标越界异常
        4) ClassCastException 类型转换异常
        5) NumberFormatException 数字格式不正确异常

5、常见的编译异常:

        1) SQLException 操作数据库时,查询表可能发生异常
        2) IOException 操作文件时发生的异常
        3) FileNotFoundException 当操作一个不存在的文件时,发生异常
        4) ClassNotFoundException 加载类,但是该类不存在时,发生异常
        5) EOFException 操作文件,到文件末尾,发生异常
6) IllegalArguementException 非法参数异常

三、异常的处理

异常处理的方式有两种:

1、try-catch-finally:程序员在代码中捕获发生的异常,然后进行处理。
在Java中,对异常处理有三个核心关键字:try、catch、finally。常用格式如下:

try { //有可能出现异常的语句
} catch (异常类型 对象) {//异常处理 ;
} catch (异常类型 对象) {//异常处理 ;
} finally {//不管有没有出现异常,这里的代码都会执行
}

我们在try语句中捕获可能出现异常的代码。如果出现异常,则跳转到catch语句中找到对应的异常类型进行处理。最后不管有没有异常,都会执行finally中的语句块。注意:finally语句块是可以省略的。如果省略,则在执行完catch语句块之后,程序继续执行后边的代码。

public class Test {public static void main(String[] args) {try {int a = 10 / 0;System.out.println(a);} catch (ArithmeticException e) {System.out.println("处理异常:");e.printStackTrace();}finally {System.out.println("不管有没有异常,我都会执行!");}}
}

执行结果:

处理异常:
不管有没有异常,我都会执行!
java.lang.ArithmeticException: / by zeroat com.zxl.Demo.Test.main(Test.java:10)​

为了能够进行异常的处理,可以使用异常类提供的printStackTrace()方法输出完整的异常信息。

2、throws异常处理:将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM。

        1)如果一个方法(中的语句执行时)可能产生某种异常,但是并不确定如何处理这种异常,则此方法应显式地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理

        2)在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

3、对于编译异常,程序中必须处理,比如try-catch或者throws;

4、对于运行时异常,程序中如果没有处理,默认就是throws的方式处理;

5、子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致, 要么为父类抛出的异常的类型的子类型

6、在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws。

四、异常处理流程

(1)Java中可以处理的异常都是在运行时产生的,当程序运行到产生异常的代码时,会由JVM帮助用户去判断此异常的类型,并自动进行指定类型的异常类对象实例化处理;

(2)如果此时程序中并没有提供异常处理,则会采用JVM默认的异常处理方式进行处理,首先进行异常信息的打印,然后直接退出当前程序;

(3)如果此时程序中存在异常处理,那么这个异常类的实例化对象会被try语句所捕获;

(4)try捕获到异常后将会与和它匹配的catch中的异常类型依次进行比对,如果相同则进行处理;如果不匹配,则继续匹配后续的catch类型;如果都不匹配,那么表示该异常无法处理;

(5)不管异常是否进行处理,最终都会执行finally语句,执行完finally语句后,程序会进一步判断当前的异常是否已经处理,如果处理了,则继续执行后续的代码;如果没有,则交给JVM进行默认处理。

五、throw关键字

在默认情况下,所有的异常类的实例化对象都会由JVM默认实例化并且自动抛出。为了方便用户手动进行异常的抛出,JVM提供了throw关键字。

public static void main(String[] args) {try { //异常对象不再由系统生成的,手动实例化throw new Exception("自己手动抛出的对象...");} catch (Exception e) {e.printStackTrace();}}

执行结果:

java.lang.Exception: 自己手动抛出的对象...at com.zxl.Demo.Test.main(Test.java:10)

六、throws和throw的区别

意义位置后面跟的
throws异常处理的一种方式方法声明处异常类型
throw手动生成异常对象的关键字方法体中异常对象

七、自定义异常

1、当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,此时可以自己设计异常类,用于描述该错误信息。

2、自定义异常类继承自Exception(编译异常)或RuntimeException(运行异常);

3、一般情况下,我们自定义异常是继承 RuntimeException,把自定义异常做成运行时异常,这样做的好处是,我们可以使用默认的处理机制,比较方便。


http://chatgpt.dhexx.cn/article/hbtaFguV.shtml

相关文章

Java异常处理(Java必备知识)

在程序设计和运行的过程中,程序员也是尽可能规避错误,但使程序被迫停止的错误仍然不可避免。Java提供了异常处理机制来帮助程序员检查可能出现的错误,提高了程序的可读性和可维护性。Java中将异常封装到一个类中,出现错误就会抛出…

【2022最新Java面试宝典】—— Java异常面试题(33道含答案)

目录 一、Java异常架构与异常关键字1. Java异常简介2. Java异常架构1.Throwable2. Error(错误)3. Exception(异常)运行时异常编译时异常 3. Java异常关键字 二、Java异常处理1. 声明异常2. 抛出异常3. 捕获异常4. 如何选择异常类型…

java 异常堆栈输出_打印Java异常堆栈信息

背景 在开发Java应用程序的时候,遇到程序抛异常,我们通常会把抛异常时的运行时环境保存下来(写到日志文件或者在控制台中打印出来)。这样方便后续定位问题。 需要记录的运行时环境包含两部分内容:抛异常时的参数信息和函数调用堆栈。针对堆栈信息,如果直接调用Exception的g…

Java 异常的捕获及处理

🍎个人主页:亮点的博客 🍊个人信条:理想如果不向现实做一点点屈服,那么理想也将归于尘土 🍑刷题专栏:【Java】牛客网刷题 🥭刷题网站:牛客网 学习的一种有效途径就是刷题…

java异常分类三大类_Java异常的分类

首先,java的异常分为Error和Exception。这两类都是接口Throwable的子类。Error及Exception及其子类之间的关系,大致可以用下图简述。 注意事项: 1。 Error仅在java的虚拟机中发生,用户无需在程序中捕捉或者抛出Error。 2。 Exception分为一般的Exception和RuntimeException…

JAVA异常分类及处理

程序错误一般分为三种: 编译错误: 编写程序时没有遵循语法规则,编译程序能够自己发现错误并提示位置和原因。运行错误:程序在执行的时候运行环境发现了不能执行的操作。比如,JVM出错了,内存溢出等。逻辑错…

JAVA异常都有哪些

1.异常 一、Error和Exception package org.psmaxwell.exception; //Exception in thread "main" java.lang.StackOverflowError public class Demo01 {public static void main(String[] args) {new Demo01().a();}public void a(){b();}public void b(){a();} }pack…

Java异常类详解

目录 异常简介: 异常体系: 异常的处理: 自定义异常类: 一.异常简介: 1.1 异常定义: 异常是运行程序的过程中产生的异常情况。异常的情况是指程序在运行过程中,可能由于外界条件的变更&…

java异常处理方式

java异常处理方式 java通过面向对象的方式进行异常处理,一旦方法出现异常,系统自动根据该异常对象寻找合适的异常处理器(Exception Handler)来处理异常,把各种不同的异常进行分类,并提供了良好的接口。 j…

Java异常

Java笔记 文章目录 一、简介二、空指针异常三、自定义异常 一、简介 一个健壮的程序必须能够处理各种异常。 我们应该如何处理异常?两种方式: 返回约定错误码,例如200表示成功。在语言层面提供异常处理机制。 必要性说明: 异常需…

java异常体系

java异常体系结构图 一:java异常体系 1.Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。 2.其中异常类Exception又分为运行时异常(RuntimeException)和非运行时…

Java 异常

Java异常 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答3个问题:异常类型…

JAVA异常详解

异常的定义 异常就是有异于常态,和正常情况不一样,有错误出现。在java中,阻止当前方法或作用域的情况,称之为异常。 异常的分类 Error:是程序中无法处理的错误,表示运行应用程序中出现了严重的错误。此类错…

java异常判断_Java异常类

异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错…

2020-11-08

Java:详解Java中的异常(Error与Exception) 置顶 王小二(IT) 2018-06-22 16:54:26 66242 收藏 389 分类专栏: 编程语言(Java基础) 文章标签: try catch finally Error 版权 《Java:详解Java中的异常(Error与Exception)》《Jav…

Java中异常详解

目录 介绍 : 异常体系: 异常的分类 : Java 默认处理异常的方式(报错) : 异常处理方法: try...catch : try...catch...finally: try...catch ....catch.....catch.... 异常对象的常见方法&#xff…

Java中的异常

目录 1. 异常产生的原因和分类 1.1 异常产生的原因 1.2 异常分类 2. 异常的处理 2.1 防御式编程 2.2 异常的抛出(throw) 2.3 异常的捕获 2.3.1 throws异常声明 2.3.2 try-catch捕获异常并处理 2.3.3 finally 3.自定义异常类 Java中的异常&…

Java异常(超详细!)

1、什么是异常,java提供异常处理机制有什么用? 什么是异常:程序执行过程中的不正常情况。异常的作用:增强程序的 健壮性。 eg. public class ExceptionTest01 {public static void main(String[] args) {int a 10;int b 0;//…

最全最详细的Java异常处理机制

一、异常概述与异常体系结构 异常概述 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式&…

论文阅读_Heatmap解释

关节的热力图(Heatmap) 每一个关节点,生成一张热力图heatmap, 热力图的响应值作为关节位置的概率或似然. 热力图中数值越大的位置,响应值越大,表示越有可能是关节的位置. 那么构造heatmap实际上是构造了一个中间状态,这个heatmap有如下的一些优点: **1…