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

Java异常优雅设计

来源:Lrwin lrwinx.github.io/2016/04/28/如何优雅设计java异常/ 导语 异常处理是程序开发必不可少操作之一,但如何正确优雅对异常进行处理确是一门学问,笔者根据自己开发经验来谈一谈是如何对异常进行处理...,如果这样使用的话,是异常作用扩大化,这样将会导致代码复杂程度增加,耦合性会提高,代码可读性降低等问题。...那么就一定不要使用这样异常?其实也不是,真的有这样需求时候,我们可以这样使用,只是切记,不要把它真的当成控制流程工具或手段。那么究竟什么时候才要抛出这样异常呢?...= uid){ //进行处理.. } return null; } 上边例子,如果只判断uid为空还好,如果再去判断address这个实体某些必要属性是否为空,字段很多情况下...第二种异常是指在service抛出什么样异常就自定义一个指定异常错误,然后进行抛出异常。 一般来讲,如果系统没有别的特殊需求时候,开发设计,建议使用第二种方式。

88920

如何优雅设计 Java 异常

如果这样使用的话,是异常作用扩大化,这样将会导致代码复杂程度增加,耦合性会提高,代码可读性降低等问题。...那么就一定不要使用这样异常?其实也不是,真的有这样需求时候,我们可以这样使用,只是切记,不要把它真的当成控制流程工具或手段。那么究竟什么时候才要抛出这样异常呢?...我们把关注点放在restfulapi层(和webcontroller层类似)和service层,研究一下service如何抛出异常,然后api层如何进行捕获并且转化异常。...= uid){ //进行处理.. } return null; } 上边例子,如果只判断uid为空还好,如果再去判断address这个实体某些必要属性是否为空,字段很多情况下...第二种异常是指在service抛出什么样异常就自定义一个指定异常错误,然后进行抛出异常。 一般来讲,如果系统没有别的特殊需求时候,开发设计,建议使用第二种方式。

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

    这样设计 Java 异常更优雅,赶紧学!

    如果这样使用的话,是异常作用扩大化,这样将会导致代码复杂程度增加,耦合性会提高,代码可读性降低等问题。...那么就一定不要使用这样异常?其实也不是,真的有这样需求时候,我们可以这样使用,只是切记,不要把它真的当成控制流程工具或手段。那么究竟什么时候才要抛出这样异常呢?...我们把关注点放在restfulapi层(和webcontroller层类似)和service层,研究一下service如何抛出异常,然后api层如何进行捕获并且转化异常。...= uid){ //进行处理.. } return null; } 上边例子,如果只判断uid为空还好,如果再去判断address这个实体某些必要属性是否为空,字段很多情况下...第二种异常是指在service抛出什么样异常就自定义一个指定异常错误,然后进行抛出异常。 一般来讲,如果系统没有别的特殊需求时候,开发设计,建议使用第二种方式。

    50920

    JavaStream操作

    前言 Stream是Java 8 API添加一个新抽象,称为Stream,以一种声明性方式处理数据集合(侧重对于源数据计算能力封装,并且支持序列与并行两种操作方式) Stream是对集合(Collection...Stream API提供了mapToInt、mapToDouble、mapToLong三种方式将对象【即Stream 】转换成对应数值,同时提供了boxed方法数值流转换为对象 文件创建 try...,具备指定元素累加存放到结果容器能力;并在Collectors工具中提供了Collector接口实现类 toList 将用户ID放到List集合 List idList =...)/orElseGet(null)表示如果找不到值则返回null。...orElse(value)/orElseGet(value) 可以设置默认值。如果找不到就会返回中设置默认值。 不同点: 使用方法时, orElse无论是否有值都会执行。

    48420

    Java8操作-基本使用&性能测试

    一、(Stream)简介 Java8 API 新成员,它允许你以声明式方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。...那么为什么到了 Java 集合,这样做就不行了呢? 另外一点,如果我们想要处理大量数据又该怎么办?是否是考虑使用多线程进行并发处理呢?...如果是,那么可能编写关于并发代码比使用迭代器本身更加复杂,而且调试起来也会变得麻烦。 基于以上几点考虑,Java 设计者 Java 8 版本,引入了概念,来帮助您节约时间!...在上面的代码,findFirst() 可能什么元素都找不到Java 8 设计人员引入了 Optional,这样就不用返回众所周知容易出问题 null 了。...此类查询需要将元素反复结合起来,得到一个值。这样查询可以被归类为归约操作(归约成一个值)。

    1.1K10

    Java8操作-基本使用&性能测试

    那么为什么到了 Java 集合,这样做就不行了呢? 另外一点,如果我们想要处理大量数据又该怎么办?是否是考虑使用多线程进行并发处理呢?...如果是,那么可能编写关于并发代码比使用迭代器本身更加复杂,而且调试起来也会变得麻烦。 基于以上几点考虑,Java 设计者 Java 8 版本,引入了概念,来帮助您节约时间!...在上面的代码,findFirst() 可能什么元素都找不到Java 8 设计人员引入了 Optional,这样就不用返回众所周知容易出问题 null 了。...此类查询需要将元素反复结合起来,得到一个值。这样查询可以被归类为归约操作(归约成一个值)。...对于复杂操作,Stream串行API性能可以和手动实现效果匹敌,并行执行时Stream API效果远超手动实现。 所以,如果出于性能考虑,1. 对于简单操作推荐使用外部迭代手动实现,2.

    1K30

    2021年大数据Flink(四十二):​​​​​​​BroadcastState

    ---- BroadcastState BroadcastState介绍 开发过程如果遇到需要下发/广播配置、规则等低吞吐事件流到下游所有 task 时,就可以使用 Broadcast State...Broadcast State 是 Flink 1.5 引入新特性。 下游 task 接收这些配置、规则并保存为 BroadcastState, 这些配置应用到另一个数据计算 。...需求-实现配置动态更新 实时过滤出配置用户,并在事件补全这批用户基础信息。 事件:表示用户某个时刻浏览或点击了某个商品,格式如下。...descriptor);                 //再清空历史状态数据                 broadcastState.clear();                 //最后最新广播数据放到...* 2.用户信息(配置/规则): > 用户详细信息 * 3.较小信息(配置/规则)作为状态广播到各个节点,便于对实时日志事件用户信息进行补全!

    80530

    Java8新特性—stream使用

    前言: 今天跟大家分享一下java8新特性之一—,肯定有很多人见到过,但是相信目前很多人还没有广泛使用—可能暂时没有使用意识,或者说是使用不熟练,如果真的是这样,那么今天分享文章肯定会给你带来巨大冲击...一、热身运动 可以帮助我们写出更优雅且高性能代码,比如有这样一个场景,比如你有一个女朋友(没有的话就new一个吧),然后你女朋友包包中装了很多东西,现在需要将你女朋友包包东西都拿出来,如果我们使用传统迭代器...那么如果我们使用java8操作将会是下面的场景: 你:媳妇儿,把你包包里面的东西都拿出来放到桌子上 就是这么简单,我们下面来详细学习一下操作 上面的实例可能有些人会觉得集合也能用一些清空操作啊...二、定义及描述 :从支持数据处理操作源生成元素序列 看上去很青涩,很难理解,那就算了,我们尽量用一些比较容易理解思维来转换对流理解,比如我们可以操作比作数据库操作 如刚才上面获取低热量菜名...,大家可以略过这一点,重点看java8代码和java8之前进行对比,其实如果你看完了相信对stream非常热爱,甚至可能会回去改代码了。

    75520

    Flink 系列:Flink 入门不再难!3000字深入浅出 WordCount 实战及精解

    那希望接下来分享给大家带来一些帮助和启发 版本说明: Java:1.8 Flink:1.12.0 一、前言 Apache Flink 是一个处理框架,它允许用户以高吞吐量和低延迟方式处理实时数据... Maven ,group ID 用于唯一标识你项目所属组织或项目组。这里,它被设置为 org.myorg.quickstart。...// DataStream 是 Flink 处理核心 API // 使用换行符来分割从 socket 接收到文本数据,每当它读取到一个换行符,就会将前面的文本作为一个单独记录...输出如下图所示: 4、Flink 运行 jar 包启动 4.1 部署源码 在这里 flink-1.12.0 源码包放到了 Linux 虚机上,配置好 Java 环境,然后配置 Flink 环境变量。...4.2 运行 WordCount 程序 打的 jar 包,放到 Linux 虚机上,然后运行命令: # 因为配置了flink环境变量,所以在任意目录下都可以执行flink命令 flink run -

    44910

    一个hashCode问题追问,差点让陷入无底洞

    不是的,如果你仔细看逻辑,它们都是是容器初始化过程中一次性加载,所以不会像 populateList 随着调用次数增加,无限撑大 List 未关闭 在学习时候老师就在耳边反复说: 一定要关闭...,最终都还没关闭,结果可想而知 解决办法 解决办法很简单,其实主要遵循相应范式就可以避免此类问题 通过 try/catch/finally范式 finally 关掉 如果你用 Java 7+...id; public Person(String name, Integer id){ this.name = name; this.id = id; } } Person 类没有重写...hash 值是存在对象头中,我们还知道对象头中还可能存储线程ID,所以他们某些情形还会存在冲突 对象头中 hashCode 和 偏向锁冲突 jvm 启动时,可以使用 -XX:+UseBiasedLocking...() 方法,而是用 ThreadLocal.set(null) 会达到同样效果

    71440

    JAVA怎样实现树形菜单

    在这里我会很详细讲解每一步代码,主要是方便新人看懂,弥补曾经自己学习过程苦恼。提醒:如果第一种写法理解不了或则看不懂,可以看第二种写法,通过第二种写法去理解第一种写法,两种写法逻辑是一样。...(); PS:这里是通过查询数据获取数据,练习的话,可以new一些数据出来存入集合中就行了 第三步:判断获取数据是否为空,如果为空的话就没有去整理成树结构必要了,数据都没有...if (CollectionUtil.isNotEmpty(menuList)){ .... } PS:这里是糊涂类提供方法进行判断,如果小白过程中发现报错,找不到这个方法或则这个类就换一种写法...collect(Collectors.toList()):处理后元素收集到一个新列表,并返回该列表 因此,这段代码作用是原始列表menuList每个元素转换为AuthMenuResVO...pdrList : null);使用三目运算符,如果pdrList集合不为空就表示当前元素有子集,然把pdrList集合赋值给元素authMenuList属性,如果为空就表示没有子集,赋值空就可以

    13610

    让代码更优雅:JAVA代码不同JDK版本不同写法

    如果大家正在寻找一个java学习环境,或者开发遇到困难,可以加入我们java学习圈,点击即可加入,共同学习,节约学习时间,减少很多在学习遇到难题。...注意需要关闭,必须写在try(...)。三、streamstream是jdk8新特性,stream更像一个高级版本 Iterator,可以很方便地为我们提供各种操作。...如我们先定义一个BiFunction,连接k和v放到数组,逗号分隔:BiFunction func = (k,v) -> String.join("...上面这段代码,是获取id为1name,如果不存在,返回"路人甲",注意,这里只是给个默认返回值,并不会保存到map里。...-> "路人甲");上面这段代码,是获取id为1name,如果不存在,存入字符串"路人甲",并返回。

    96720

    探究Java8Stream(一)

    Stream 是用函数式编程方式集合类上进行复杂操作工具,其集成了Java 8众多新特性之一聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合查找、遍历、过滤以及常见计算等...Java8Stream API作为数据渠道,用于操作数组或者集合等数据源。...,中间操作吧,什么叫中间操作呢,中间操作指的是我们用上面的方法使用数据源返回流之后,我们通过一些操作达到我们想要效果(比如排序,去重等等) 02 — 中间操作 我们先看一些操作API: 一.筛选与切片...说到这里本应该继续往下说映射,但是考虑到虽然讲解了知识点,还是想运用到实际项目中,这样才能真正理解它,所以关于映射决定放到下一节再讲(等不及小伙伴可以现在网上看看哦,资料很多)。...那我们就可以形式,去除缓存存入用户一个页面的重复数据,并拿到停留时间最久数据。 今天呢,就先说这么多,还不熟悉小伙伴可以去练习一下,这对于熟悉Lambad表达式和方法引用也有好处。

    1.1K20

    Java8新特性之Stream

    java8之前,甚至有些人在java8之后,都会想着借助一个中间变量保符合要求菜品,然后排序。...上述写法有什么问题可以发现lowCaloricDishes 只使用了一次,真就一个临时变量。那能不能跳过创建变量过程,你直接把数据给我,经过过滤排序后得到想要呢,就和流水线一样。...= Stream.of("java"); } 操作 可以连接起来操作称为中间操作,关闭操作称为终端操作 通俗地讲,返回结果是操作称为中间操作,放回不是操作称为终端操作。...使用 就按照官网上java API顺序来讲述,小插一句,之前一直没有学是主要是因为感觉接口会很多,怎么可能记得了这么多,其实这几天看才发现真的很少,基本上不用记。 ?...Java8引入目的主要是/为了不要返回容易出现问题null了。

    45830

    Java9这些史诗级更新你都不知道?Java9特性一文打尽!

    当然 不论新老朋友 相信您都可以 从中获益。如果觉得 「不错」 朋友,欢迎 「关注 + 留言 + 分享」,文末有完整获取链接,您支持是前进最大动力!...模块系统小结 我们从上面的例子可以看到,我们可以指定我们想要导出和引用软件包,没有人可以不小心地使用那些不想被导出软件包类。...(System.out::println) 2 4 16 ofNullable() 方法 Stream API ,ofNullable() 返回包含单个元素顺序 Stream(如果null),...反应示例 让我们从一个简单示例开始,该示例,我们实现 Flow API Subscriber 接口并使用 SubmissionPublisher 创建发布者并发送消息。...JavaDoc 关于 Boolean 说明截取 多分辨率图像 API Java SE 9 ,Oracle Corp 引入一个新 Multi-Resolution Image API

    1.6K20

    聊聊Java中代码优化30个小技巧

    JDK给我们提供了非常丰富API可以去操作IO。...15.用equals方法比较是否相等 不知道你项目中有没有见过,有些同事对Integer类型两个参数使用==号比较是否相等? 反正见过,那么这种用法对?...少用@Transactional注解 查询(select)方法放到事务外 事务避免远程调用 事务避免一次性处理太多数据 有些功能可以非事务执行 有些功能可以异步处理 关于大事务问题另一篇文章《...由于篇幅有限,在这里就不过多介绍了,更详细内容可以看看我另一篇文章《消除if...else是9条锦囊妙计》 21.防止死循环 有些小伙伴看到这个标题,可能会感到有点意外,代码不是应该避免死循环...如果想要打印某个分类所有父分类,可以用类似这样递归方法实现: public void printCategory(Category category) { if(category == null

    1.3K20

    Flink教程(1) Flink DataStream 创建数据源 转换算子「建议收藏」

    第2步:创建数据源 创建数据源是指定义我们Flink程序从哪里获取数据。 如果是实时计算,一般工作我们都是从Kafka获取数据。...如果是跑批处理,一般是从txt,csv,hdfs上读取数据。 还记得一开始说Flink自我介绍数据流上有状态计算这句话认为很有必要先理解下什么是? 4.1 什么是?...有界可以摄取所有数据后再进行计算。有界所有数据可以被排序,所以并不需要有序摄取。有界处理通常被称为批处理。...4.2 从指定数据集合创建(一般测试时用) 一般测试自己代码时,可以这样用,以便快速验证自己写转换算子是否对。...,每层简洁性和表达性之间进行了不同权衡,DataStream API为许多通用处理操作提供原语,比如window。

    1.4K51

    使用Optioanl优雅处理空值

    对于以上描述接口方法来看,大概可以推断出可能它包含了以下两个含义:listUser(): 查询用户列表get(Integer id): 查询单个用户 在所有的开发,XP推崇TDD模式可以很好引导我们对接口定义...get(Integer id) 如果没有这个对象,是抛异常还是返回null呢?...当然对于实际操作来讲,返回如果Person为空,返回null,但是PersonDTO是不能返回null(尤其Rest接口返回这种DTO)。...Optioanl是一种分支判断,那我们究竟是关注 Optional还是Optional.get()呢? 给大家建议是,如果想要这样歧义,就不要使用它!...即便 java beangetter是符合Optional,但是因为java bean 太多了,这样会导致你代码有50%以上进行Optinal判断,这样便污染了代码。

    1.9K20
    领券