Java正确的错误捕获姿态

news2024/11/27 0:20:51

在这里插入图片描述

理论概述

在Java中,捕获异常并且合理地处理或抛出异常是编写健壮和可靠代码的关键部分。但是有时候我们可能会对各种错误的捕获方法有点模棱两可,不知道怎么合适的去使用,这里作为基础知识我们做一个回顾巩固!只有正确的开发方法,我们才能提高效率,减少不必要的错误和弯路!!!
以下是一些关于如何在Java中合理捕获和处理异常的准则:

  1. 只捕获你知道如何处理的异常: 不要捕获所有异常,而是只捕获你知道如何处理的异常。捕获所有异常可能会隐藏真正的问题,使调试变得困难。

  2. 使用多个catch块: 使用多个catch块来处理不同类型的异常,以便分别处理它们。从特定到通用的顺序排列catch块,以免某个特定异常被通用异常捕获块所隐藏。

try {
    // 可能抛出异常的代码
} catch (SpecificException e) {
    // 处理特定异常
} catch (AnotherSpecificException e) {
    // 处理另一个特定异常
} catch (Exception e) {
    // 处理通用异常
}
  1. 捕获异常后是否继续执行: 根据情况决定是否在捕获异常后继续执行代码。有时,捕获异常后可能需要进行清理操作,然后继续执行。

  2. 使用finally块: 使用finally块来确保资源的释放,无论是否发生了异常。finally块中的代码总是会执行,即使在try块中抛出了异常。

try {
    // 可能抛出异常的代码
} catch (Exception e) {
    // 处理异常
} finally {
    // 清理操作,例如关闭资源
}
  1. 抛出自定义异常: 在某些情况下,可能需要抛出自定义异常,以便更好地表示程序中的问题。创建自定义异常类继承自Exception或其子类。
public class CustomException extends Exception {
    // 构造函数等
}
  1. 不要忽略异常: 不要简单地将异常吞噬,而是要适当地记录异常信息,以便后续的调试和排查。

  2. 使用日志: 使用合适的日志框架(如Log4j、SLF4J等)记录异常信息,以便在程序运行过程中捕获异常和调试时进行追踪。

  3. 避免空的catch块: 避免在catch块中什么都不做,这可能会导致难以诊断的问题。

实例演示

当编写Java代码时,可能会遇到各种常见的异常情况,下面是一些常见的错误捕获的例子,我们作为参考:

  1. 空指针异常(NullPointerException):
String str = null;
try {
    int length = str.length(); // 尝试调用null引用的方法
} catch (NullPointerException e) {
    System.out.println("空指针异常:" + e.getMessage());
}
  1. 数组索引越界异常(ArrayIndexOutOfBoundsException):
int[] arr = {1, 2, 3};
try {
    int value = arr[5]; // 尝试访问数组超出索引范围的元素
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("数组索引越界异常:" + e.getMessage());
}
  1. 类型转换异常(ClassCastException):
Object obj = "Hello";
try {
    Integer num = (Integer) obj; // 尝试将字符串转换为整数,但类型不匹配
} catch (ClassCastException e) {
    System.out.println("类型转换异常:" + e.getMessage());
}
  1. 除以零异常(ArithmeticException):
int dividend = 10;
int divisor = 0;
try {
    int result = dividend / divisor; // 尝试进行除法运算,除数为零
} catch (ArithmeticException e) {
    System.out.println("除以零异常:" + e.getMessage());
}
  1. 文件操作异常(IOException):
try {
    FileInputStream file = new FileInputStream("nonexistent-file.txt"); // 尝试打开不存在的文件
} catch (IOException e) {
    System.out.println("文件操作异常:" + e.getMessage());
}
  1. 自定义异常:
class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

try {
    if (condition) {
        throw new CustomException("自定义异常信息");
    }
} catch (CustomException e) {
    System.out.println("自定义异常:" + e.getMessage());
}
  1. 多重异常捕获:
try {
    // 一些可能抛出异常的代码
} catch (NullPointerException e) {
    // 处理空指针异常
} catch (ArrayIndexOutOfBoundsException e) {
    // 处理数组索引越界异常
} catch (Exception e) {
    // 处理其他异常
}

这些只是一些常见的错误捕获的例子,实际应用中可能会遇到更多不同类型的异常情况。根据具体的业务逻辑和需求,你可以选择适当的错误捕获方式,并且合理地处理异常,以确保代码的可靠性和稳定性。千万不要只是简单的随便抛出异常,或者是随便引入一个,给自己,给别人的调试都会带来一定的难度!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/858784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

原生js发送ajax请求---ajax请求篇(一)

在原生js中我们使用的是XMLHttpRequest对象来发送ajax请求 主要步骤就是: 1.创建XMLHTTPRequest对象 2.使用open方法设置和服务器的交互信息 3.设置发送的数据,开始和服务器端交互 4.注册事件 5.更新界面 (1) get方式 //步骤一…

Java自学网站推荐,专业教学快速提升

Java自学网站可以是学习Java的有用资源之一。它们通常提供了丰富的教学材料、在线课程、编程练习和实例项目,帮助初学者系统地学习Java编程语言和相关技术。 动力节点是一家专业的Java培训机构,他们提供在线视频学习平台,你可以参考他们的官方…

在用的二手电动汽车,雨季时,要注意保养哪些地方?

二手电动汽车在雨季的保养有一些特别需要注意的地方。首先,你要确保你的车子有足够的防水措施。电动汽车的电池组和控制系统通常都装在车辆底部,而这些部分是最怕水的。如果这些部分进水,可能会导致严重的电气故障,甚至可能会引起…

多语言B2B2C跨境购物平台无货源商品库搭建(全开源)

