首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

异常实践 | 优雅,永不过时

代码健壮性下降忽略异常可能导致程序的健壮性下降,因为它无法适应潜在的错误情况。及时处理异常有助于提高代码的稳定性。安全性问题在一些情况下,忽略异常可能导致安全性问题。...Throwable 是 Exception 和 Error 的根类,如果捕获了 Throwable,它将捕获到所有可能的异常和错误,甚至包括 Java 虚拟机无法恢复的严重问题。...不可恢复的错误Throwable 包括 Error 类型,而 Error 通常表示无法恢复的、严重的问题,例如内存溢出。捕获这些错误可能导致程序处于不稳定状态。...不精确的异常处理捕获 Throwable 会导致异常处理变得非常宽泛,无法精确地识别和处理特定类型的异常。这可能会掩盖真正需要关注的问题。...try { // 可能抛出异常} catch (Exception e) { // 记录异常信息 e.printStackTrace();}使用日志框架记录异常信息使用日志框架(如Log4j

46062

JAVA 中异常处理的最佳实践

这场辩论源于JAVA是第一个包含需检查异常的主流OO框架。C++和C#根本没有需检查异常。这些语言中所有的异常都是无需检查的。 从低层抛出的需检查异常强制要求调用方捕获或是抛出该异常。...它会冒泡到任何你想捕获它的地方。...将 SQLException转换为无需检查异常,如果客户端代码无法对其进行处理。 大多数时候,客户代码无法解决 SQLException。这时候就将其转化为无需检查的异常。...但是,该异常并没有影响到我的业务逻辑模块,它无需进行异常处理,更何况它根本无法对 SQLException进行任何操作。如果我的catch块需要根异常原因,可以使用 getCause()方法。...3.当无法提供更加有用信息时,不要自定义异常 下面这段代码有什么问题?

1.7K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    持久层变化历史和Mybatis的到来

    回过头来重新梳理一下几个基础框架 一 持久层的变迁历史 想一想,我最原始的最初的持久层是jdbc,我大二不会框架用了很久原生的.......1,SQL语句硬编码 2、参数只能按顺序传入(占位符) 3、没有实现实体类到数据库记录的映射 4、没有提供缓存等功能 二 持久层ORM框架 1....其实这个框架是我唯一没用过的,我用过springdata jpa,估计这俩差不多 在我们再pojo里配置好@Entriy 以及@Table(name="XXX") 以及@id主键注解,这俩框架就会自动帮我们生成...@Entity//声明实体类 @Table(name = "tb_friend")//只要使用jpa就要指定实体类关联的数据库表 @IdClass(Friend.class) public class...,基本是灵活性方面的: 1、不能指定部分字段 (比如我们save,updata一下修改的是整条记录所有字段) 2、无法自定义SQL,优化困难 3、不支持动态SQL 三 Mybatis的优点?

    30630

    写一个ORM框架的第一步(Apache Commons DbUtils)

    新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦。...之所以把它称之为工具而不是框架,是因为它和其他的ORM框架还是由很大的区别(例如Hibernate)。...返回影响的行数的是一个int类型的数组 return qr.batch(sql, params); } 五、DQL操作 5.1、ResultSetHandler接口 这个接口的核心作用是将查询结果进行封装...{ //当表的列名和实体的属性名不一致时,在sql中使用as关键字给当前列指定别名, //别名和实体的属性名对应即可 String sql = "SELECT...{ //当表的列名和实体的属性名不一致时,在sql中使用as关键字给当前列指定别名, //别名和实体的属性名对应即可 String sql = "SELECT

    80910

    Java 异常处理的十个建议

    e.printStackTrace()语句产生的字符串记录的是堆栈信息,如果信息太长太多,字符串常量池所在的内存块没有空间了,即内存满了,那么,用户的请求就卡住啦~ 二、catch了异常,但是没有打印出具体的exception,无法更好定位问题...e){ //仅仅捕捉 SQLException log.info(“SQLException in test,exception:{}”, e); } } 理由...五、捕获异常与抛出异常必须是完全匹配,或者捕获异常是抛异常的父类 反例: //BizException 是 Exception 的子类 public class BizException extends...公司的框架提供统一异常处理就用到异常链,我们自定义封装异常,不要丢弃原始异常的信息,否则排查问题就头疼啦 反例: public class TestChainException { public...所以需要优先捕获具体的异常,把NumberFormatException放前面~

    54040

    写一个ORM框架的第一步(Apache Commons DbUtils)

    新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦。...之所以把它称之为工具而不是框架,是因为它和其他的ORM框架还是由很大的区别(例如Hibernate)。...返回影响的行数的是一个int类型的数组 return qr.batch(sql, params); } 五、DQL操作 5.1、ResultSetHandler接口 这个接口的核心作用是将查询结果进行封装...{ //当表的列名和实体的属性名不一致时,在sql中使用as关键字给当前列指定别名, //别名和实体的属性名对应即可 String sql = "SELECT...{ //当表的列名和实体的属性名不一致时,在sql中使用as关键字给当前列指定别名, //别名和实体的属性名对应即可 String sql = "SELECT

    1.2K90

    Spring实战6-利用Spring和JDBC访问数据库主要内容

    10.1.1 了解Spring的数据访问的异常体系 在使用原始的JDBC接口时,如果你不捕获SQLException,就不能做任何事情。...既然我们并不能做些操作来恢复SQLException,为什么必须捕获它? 即使你计划处理一些SQLException,你也必须捕获SQLException对象然后查看它的属性才能发掘出问题的本质。...对于SQLException,开发者并不清楚具体该如何处理该异常(该异常并未指明具体的错误原因),却被迫需要捕获该异常。...如果没有这些操作,应用就无法及时处理错误、资源始终被占用,会导致内存泄露。因此,开发者需要一个数据库访问框架,用于处理这些模板样式代码。...JdbcTemplate内部捕获了可能抛出的SQLException异常,然后转为更具体的数据库访问异常,并重新抛出。

    81210

    技术转载——Java 异常处理的十个建议

    e.printStackTrace()语句产生的字符串记录的是堆栈信息,如果信息太长太多,字符串常量池所在的内存块没有空间了,即内存满了,那么,用户的请求就卡住啦~ 二、catch了异常,但是没有打印出具体的exception,无法更好定位问题...e){ //仅仅捕捉 SQLException log.info(“SQLException in test,exception:{}”, e); } } 理由...五、捕获异常与抛出异常必须是完全匹配,或者捕获异常是抛异常的父类 反例: //BizException 是 Exception 的子类 public class BizException extends...公司的框架提供统一异常处理就用到异常链,我们自定义封装异常,不要丢弃原始异常的信息,否则排查问题就头疼啦 反例: public class TestChainException { public...= null){ ... } 十、注意异常匹配的顺序,优先捕获具体的异常 注意异常的匹配顺序,因为只有第一个匹配到异常的catch块才会被执行。

    57530

    白话设计模式之模板方法模式

    还是一个更新操作,我想大多同学都会将整个连接过程放在每一个逻辑里面,每个添加,每个查询都写一遍,类似如下: public void get() throws ClassNotFoundException, SQLException...我们编写一个映射结果集的接口RowMapper public interface RowMapper { T mapRow(ResultSet resultSet) throws SQLException...{ if (sql == null || sql.equals("")) throw new SQLException("sql is null"); preparedStatement...{ if (sql == null || sql.equals("")) throw new SQLException("sql is null"); preparedStatement...模板方法模式的缺点 子类会变得很多,不过去这其实算不上缺点,对于数据库操作,数据表肯定会对应很多实体类,使用ORM框架,自然每一个实体会对应一个Mapper,这是无法避免的。

    40420

    走进Java接口测试之从0到1搭建数据驱动框架(多数据源和业务持久层)

    走进Java接口测试之从0到1搭建数据驱动框架(需求篇) 走进Java接口测试之从0到1搭建数据驱动框架(设计篇) 走进Java接口测试之从0到1搭建数据驱动框架(用例管理) 全部代码骨架结构 ├...约定: 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。...业务持久层 业务持久层的框架,我们依旧选择统一使用 Mybatis。...在使用 Mybatis 的时候,Dao 接口,Entity 实体类,还有每个实体类对应的 xml 都得自己写,这其实也是工作量很大的事情,维护起来也很费劲,使用我们这里选用的是mybatis-generator...SSH 隧道连接至公司内网访问数据库 把数据库中表列的注释生成为 Java 实体的注释,生成的实体清晰明了 可选的去除掉对版本管理不友好的注释,这样新增或删除字段重新生成的文件比较过来清楚 目前已经支持

    87930

    SpringBoot事务配置管理

    使用功能场景: 由于数据操作在顺序执行的过程中,线上可能有各种无法预知的问题,任何一步操作都有可能发生异常,异常则会导致后续的操作无法完成,此时由于业务逻辑并未正确的完成,所以在之前操作数据库的动作并不可靠...事务管理是SpringBoot框架中最为常用的功能之一,我们在实际应用开发时,基本上在service层处理业务逻辑的时候都要加上事务,当然了,有时候可能由于场景需要,也不用加事务(比如我们往一个表里插数据...3.常见问题总结 3.1 异常并没有被捕获到 首先要说的,就是异常并没有被捕获到,导致事务并没有回滚,我们在业务层代码中,也许已经考虑到了异常的存在,或者编辑器已经提示我们需要抛出异常,但是这里面有个需要注意的地方...因为SpringBoot默认的事务规则是遇到运行异常和程序错误才会回滚,比如上述例子中抛出的RuntimeException就没有问题,但是抛出SQLException就无法回滚了,针对非运行时异常,如果要进行事务回滚的话...3.2 异常被“吃”掉 我们在处理异常时,有两种方式,要么抛出去,让上一层来捕获处理,要么把异常try catch掉,在异常出现的地方给处理掉,就因为有这种try catch,所以导致异常被“吃”掉,事务无法回滚

    1.3K40

    【c++】异常

    如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误 实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误 2.C++异常 异常是处理错误的一种方式,当一个函数发现自己无法处理的错误时就可以抛出异常...代码的核心目标 设计一个 异常基类 Exception,并让各种子系统(SQL、缓存、HTTP)抛出不同类型的异常。...SQL 相关异常 class SqlException : public Exception { public: SqlException(const string& errmsg, int id,...当 new 运算符无法分配内存时抛出,表示内存分配失败。...表示运行时错误,通常指程序运行过程中无法预料的错误。 派生类 std::range_error:表示范围错误异常。 std::overflow_error:表示算术溢出异常。

    9210

    Java 异常处理上篇: Throwable 详解

    异常处理的核心是 Throwable 类及其子类,它们为我们提供了处理程序执行中出现的问题的机制。本文将深入探讨 Throwable 类,探索其层次结构、常见的子类以及异常处理的常用关键字。...ErrorError 类表示严重的错误,通常是虚拟机发生无法恢复的错误。程序员通常不需要直接捕获或处理 Error,因为这类错误通常意味着系统出现了不可逆的问题。...典型的受检异常包括 IOException、SQLException 等,它们表示程序在运行时可能遇到的外部因素导致的问题。...它们通常是由程序逻辑错误引起的,无法在编译时预测。典型的非受检异常包括 NullPointerException、ArrayIndexOutOfBoundsException 等。...在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。

    51230
    领券