一、概述
上几期,我们是完整的学完了java异常类的学习及实战演示、以及学习了线程进程等基础概念,而这一期,我们要来玩点好的东西,那就是java8,我们都知道java8是自2004年发布java5之后最重要且一次重大的版本更新,虽然我们的JDK环境 也升级到了java1.8,但是在日常的开发过程中,使用最多的编程风格还是停留在 JDK1.7版本。
那对于java1.8,你们有了解多少它相关的新特性呢?至于java8,于2013年9月正式发布,距离至今已快十年载了,想必大家对它的新特性大大小小也耳濡目染了些吧?那么趁着今天这个空闲日子,我就跟大家一起来聊聊它-java8之新特性。
二、本期教学目标
- java8有哪些新特性
- 什么是函数式接口
- 什么是Lambda表达式
- 掌握Stream Api
- Stream和Collect集合区别
- Stream创建方式
- Stream操作三步骤
- 接口的默认方法与静态方法
-
新时间日期API
三、正文
1️⃣java8新特性
2️⃣什么是Lambda表达式
1️⃣可选类型声明
2️⃣可选的参数圆括号
3️⃣可选的大括号
4️⃣可选的返回关键字
... ...
以上第1、2点内容,我是总结到了该篇《java零基础入门-java8新特性(上篇)》,需要的小伙伴可以去传送门直接去。
3️⃣什么是函数式接口
总而言之:函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。
4️⃣掌握Stream Api
总而言之,何为Stream流,Stream是Java8中处理集合的关键抽象概念,它可以指定你对集合进行一些处理操作,比如对集合进行非常复杂的查找、过滤和映射数据等操作。
... ...
以上第3、4点内容,我是总结到了该篇《java零基础入门-java8新特性(中篇)》。需要的小伙伴可以去传送门直接去。
5️⃣Stream和Collections区别
... ...
6️⃣Stream创建方式
... ...
以上第5、6点内容,我是总结到了该篇《java零基础入门-java8新特性(下篇)》。需要的小伙伴可以去传送门直接去。
7️⃣接口的默认方法与静态方法
上述已经讲了java8新特性的其中三种,具体如下:
- stream api
- lambda表达式
- 函数式接口
接下来我还要给大家讲解两种,也是java8新特性中比较主要的,这些都是需要大家掌握并且能讲得出,特别是能在实战中用起来不费劲,你接触过,你才能懂,要不然真的会遭鄙视的,相信我,这些虽然在老项目中,很多大佬都不咋用,但是对于目前的新项目,开篇可能都是运用的java8的新特性。
所以我这期还得给你们讲完,接口的默认方法与静态方法,及新时间日期api这两点,对于java8的新特性,就差不多讲完全了。
说起java8之接口默认方法与静态方法,这究竟是怎么一回事呢?我们都知道,在java8之前啊,我们定义一个接口,比如我们要给一个接口添加新的方法,我们就得在接口上新增,然后这时如果有已经实现该接口的类,都要一一实现该新增的方法,就非常的不灵活。而java8的出现就改变了这一点,在给接口定义新方法的同时就不影响到已经实现的类,它不强制实现类去重写接口的所有方法。
所以好处就是大程度的解决了这种接口修改与已有实现类不兼容的问题。比如我在已有接口中添加一个新方法,默认修饰符用default关键字来修饰。
比如如下我在UserService中添加一个printStr()方法。
而我在实现类中,完全不需要去重写该printStr()方法,我可以直接通过该接口类.super.方法()即可。
而对于java8中提到的静态方法,其实在写法上就是将默认方法的default关键字换成static关键字即可。
比如我如下我定义一个静态方法。
static void printStr1(){System.out.println("我是bug菌2!");}
然后要调用的就是直接用类名点方法即可。
总而言之,对于默认方法的使用相对还是比较简单的,比较实用。
8️⃣新时间日期API
接下来就是对于java8提供的新时间日期api,看过我文章的小伙伴都知道,我在早起是有教学过这些时间日期日历相关的api类的,比如Date类、Format类、SimpleDateFormat类、Calendar类。这些都是处理时间日期的一些类。
但是今天我要教的是java8新提供的api,那到底有哪些呢?LocalDate、 LocalTime、 LocalDateTime,这些,是我总结出来的比较重要的类,其中它们的实例都是不可变的对象。;别表示使用 ISO-8601日历系统的日期、时间、日期和时间。对于这三个类,它们提供了简单的本地日期或时间。
如下是具体的总结:
- LocalDate:代表IOS时间格式(yyyy-MM-dd),可以存储出生日期、纪念日等日期。
- LocalTime:表示一个时间(而不是日期)。
- LocalDateTime:是用来表示日期和时间的, 这是一个最常用的类之一。
接下来,我就具体给大家使用演示一下吧。这样结合实例你们能看的更明白些;
LocalDate类
表示的是一个yyyy-MM-dd 时间格式的时间。
演示代码如下:
@Testpublic void testLocalDate(){LocalDate now = LocalDate.now();System.out.println(now);}
运行结果截图如下:
LocalTime类
LocalTime类是表示一个时间。
演示代码如下:
@Testpublic void testLocalTime(){LocalTime now = LocalTime.now();System.out.println(now);}
运行结果截图如下:
LocalDateTime类
表示的是日期和时间结合的时间。
演示代码如下:
@Testpublic void testLocalDateTime(){LocalDateTime now = LocalDateTime.now();System.out.println(now);}
运行结果截图如下:
这下你们大家就看明白了嘛,我接下来再将三类获取当前时间分别进行输出,给大家演示一下,其实都是很简单时间类,可能用的比较多的就是LocalDateTime类。