要搭建一个多语言B2B2C跨境购物平台,需要以下几个步骤,包括商品库的搭建、网站基础架构、多语言支持、订单管理、会员管理、营销推广、物流配送和支付接口集成。 1. 商品库的搭建 首先需要建立一个商品库,包括商品的名称、描述、价格、图片…

3理解图像本质-AI-python

下载Jupyter Lab 代码如下: import numpy as np //导入包 import matplotlib.pyplot as plt //为了显示图片要导入另一个图 %matplotlib inline //显示图片防止出错,在行内显示 from PIL import Image //读取图片 img Image.open(E:/ANCONDA/AI_Pyth…

Web前端之NodeJS、Vue

文章目录 一、Babel转码器1.1 Babel安装流程1.2 Babel命令行转码 二、Promise对象三、测试方式四、Vue(渐进式JS框架)4.1 准备4.2 创建一个项目4.3 运行一个项目 五、模板语法5.1 文本5.2 原始html5.3 属性Attribute5.4 使用JavaScript表达式 六、条件渲…

数据结构与算法基础-学习-28-图之拓扑排序

一、相关概念 名称描述有向无环图无环的有向图,简称DAG图(Directed Acycline Graph),通常用来描述一个工程或系统的进行过程。AOV网用一个有向图表示一个工程的各子工程及其相互制约的关系,其中顶点表示活动,弧表示活…

paddleseg数据集自定义比例划分为测试集test.txt,训练集train.txt,验证集val.txt

将语义分割的数据集标注好后如下所示: 整理好图片和标签文后需要按照比例划分为训练集,验证集,测试集。 具体划分代码见下: import glob import os.path import argparse import warnings import numpy as npdef parse_args():p…

数组对象去重的几种方法

场景: let arrObj [{ name: "小红", id: 1 },{ name: "小橙", id: 1 },{ name: "小黄", id: 4 },{ name: "小绿", id: 3 },{ name: "小青", id: 1 },{ name: "小蓝", id: 4 } ]; 方法一:…

Leetcode.1289 下降路径最小和 II

题目链接 Leetcode.1289 下降路径最小和 II rating : 1697 题目描述 给你一个 n x n 整数矩阵 g r i d grid grid ,请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路径 定义为:从 g r i d grid grid 数组中的每一行选择一个数字&#xff…

matplotlib/seaborn 笔记:mpld3 让图像可交互

只需要一行代码 mpld3.display()/mpld3.enable_notebook() 即可让 matplotlib/sdeaborn画的图有交互性 import numpy as np import matplotlib.pyplot as plt import mpld3xnp.random.random(1000) ynp.random.random(1000)plt.hist2d(x,y,bins(100,100)) mpld3.enable_noteboo…

国产芯力特SIT1024QHG四通道本地互联网络(LIN)收发器,可替代TJA1024HG

SIT1024Q 是一款四通道本地互联网络(LIN)物理层收发器,符合 LIN 2.0、LIN 2.1、LIN 2.2、 LIN 2.2A 、 ISO 17987-4:2016 (12V) 和 SAE J2602 标准。主要适用于使用 1kbps 至 20kbps 传输速 率的车载网络。 SIT1024Q 通过 TXDx 引…

聊聊低代码的本质,是应用开发的未来吗?

聊聊低代码的本质,是应用开发的未来吗? 一、前言 二、什么是低代码以及功能特点? 什么是低代码开发? 低代码平台的特点和功能 三、低代码的本质是什么? 四、优秀且低调的低代码平台 五、结论 一、前言 低代码开发是近年…

当管理多个项目面临这些挑战时,怎样才能不翻车?

企业越发展,同时进行的项目就越多。管理工作量、跟踪截止日期以及了解优先顺序也变得更复杂了。在此过程中,多项目管理通常面临4个常见挑战。 1. 优先事项不明确或相互冲突 无论你的项目计划多么严谨,事情也不可能总是按照预期进行。在管理单…

3年测试经验,用例设计竟然不知道状态迁移法?

1、概念 状态迁移法主要关注在测试状态转移的正确性上面。对于一个有限状态机,通过测试验证其在给定的条件内是否能够产生需要的状态变化,有没有不可达的状态和非法的状态,是否可能产生非法的状态转移等。通过构造能导致状态迁移的事件&…

动力节点Redis7实战教程,从基础到底层一套通关

Redis是一种非常强大的数据缓存和存储系统,既可以用作关系型数据库的缓存降低查询延迟,也可以作为一个分布式系统的共享数据存储。 动力节点的Redis7课程将带领大家完整的学习Redis7.0版本,内容涵盖Redis全套知识体系,由浅入深 总…

如何把视频转换成gif图片?gif图片在线制作教程

是不是许多朋友认为将视频转换为gif动画需要使用非常复杂的工具,事实上只需要使用gif图片在线制作工具,就可以轻松把视频转gif,下面是视频在线转gif(https://www.gif.cn)的详细操作步骤。 打开首页,点击【…

shopify独立站运营操作步骤?如何经营管理?

如何进行shopify独立站运营流程?shopify的自主网站管理过程? 在如今数字化的商业世界中,建立和管理自己的在线商店变得越来越重要。shopify独立站运营成为了许多创业者的首选。本文将为您介绍一些关键的操作步骤,帮助您顺利开展shopify独立站运营&…

SOLIDWORKS工程图修订表关联PDM

日常工作中图纸设计变更需要修订表去记录变更的内容信息,修订表格可以列出各种信息,例如审批人员或已更改图纸上的位置。所有修订表都将包含更改的详细信息或描述以及更改发布日期。 SOLIDWORKS PDM 2018 版及以上版本可由SOLIDWORKS PDM 中的工作流驱动…