首页 > 其他分享 >10.20(异常总结)

10.20(异常总结)

时间:2023-10-20 15:23:02浏览次数:34  
标签:10.20 总结 代码 try 语句 finally catch 异常

Java项目中常用的异常处理情况包括try-catch语句、throws关键字、自定义异常等。try-catch语句用于捕获和处理异常,可以有多个catch语句,需要注意顺序。throws关键字用于声明方法可能抛出的异常类型。自定义异常需要继承自Exception类或其子类。finally语句在异常处理中非常重要,可以确保必要的清理工作总是被执行。使用日志记录器可以更好地了解程序运行过程中出现的异常情况。避免使用过于复杂的嵌套try-catch结构,将可能出现异常的代码块拆分成独立的函数进行处理。

  1. 异常的概念

在Java中,异常(Exception)是指程序运行过程中发生的非正常情况,它会中断程序的正常运行。异常可以分为两大类:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。受检异常需要在代码中显式地进行处理,否则编译器会报错;非受检异常则不需要显式处理,编译器不会报错,但建议进行适当的处理。

  1. try-catch语句

try-catch语句是Java中最常用的异常处理方式。它的基本结构如下

try {

    // 可能抛出异常的代码块

} catch (ExceptionType1 e1) {

    // 处理ExceptionType1类型的异常

} catch (ExceptionType2 e2) {

    // 处理ExceptionType2类型的异常

} finally {

    // 无论是否发生异常,都会执行的代码块

}

在try代码块中,我们可以放置可能抛出异常的代码。当这些代码运行时,如果发生了异常,那么程序会立即跳转到对应的catch代码块进行处理。如果没有发生异常,那么程序会继续执行后面的代码。finally代码块中的代码无论是否发生异常,都会被执行。通常我们会在finally代码块中关闭资源、释放锁等操作。

  1. throws关键字

throws关键字用于声明一个方法可能抛出的异常类型。当一个方法内部发生了异常,但是不想在方法内部进行处理时,可以使用throws关键字将异常抛给上层调用者处理。例如:

public void readFile(String fileName) throws FileNotFoundException {

    // 读取文件的代码

}

  1. throw关键字

throw关键字用于手动抛出一个异常。当我们需要在某些条件下强制抛出一个异常时,可以使用throw关键字。例如:

public void checkAge(int age) {

    if (age < 0) {

        throw new IllegalArgumentException("年龄不能为负数");

    }

}

  1. 自定义异常

除了Java内置的异常类型外,我们还可以根据实际需求自定义异常。自定义异常需要继承自Exception类或其子类。例如:

class MyException extends Exception {

    public MyException(String message) {

        super(message);

    }

}

  1. 多个catch语句的顺序问题

当一个try代码块中有多个catch语句时,需要注意它们的顺序。因为编译器会根据顺序来匹配异常类型,如果匹配到了相应的catch语句,那么程序会跳转到该catch代码块进行处理。因此,我们应该将最具体的异常类型放在前面,将最通用的异常类型放在后面。例如:

try {

    // 可能抛出异常的代码块

} catch (IOException e) { // 处理IO异常

} catch (NullPointerException e) { // 处理空指针异常,比IOException更具体

} catch (Exception e) { // 处理其他所有异常,最通用的catch语句应该放在最后面

} finally {

    // 无论是否发生异常,都会执行的代码块

}

  1. finally语句的重要性

finally语句在异常处理中非常重要。它可以确保一些必要的清理工作总是被执行,例如关闭文件、释放资源等。即使try代码块中的代码没有发生异常,或者发生了异常但没有被捕获和处理,finally代码块中的代码仍然会被执行。因此,我们应该养成在finally代码块中添加必要清理操作的习惯。

  1. 使用日志记录异常信息

为了更好地了解程序运行过程中出现的异常情况,我们可以使用日志记录器(如log4j、slf4j等)来记录异常信息。这样,当程序出现异常时,我们可以查看日志来定位问题所在。例如:

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

public class ExceptionDemo {

    private static final Logger logger = LoggerFactory.getLogger(ExceptionDemo.class);

 

    public void readFile(String fileName) {

        try {

        // 读取文件的代码

    } catch (FileNotFoundException e) {

        logger.error("文件未找到", e); // 使用日志记录器记录异常信息和堆栈跟踪信息

    } finally {

        // 关闭资源的代码

    }

}

