JDK1.8新特性简单介绍与理解(上)

今天是大年初六了,明天就该开始2021年的coding之旅了,趁着过年放假的时候,我想着先整理一下Java的新特性,现在来说,我们在工作中用的最普遍的就是Java8了,因为从9开始就是收费版本了,但是我们学习的Java内容可能已经有点老了,一些新特性我们没有接触到,所以我就想着简单的介绍一下Java8的新特性,本人也是刚刚学习到的内容。

1.接口

在新版本下,接口中可以定义普通方法与静态方法。
JDK1.8新特性简单介绍与理解(上)_第1张图片

我们在子类中调用
JDK1.8新特性简单介绍与理解(上)_第2张图片

2.编码与解码

当我们需要一定安全性的时候,我们在进行保存的时候需要使用Base64进行编码与解码,将内容变成一串密码,当我们需要调用时通过解码,得到我们的原内容。在新版本之前,我们进行编码与解码时需要依赖一个Apache Commons Codec包,或者使用JDK中sun.misc套件下的BASE64Encoder(编码)与BASE64Decoder(解码)这两个类来进行。前者需要引入Apache Commons Codec包,后者效率较差,公开信息也说过以后会取消这个方法,不建议使用

新版本的Java.util包中新增了Base64的类,效率远远快于之前,并且不需要引入其他包。

新版本下编码
JDK1.8新特性简单介绍与理解(上)_第3张图片

新版本下解码
JDK1.8新特性简单介绍与理解(上)_第4张图片

3.时间日期

老版本中的时间处理是非线程安全的,API的设计比较差,新版本中给我们提供了十分简便的时间方法。
核心为Java.time包中的LocalDate类、LocalTime类、LocalDateTime类。

使用方法为
JDK1.8新特性简单介绍与理解(上)_第5张图片

我们获取到时间以后,可以对时间内容进行修改处理,Local开头为本地时间,Zoned可以自己规定时区 (工作中很少使用,大多数还是使用Local )

日期常用API (在哔哩哔哩学习的视频中截取)
JDK1.8新特性简单介绍与理解(上)_第6张图片

时间格式化

当我们创建一个时间对象的时候,我们会发现像下图一样,得到的时间不是我们想要的,这时候我们就需要将时间按照我们想要的内容进行格式化。
JDK1.8新特性简单介绍与理解(上)_第7张图片

格式化的方法如下图
JDK1.8新特性简单介绍与理解(上)_第8张图片
字符串转换为LocalDateTime

LocalDateTime.parse("时间字符串", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))

此时我们发现格式化时需要注意模型字符串的字母大小写,原因是因为大小写不同代表的意思也是不同的

M表示月份。
m表示分钟。
D表示这是一年中的第几天。
d表示这是当月的第几天。
H表示这是一天中的第几个小时(范围0-23)。
h表示am/pm中的第几个小时(范围0-12)。
S表示毫秒数。
s表示分钟内的秒数

获取指定时间
JDK1.8新特性简单介绍与理解(上)_第9张图片

计算两个时间的时间差

JDK1.8新特性简单介绍与理解(上)_第10张图片

4.Optional类

在Java新特性中出现了Optional类,这个类专门用来替我们解决空指针异常的。但其实在工作中判断是否为null的时候,我们一般采用apache.commons.lang3StringUtils工具类中的isNotEmpty方法。当字符串不为空也不为null时,返回true。具体使用为:
JDK1.8新特性简单介绍与理解(上)_第11张图片

我们使用Optional类的目的,不仅仅是让我们用来判断是否为空的,而是作为函数式编程的一部分出现的。Optional对象有三种创建方式,一种为of方法创建,一种为ofNullable方法,还有一种是创建空的Optional对象。
JDK1.8新特性简单介绍与理解(上)_第12张图片

使用get方法能得到内容,不过要注意,当对象值为null时则会抛出异常
JDK1.8新特性简单介绍与理解(上)_第13张图片

5.StringJoiner

在JDK1.8中有一个新的字符串拼接的方式,为StringJoiner。

        StringJoiner keyJoiner = new StringJoiner("连接符","前缀","后缀");
        keyJoiner.add(元素1).add(元素2);
        return keyJoiner.toString();

就可以简单的得到一个拼接后的字符串。
有兴趣的查看源码可以发现
JDK1.8新特性简单介绍与理解(上)_第14张图片

StringJoiner底层还是用了StringBuilder,所以推理出来StringJoiner应该是线程安全的。
使用StringJoiner是为了方便于操作集合的字符串拼接

list.stream().collect(Collectors.joining(":"))

后面还有lambda表达式的学习,有需要的小伙伴请戳↓
JDK1.8新特性简单介绍与理解(下)

你可能感兴趣的:(Java语言复习,java,字符串)