Java:(学习笔记)七、Stream流、异常、日志框架

第八章—Stream流、异常、日志框架

一、Stream流

1、说明

​ 由于Lambda所带来的函数式编程,引入了Stream流的概念,目的是为了简化集合和数组操作的API。

2、核心思想

​ 先得到集合或者数组的Stream流,把元素放上去,然后就用这个Stream流简化的API来方便的操作元素。

3、Stream流的获取

1)Stream流的三类方法

​ ①获取Stream流

​ ②中间方法

​ ③终结方法

2)集合获取Stream流的方式

​ 使用Collection接口中的默认方法stream()生成流。

3)数组获取Stream流的方式

​ ①获取当前数组的Stream流:

​ public static Stream stream(T[] array)

​ ②获取当前数组/可变数据的Stream流

​ public static Stream of(T… values)

4、Stream流的常用API

1)中间方法

方法说明
Stream filter(Predicate<? super T> predicate)用于对流中的数据进行过滤。
Stream limit(long maxSize)获取前几个元素
Stream skip(long n)跳过前几个元素
Stream distinct()去除流中重复的元素。依赖(hashCode和equals方法)
static Stream concat(Stream a, Stream b)合并a和b两个流为一个流

注意:中间方法也称为非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程。在Stream流中无法直接修改集合、数组中的数据。

2)终结方法

方法说明
void forEach(Consumer action)对此流的每个元素执行遍历操作
long count()返回此流中的元素数

注意:终结操作方法,调用完成后流就无法继续使用了,原因是不会返回Stream了。

5、收集Stream流

1)说明

​ 就是把Stream流操作后的结果数据转回到集合或者数组中去。

2)收集方法

方法说明
R collect(Collector collector)开始收集Stream流,指定收集器
public static Collector toList()把元素收集到List集合中
public static Collector toSet()把元素收集到Set集合中
public static Collector toMap(Function keyMapper , Function valueMapper)把元素收集到Map集合中

二、异常

1、说明

​ 异常是程序在“编译”或者“执行”的过程中可能出现的问题。

​ 注意:语法错误不算在异常体系中。

​ 异常一旦出现了,如果没有提前处理,程序就会退出JVM虚拟机而终止。

​ 研究异常并且避免异常,然后提前处理异常,体现的是程序的安全, 健壮性。

2、异常体系

​ 异常分为Error和Exception两类,Exception又分为RuntimeException及其子类和除RuntimeException之外所有的异常。

​ Error:系统级别问题、JVM退出等,代码无法控制。

​ Exception:java.lang包下,称为异常类,它表示程序本身可以处理的问题
​ RuntimeException及其子类:运行时异常,编译阶段不会报错。 (空指针异常,数组索引越界异常)

​ 除RuntimeException之外所有的异常:编译时异常,编译期必须处理的,否则程序不能通过编译。 (日期格式化异常)。

3、编译时异常和运行时异常

1)编译时异常,是在编译成class文件时必须要处理的异常,也称之为受检异常。就是在编译的时候出现的异常。

2)运行时异常,在编译成class文件不需要处理,在运行字节码文件时可能出现的异常。就是在运行时出现的异常。

3)常见运行时异常

​ ①数组索引越界异常: ArrayIndexOutOfBoundsException

​ ②空指针异常 : NullPointerException,直接输出没有问题,但是调用空指针的变量的功能就会报错。

​ ③数学操作异常:ArithmeticException

​ ④类型转换异常:ClassCastException

​ ⑤数字转换异常: NumberFormatException

4)常见编译时异常

​ 编译阶就报错,必须处理,否则代码不通过。

4、异常的默认处理流程

​ ①默认会在出现异常的代码那里自动的创建一个异常对象:ArithmeticException。

​ ②异常会从方法中出现的点这里抛出给调用者,调用者最终抛出给JVM虚拟机。

​ ③虚拟机接收到异常对象后,先在控制台直接输出异常栈信息数据。

​ ④直接从当前执行的异常点干掉当前程序。

​ ⑤后续代码没有机会执行了,因为程序已经死亡

5、编译时异常的处理机制

1)处理形式

​ ①出现异常直接抛出去给调用者,调用者也继续抛出去。

​ ②出现异常自己捕获处理,不麻烦别人。

​ ③前两者结合,出现异常直接抛出去给调用者,调用者捕获处理。

2)throws

​ 用在方法上,可以将方法内部出现的异常抛出去给本方法的调用者处理。

​ 这种方式并不好,发生异常的方法自己不处理异常,如果异常最终抛出去给虚拟机将引起程序死亡。

方法 throws 异常1 ,异常2 ,异常3 ..{
    ...
}

3)try——catch——

​ 监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理。

​ 这种方式还可以,发生异常的方法自己独立完成异常的处理,程序可以继续往下执行。

   try{
       // 监视可能出现异常的代码!
   }catch(异常类型1 变量){
       // 处理异常
   }catch(异常类型2 变量){
       // 处理异常
   }...

4)前两者结合

​ 方法直接将异通过throws抛出去给调用者

​ 调用者收到异常后直接捕获处理。

6、运行时异常的处理机制

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

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

7、自定义异常

1)说明

​ Java无法为这个世界上全部的问题提供异常类。

​ 自定义异常可以使用异常的机制管理业务问题,如提醒程序员注意。同时一旦出现bug,可以用异常的形式清晰的指出出错的地方。

2)自定义编译时异常

​ ①定义一个异常类继承Exception.

​ ②重写构造器。

​ ③在出现异常的地方用throw new 自定义对象抛出,

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

3)自定义运行时异常

​ ①定义一个异常类继承RuntimeException.

​ ②重写构造器。

​ ③在出现异常的地方用throw new 自定义对象抛出!

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

三、日志框架

1、说明

​ 日志技术可以将系统执行的信息选择性的记录到指定的位置(控制台、文件中、数据库中)。可以随时以开关的形式控制是否记录日志,无需修改源代码。

2、日志技术体系

​ 日志技术体系分为Commons Logging和Simple Logging Facade for Java两个日志规范接口。又包含Log4j,JUL(java.util.loggiing),Logback,其他实现等日志实现框架

​ 日志规范:一些接口,提供给日志的实现框架设计的标准。

​ 日志框架:牛人或者第三方公司已经做好的日志记录实现代码,后来者直接可以拿去使用。

​ 因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。

3、Logback概述

​ Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好

​ 官方网站:https://logback.qos.ch/index.html

​ Logback是基于slf4j的日志规范实现的框架。

​ Logback主要分为三个技术模块:

​ ①logback-core: logback-core 模块为其他两个模块奠定了基础,必须有。

​ ②logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API。

​ ③logback-access 模块与 Tomcat 和 Jetty 等 Servlet 容器集成,以提供 HTTP 访问日志功能

Java笔记系列

Java:(学习笔记)一、简介

Java:(学习笔记)二、基础语法

Java:(学习笔记)三、面向对象-基础

Java:(学习笔记)四、面向对象-三大基本特征

Java:(学习笔记)五、常用API与补充语法

Java:(学习笔记)六、集合

Java:(学习笔记)七、Stream流、异常、日志框架

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值