  1. 避免使用过于复杂的嵌套try-catch结构

虽然try-catch语句可以帮助我们捕获和处理异常,但是过度使用复杂的嵌套try-catch结构会让代码变得难以阅读和维护。因此,我们应该尽量避免使用过于复杂的嵌套try-catch结构,而是尽量将可能出现异常的代码块拆分成多个独立的函数,然后在每个函数中使用try-catch语句进行处理。这样可以让代码更加清晰和易于维护。

 

标签:10.20,总结,代码,try,语句,finally,catch,异常
From: https://www.cnblogs.com/xuxingkai/p/17777176.html

相关文章

  • 异常处理
    异常处理1.什么是异常:指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。异常指的并不是语法错误和逻辑错误。语法错了,编译不通过,不会产生字节码文件,根本不能运行。代码逻辑错误,只是没有得到想要的结果,例如:求a与b的和,你写成了a-b2.异常的抛出......
  • Tita 升级|总结优化上线
    一、写总结时支持导入他人任务Tita-OKR和新绩效一体化管理平台现在写总结可以导入你可见的任务,如你参与的或下属的任务,更完整的汇报工作范围中支持选择「审批的」的任务二、导入任务按母子层级展示总结中导入的任务如果存在子母关系,则按母子层级展示,汇报更清晰 PS:......
  • 排序算法总结
    lowB三人组冒泡排序思想:列表相邻元素两两对比,每趟结束都会产生一个最大/最小元素代码实现defbubble_sort(li):foriinrange(0,len(li)-1):#趟数exchange=0#设置一个标识符,当有一趟无变化时,列表已有序,停止排序forjinrange(0,len(......
  • 项目开发中遇到的问题总结
    1、echarts图表问题数据库中存储结构为横向一条数据包含体重,身高,血糖血压,添加事件等数据而前端需要纵向以属性为y轴,事件为纵轴,分别产生多张表格。需要前端使用javascript进行遍历,使用到了map方法this.status=response.data.dataconsole.log(this.status)constxData=thi......
  • 第六章 管理错误和异常
    trycatch异常处理throw:扔出异常catch:抓住异常代码放到try中,代码运行时会执行try语句。如果没有异常,这些语句将执行下去,直到运行结束;如果一旦出现异常则跳出try,去执行catch中的内容(可以多个catch同时存在)。示例:try{//有可能出现错误的代码}catch{......
  • 10.20算法
    位1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为'1'的个数(也被称为汉明重量)。 提示:请注意,在某些语言(如Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号......
  • jfinal框架下,连接国产达梦数据库,抛出SocketTimeoutException异常
    公司为政府开发项目,主框架选择springboot,orm框架使用jfinal。数据库为国产达梦数据库写统计类服务时,通常sql运行时间会比较久,超过10s的sql一定会报SocketTimeoutException异常 尝试使用原生jdbc创建连接,运行sql毫无问题。遂检查连接池设置。jfinal使用druid连接池网上搜索......
  • JAVA项目中的常用的异常处理情况
    https://www.cnblogs.com/gothic-death/p/9946415.html在说java异常处理情况之前简单说下:java中异常的定义。java程序在运行时出现的不正常情况称之为异常。为了防止此类情况发生后及时处理该异常,java将所有可能发生异常的情况用类的形式进行描述和封装。描述不正常情况的类称为......
  • Python用KNN(K-近邻)回归、分类、异常值检测预测房价、最优K值选取、误差评估可视化
    全文链接:https://tecdat.cn/?p=33917原文出处:拓端数据部落公众号KNN是一种非参数学习算法,这意味着它不会对底层数据做出任何假设。这是一个非常有用的特性,因为大多数客户的数据并不真正遵循任何理论假设,例如线性可分性,均匀分布等等。何时应使用KNN?假设您想要租一间公寓并最近......
  • SpringBoot基础搭建总结
    现在这一篇就是总结springboot基本的搭建  1.这边就是Controller类,就是类名上面写一个@RestController,然后方法上面写一个@RequestMapping注解,然后就是下面方法的构建,然后下面sout的目的就是为了测试方法的运行,return就是将东西送给浏览器  然后,为了规范工作,和前端更......