Java异常

article/2025/10/30 20:42:30

Java笔记

文章目录

      • 一、简介
      • 二、空指针异常
      • 三、自定义异常


一、简介

  1. 一个健壮的程序必须能够处理各种异常。

  2. 我们应该如何处理异常?两种方式:

    • 返回约定错误码,例如200表示成功。
    • 在语言层面提供异常处理机制。
  3. 必要性说明

    • 异常需要被分门别类区处理的,不推荐直接使用 Exception 类捕获所有异常,这不是一个好的习惯。
    • 发生异常时,程序会被从异常发生处开始中断。
    • 异常与错误,并不一样。Throwable 中有两个体系:Error和Exception,虽然两者都会被抛出,但是 Error 表示严重的错误,程序一般对此无能为力。
    • 在Java体系中存在一些必须要捕获的异常。如果这些异常没有对应的捕获语句,那么编译器会编译失败。
    • 如果在方法头中标记了可能抛出的异常,那么我们在编写try()语句的时候就可以不用编写catch语句。【注意是 try() 而不是 try 】
    • 所有未捕获的异常,最终都会在main()中出现,我们必须要在main方法中设法捕获所有异常

    image-20220817184832653

  4. Java异常库

    Java异常库

  5. 异常处理顺序原则:从小到大,最后 Exception 包揽全部。

    try {//
    } catch (IOException e) {// io error:
    } catch (Exception e) {// other error:
    }
    
  6. 概念:异常栈

    • 当发生异常时,会按照顺序依次抛出异常,所以Java程序中存在异常栈。
    • printStackTrace()方法负责打印异常栈,每层调用都会给出对应的源代码行号,这对于调试错误非常有用。
    java.lang.NumberFormatException: nullat java.base/java.lang.Integer.parseInt(Integer.java:614)at java.base/java.lang.Integer.parseInt(Integer.java:770)at Main.process2(Main.java:16)at Main.process1(Main.java:12)at Main.main(Main.java:5)
    

    上述信息表示:numberFormatException是在Java.lang.integer.parseInt方法中抛出的,从下往上看,调用层依次是

    image-20220722115711984

  7. 关键性的Cause by

    • Cause by 通常是具体的抛出异常原因,可口语化表示。
    • 自定义 Cause by:initCause 初始化异常对象。
    try {int a = 1 / 0;
    } catch (Exception ex) {throw new Exception().initCause(new Throwable("自定义"));}
    
  8. 4种异常类【输出方法】

    • 原生
    int a = 1 / 0;
    
    Exception in thread "main" java.lang.ArithmeticException: / by zeroat com.thinkstu.csdn.controller.test.main(test.java:9)
    
    • printStackTrace():同原生
    try {int a = 1 / 0;
    } catch (Exception ex) {ex.printStackTrace();}
    
    Exception in thread "main" java.lang.ArithmeticException: / by zeroat com.thinkstu.csdn.controller.test.main(test.java:9)
    
    • getMessage():简短
    try {int a = 1 / 0;
    } catch (Exception ex) {System.out.println(ex.getMessage());
    }
    
    / by zero
    
    • toString():折中
    try {int a = 1 / 0;
    } catch (Exception ex) {System.out.println(ex.toString());
    }
    
    java.lang.ArithmeticException: / by zero
    
  9. 关于finally语句的几个特点:

    • finally语句不是必须的。
    • finally语句总是最后执行。
    • 就算不发生异常,finally语句也会被执行。
  10. 异常参数混合使用规则:|号分割。

    public static void main(String[] args) {try {process1();} catch (IOException | NumberFormatException e) {} 
    }
    
  11. 概念:异常转换、异常屏蔽

    • 如果在 catch 里把异常捕获,又把异常抛出去(可以这样做),那么最终异常还是会被抛出该方法,俗称**【异常转换】**。

    • 注意,在异常转换时需要把原始的异常信息补充进去,以免丢失原始的异常信息、难以定位第一案发现场。另外,再次抛出异常并不会影响原 finally 语句的执行,此时程序的执行顺序为 try → catch → finally → throw 。

    • 但是,如果是在 finally 语句中抛出了异常,那么结果就是 finally 中的异常会被正确抛出,而 catch 里的异常则不会被抛出,这种情况需要格外注意,俗称**【异常屏蔽】**。

    try {process();
    } catch (NullPointerException oldMsg) {// 保留原始的异常信息throw new IllegalArgumentException( oldMsg );}
    
    try {process();
    } catch (Exception e) {throw new RuntimeException(e);
    } finally {// 屏蔽了 catch 中新抛出的异常throw new IllegalArgumentException();}
    

二、空指针异常

空指针异常是 Java 异常体系中重要章节

  1. 空指针异常(NPE):Null Point Exception。

  2. 产生原因:如果一个对象为 null ,那么调用该对象方法或字段就会产生空指针异常 NullPointException ,这个异常通常是由JVM抛出的。

  3. 必要性说明

    • 空指针是一种代码逻辑错误。
    • 指针概念源于C语言,Java 中并无指针。我们所说的 Java 空指针异常实际上指的是 Java 引用异常(Null Reference),不过两者的差别不大。
    • 好的编程习惯可以在一定程度上避免空指针的发生。例如在定义 String 变量时,使用空字符串""而不是默认的 null 可以避免 NullPointException 的发生。
    // 好的编程习惯范例
    public String[] test1(String file) {private String name = "";if (getFileSize(file) == 0) {return new String[0];}
    }
    

三、自定义异常

尽量使用 JDK 提供的异常类型(存在即使用),而不是自定义异常。

  1. 简介
    • 大型项目需要自定义异常,小项目则不然。
    • 自定义异常需要保持合理的【异常继承体系】。
  2. 简单实现
  • 自定义BaseException作为自定义的“根异常”。

  • BaseException 继承自 RuntimeException 且提供多个构造方法。

  • 由 BaseException 派生其他异常。

    // 必须将调用父类 super 方法,保护异常案发现场
    public class BaseException extends RuntimeException {public BaseException() {super();}public BaseException(String msg, Throwable cause) {super(msg, cause);}public BaseException(String msg) {super(msg);}public BaseException(Throwable cause) {super(cause);}
    }
    

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

相关文章

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…

R绘图|heatmap

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

用Python绘制Heatmap

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

HeatMap(热图)的原理和实现

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

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

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

seaborn可视化——一文搞懂heatmap参数

文章目录 datacmaplinewidths、linecolorsquareaxannot指定为True指定为同形状数组 vmax、vminannot_kwsmaskxticklabels、yticklabels设置为auto指定整数指定为True centerrobustfmtcbar 数据使用的是seborn内置数据 官网链接:https://seaborn.pydata.org/generate…

BagNet特征heatmap可视化

BagNet地址:https://github.com/wielandbrendel/bag-of-local-features-models BagNet是ResNet的变体,显著的区别是将3x3卷积变为1x1卷积来达到构造整体网络具有某个最终的感受野(receptive field)目的。在这里主要讲解对于一张来源于ImageNet的尺寸为22…

关键点检测——heatmap热力图法

一、数据集格式 二、解析xml文件,生成data_center.txt from PIL import Image import math,os from xml.etree import ElementTree as ETdef keep_image_size_open(path, size(256, 256)):img Image.open(path)temp max(img.size)mask Image.new(RGB, (temp, te…

Learn OpenCV之Heatmap

本文是利用热图(Heatmap)分析视频序列的标定。 注意,这里目的不是标定而是分析标定好的数据,或者也可以是检测的结果数据 文章结构是这样的,先详细的解释一下热图分析有什么用,根据一些具体的应用实例给出…

python heatmap画法

任务描述 将一个归一化的分数以热图的形式显示出来,分数高的地方颜色深,分数小的地方颜色浅 注意:使用单一颜色无法实现这种渐变过程 原理 将单通道的0-1之间的score值映射到三通道的颜色空间 原料 一个单通道的score矩阵颜色空间列表&a…

python heatmap总结

基础使用 import seaborn as sns; sns.set_theme(color_codesTrue) iris sns.load_dataset("iris") species iris.pop("species") g sns.clustermap(iris)取消行列分类树 import seaborn as sns; sns.set_theme(color_codesTrue) import matplotlib.p…