Java 异常的捕获及处理

article/2025/10/30 14:28:43

🍎个人主页:亮点的博客
🍊个人信条:理想如果不向现实做一点点屈服,那么理想也将归于尘土
🍑刷题专栏:【Java】牛客网刷题
🥭刷题网站:牛客网 学习的一种有效途径就是刷题,丰富的做题经验可以加深对知识点的理解,推荐一款刷题网站,赶快点击这里注册学习吧👉你的进阶之路!


前言

在Java中程序的错误主要是语法错误和语义错误。一个程序即使在编译时没有错误信产生,在运行时也有可能出现各种各样的错误导致程序退比,那么这些错误在Java中统一称为异常,在Java中对异常的处理提供了非常方便的操作。


学习内容:

  • 了解异常的产生原理。
  • 掌握异常处理语句的基本格式。
  • 掌握throw和throws关键字的作用。
  • 可以自定义异常。
  • 了解Exception与RuntimeException的区别。
  • 了解断言的作用。


文章目录

  • 前言
  • 1、异常的基本概念
  • 2、throws与throw关键字
    • (1)throws关键字
    • (2)throw关键字
    • (3)范例throw与throws的应用
  • 3、Exception类与RuntimeException类
  • 4、自定义异常类
  • 5、断言


1、异常的基本概念

异常:就是在程序运行过程产生的错误,它会中断正在运行的程序。

Java异常是Java提供的用于处理程序中错误的一种机制。所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)。

设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。

Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给Java运行时系统,这个过程称为抛出(throw)异常

当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常

public class Test {public static void main(String[] args) {String friends [] ={ "Tom","John","Jenni" };for (int i = 0;i < 4;i++){System.out.println(friends[i]);.}}
}

🌻在Java之中如果要进行异常的处理,可以使用:trycatchfinally这几个关键字来完成,其基本的处理结构如下:

try{//可能出现异常的语句
}[catch(异常类型 异常对象){//异常处理
}catch(异常类型 异常对象){//异常处理
}catch(异常类型 异常对象){//异常处理
}.....] [finally {不管异常是否处理都要执行 ;
}]

🌻处理异常

public class Demo{public static void main(String args[]) {System.out.println("【1】*****程序开始执行*****") ; try {System.out.println("【2】数学计算:" +(10 / 0)) ;   } catch (ArithmeticException e) {System.out.println("【c】处理异常:" + e) ;          //处理异常}System.out.println("【3】*****程序执行完毕*****") ;    }     
}

此时可以发现现在即便出现了异常,程序也可以正常执行完毕,所以此时的设计属于一个合理设计。但是有一个问题出现了,此时在进行异常处理的时候直接输出的是一个异常类的对象,那么对于此对象如果直接打印(调用toString())所得到的异常信息并不完整,如果要想获得非常完整的异常信息,则可以使用异常类中提供的printStackTrace()方法完成。

对于异常的处理格式也可以在最后追加有一个finally的程序块,表示异常处理后的出口,不管是否出现异常都执行。

🌻范例:使用finally语句

public class Demo{public static void main(String args[]) {System.out.println("【1】*****程序开始执行*****") ; try {System.out.println("【2】数学计算:" +(10 / 0)) ;   } catch (ArithmeticException e) {e.printStackTrace() ;}finally {System.out.println("【F】不管是否出现异常,我都会执行。") ;}System.out.println("【3】*****程序执行完毕*****") ;    }     
}
此时程序中有异常执行finally,没有异常也执行finally

🌻在整个Java的异常处理中,实际上也是按照面向对象的方式进行处理,处理的步骤如下:
(1)一旦产生异常,则首先会产生一个异常类的实例化对象。
(2)在try语句中对此异常对象进行捕捉。
(3)产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。

2、throws与throw关键字

(1)throws关键字

在定义一个方法时可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理。

🌻throws使用格式如下:

public 返回值类型 方法名称(参数列表···)throws 异常类{ }

🌻范例:使用throws关键字处理异常

class Math {public int div (int i,int j ) throws Exception { //方法可以不处理异常int temp=i/j;return temp;}
}
public class ThrowsDemo{public static void main(String[] args){Math m=new Math();try{     //因为有throws,不管是否有异常,都必须处理System.out.println("除法操作:"+m.div(10,2));}catch(Exception e){e.printStackTrace();} }
}

🌻运行结果:

除法操作:5

主方法也可以使用throws关键字,但是主方法是程序的起点,所以此时主方法再向上抛异常,则只能将异常抛给JVM进行处理。

class Math {public int div (int i,int j ) throws Exception { //方法可以不处理异常int temp=i/j;return temp;}
}
public class ThrowsDemo2{//本方法中的所有异常都可以不使用try catch处理的public static void main(String[] args) throws Exception {Math m=new Math();System.out.println("除法操作:"+m.div(10,2));}
}

🌻运行结果:

除法操作:5

(2)throw关键字

与throws不同的是,可以直接使用throw抛出一个异常,抛出时直接抛出异常类的实例化对象即可。

🌻范例:

public class ThrowDemo{ public static void main (String[] args){try{throw new Exception"自己抛出的异常!"}catch(Exception e) {System.out.println(e)}
}

异常产生时肯定会由系统产生一个异常类的实例化对象,只是此时异常类的实例化对象是手工产生的。

(3)范例throw与throws的应用

try···catch···finally、throw、throws联合使用

🌻范例:

class Math{public int div(int i,int j) throws Exception{System.out.println("计算开始。");int temp=0;try{temp=i/j;}catch(Exception e){throws e;}finally{System.out.println("计算结束。");}return temp;}
}
public class ThrowDemo2{public static void main(String[] args){Math m=new Math();try{System.out.println("除法操作:"+m.div(10,2));}catch(Exception e){System.out.println("异常产生:"+e);}}
}     

🌻运行结果:

计算开始。
计算结束。
异常产生:Dava.lang.ArithmeticException: / by zero

具体执行流程图:
在这里插入图片描述

3、Exception类与RuntimeException类

对于这个将字符串变为int类型的代码:int temp=Integer.parseInt(str);

Integer因为开头首字母大写,所以肯定是一个类,而parseInt()方法可以直接由类名称调用,所以此方法肯定是一个静态方法,此方法定义如下:

public static int parseInt (String s) throws NumberFormatException;

观察NumberFormatException类的继承关系:
在这里插入图片描述

🌻NumberFormatException属于RuntimeException的子类,那么这时就可以清楚地知道以下概念:

