不可变集合 Stream 异常

不可变集合

什么是不可变集合

数据在创建时加入,在集合的整个生命周期中,元素都不会被修改。

最佳实践:如何创建不可变集合

Lists.of()
Sets.of()
Maps.of()
在这里插入图片描述

Stream

Stream流是什么

相当于一条传送带,将数据放到传送带上,进行处理

Stream 流的方法有哪几种

  1. 获取Stream 流:创建流水线,把元素放到流水线上
  2. 中间操作:流水线上的操作
  3. 终结方法:收集元素

集合如何获取 Stream 流

集合.stream() 方法

数组如何获取 Stream 流

Stream.stream(数组)
Stream.of(数组/可变数据)

有哪些中间操作的方法,特点是什么

在这里插入图片描述在Stream流中无法直接修改集合、数组中的数据

有哪些终结操作的方法,特点是什么

在这里插入图片描述终结操作方法,调用完成后流就无法继续使用了,原因是不会返回Stream了

有哪些收集操作的方法,特点是什么

在这里插入图片描述将操作的数据结果恢复到集合或者数组中去

异常体系

什么是异常,语法错误算是异常吗,编译出现的问题算是异常吗,运行时出现的问题算是异常吗

不算,算,算

为什么需要处理异常

异常会导致程序退出JVM虚拟机而终止。
处理异常:1.避免异常出现 2.提前处理可能会出现的异常

异常体系

在这里插入图片描述
Error:系统级别的、JVM退出等使程序无法继续运行的错误,代码无法控制
Exception:系统中的,代码可以处理的问题

RuntimeException及其子类:运行时异常,编译阶段不会报错。 (空指针异常,数组索引越界异常)
除RuntimeException之外所有的异常:编译时异常,编译期必须处理的,否则程序不能通过编译。 (日期格式化异常)。

运行时异常的默认处理流程

  1. 默认会在出现异常的代码那里自动的创建一个异常对象,如:ArithmeticException。
  2. 异常会从方法中出现的点这里抛出给调用者,调用者最终抛出给JVM虚拟机。
  3. 虚拟机接收到异常对象后,先在控制台直接输出异常栈信息数据。
  4. 直接从当前执行的异常点干掉当前程序。
  5. 后续代码没有机会执行了,因为程序已经死亡

默认的异常处理机制并不好,一旦真的出现异常,程序立即死亡。

最佳实践:编译时异常处理

  • 出现异常直接抛出去给调用者,调用者也继续抛出去。
    这种方式并不好,发生异常的方法自己不处理异常,如果异常最终抛出去给虚拟机将引起程序死亡。
    在这里插入图片描述

  • 出现异常自己捕获处理,不麻烦别人。
    这种方式还可以,发生异常的方法自己独立完成异常的处理,程序可以继续往下执行
    在这里插入图片描述

  • 前两者结合,出现异常直接抛出去给调用者,调用者捕获处理。
    在开发中按照规范来说第三种方式是最好的:底层的异常抛出去给最外层,最外层集中捕获处理

实际应用中,只要代码能够编译通过,并且功能能完成,那么每一种异常处理方式似乎也都是可以的。

最佳实践:运行时异常的处理

运行时异常编译阶段不会出错,是运行时才可能出错的,所以编译阶段不处理也可以。

按照规范建议还是处理:建议在最外层调用处集中捕获处理即可。

如何自定义编译时异常

  • 定义一个异常类继承Exception.
  • 重写构造器。
  • 在出现异常的地方用throw new 自定义对象抛出

作用:编译时异常是编译阶段就报错,提醒更加强烈,一定需要处理!!

如何自定义运行时异常

  • 定义一个异常类继承RuntimeException.
  • 重写构造器。
  • 在出现异常的地方用throw new 自定义对象抛出!

作用:提醒不强烈,编译阶段不报错!!运行时才可能出现!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值