  • Exception在程序中必须使用try···catch进行处理。
  • RuntimeException可以不使用try···catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。

4、自定义异常类

在Java中已经提供了大量的异常类,但是这些异常类有时也很难满足开发者的要求,所以用户可以根据自己的需要定义自己的异常类。定义异常类只需要继承Exception类即可。

🌻范例:

class MyException extends Exception{// 自定义异常类public MyException(String msg){super(msg);}
}
public class Demo{public static void main(String[] args){try{throws new MyException("自定义异常。");//抛出异常}catch(Exception e){//异常处理System.out.println(e);}}
}   

🌻运行结果:

MyException:自定义异常。

5、断言

在JDK 1.4之后,Java中增加了断言的功能。断言就是肯定某一个结果的返回值是正确的,如果最终此结果的返回值是错误的,则通过断言检查肯定会提示错误信息。

🌻断言的定义格式如下:

assert boolean 表达式;
assert boolean 表达式:详细的信息

如果以上boolean表达式的结果为frue,则什么错误信息都不会提示;如果为false,则会提示错误信息;如果没有声明详细信的描述,则系统会使用默认的错误信息提示方式。

🌻范例:

public class Demo{public static void main(String[] args){int x[]={1,2,3};assert x.length==0;//此处使用断言,结果为false}
}

此处的断言结果是错误的,但此时运行程序并不会得到任何的结果,这是因为Java在设计此关键字时,考虑到了系统的应用,为了防止某些用户使用assert作为关键字,所以在程序正常运行时断言并不会起任何的作用.

如果要想让断言起作用,则在使用Java运行时应该加入参数:—enableassertions 也可以简写为-ea

🌻运行程序格式如下:

编译程序:javac Demo.java
验证程序:java -ea Test

🌻程序运行时出现以下错误:

Exception in thread “main” Java. lang.AssertionError at Test.main(Demo.java:4)

注意断言的使用:

(1)虽然断言返回的是boolean值,但是并不能将其作为条件判断语句。
(2)断言虽然有检查运行结果的功能,但是一般在开发中并不提倡使用断言。


和我一起来刷题学习吧!传送门👉牛客网-求职|面试|学习


看到最后,点个赞吧!

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

相关文章

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

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

JAVA异常分类及处理

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

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异常类详解

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

java异常处理方式

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

Java异常

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

java异常体系

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

Java 异常

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

JAVA异常详解

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

java异常判断_Java异常类

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

2020-11-08

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

Java中异常详解

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

Java中的异常

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

Java异常(超详细!)

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

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

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

论文阅读_Heatmap解释

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

R绘图|heatmap

# 1.设置工作目录及调用R包 setwd("D://heatmap") library(vegan) library(RColorBrewer) library(gplots) library(permute) library(lattice)图1 原始数据文件格式。行名为样地名&#xff0c;列名为物种名。 # 2. 读入数据 dir() aoaread.csv("Aspe.csv"…

用Python绘制Heatmap

本文内容为基于python的heatmap的绘制与渲染 文章目录 前言一、Heatmap是什么&#xff1f;二、使用步骤1.引入库2.代码 总结 前言 在写论文时&#xff0c;看到大佬们的文章中精美的图表。却不知道如何进行绘制&#xff0c;本文提供了一种heatmap的绘制方式。 一、Heatmap是什么…

HeatMap(热图)的原理和实现

HeatMap&#xff08;热图&#xff09;的原理和实现 先来看两张图&#xff1a; &#xff08;1&#xff09;10年世界杯决赛&#xff0c;冠军西班牙队中门将、后卫、中场及前锋的跑位热图 通过热图&#xff0c;我们可以很清楚的看出四个球员在比赛中跑动位置的差异。 &#xff…

人体姿态估计-生成heatmap的方法

人体姿态估计-生成heatmap的方法 参考Simple BaseLine生成HeatMap的方法&#xff0c;这里整理进行显示&#xff0c;方便可视化&#xff1a; Simple BaseLine生成HeatMap的方法&#xff1a;human-pose-estimation.pytorch/JointsDataset.py at master microsoft/human-pose-es…