栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 8学习总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 8学习总结

学习目标:
  • 掌握 Java 8新增类库,类库升级背景,使用场景等。
  • 掌握流处理、函数式编程,知其所以然,并能熟练应用到日常开发中。

学习途径:
  • 《Java8实战》

学习内容:
  • java 8新增类库基本概念
  • Lambda表达式
    ()->,这样写法的便是Lambda表达式,相当于一个匿名类的替代写法,他的类型由上下文编译时确认。
  • 方法引用
    Person::getName,这样的写法便是,可读性更好,表达更清晰。

  • 流是从支持数据处理操作的源生成的元素序列。
  • 默认方法
    在接口中申明了默认方法,就可以在接口中为方法写实现,并行在实现类中可以不必强制要求实现这个方法,这样是为了保证接口在做升级时,能向前兼容,不需要以前已经实现了的类再去实现这个方法。
  • 行为参数化
    即一个方法接受一个行为作为它的参数,这个行为我们可以是一些计算、变量处理、或者日志打印等,这样我们就可以不用每次都去申明一个方法来封装一些计算,或者使用匿名类这样的复杂写法。
  • 函数式数据处理
  • 流与集合的异同
    要理解流的概念,可以跟集合做一个对比,流与集合的区别在于,集合讲的是数据,流讲的是计算,集合是内存中的数据结构,它包含了数据结构中目前所有的值。而流是按需创建的,只有你有计算需求时,才从数据源中获取值,集合就可以作为流的数据源。集合必须是有穷的,而流可以是无穷的。
  • 流操作:
    筛选、切片、查找、匹配、映射、归约
    流支持两种类型的操作:中间操作(如filter或map)和终端操作(如count、findFirst、forEach和reduce),中间操作用于计算,将一个流转换成另一个流,并不会有数据输出,只有终端操作时流才会输出数据。
  • 收集器
    collect收集器,支持计算最大值、最小值、groupingBy分组、多级分组等,也可以自定义收集器。
  • 并行流
    parallelStream,使用的是java自带分之合并框架内置的线程池,默认的线程数是你的CPU内核数。
  • 高效java8编程
  • java8替代一些设计模式
    可以用java8提升代码的可读性和灵活性,比如替换匿名类、修改集合迭代,替代一些设计模式:策略、模板、观察者、责任链等模式,当然并不能完全替代他们的功能,只能替换少部分使用较为简单的场景。
  • 默认方法
    默认方法帮助类库设计者以后向兼容的方式演进API,在做接口更新时不需要考虑历史实现类的继承继承问题。并且能帮我们做到行为多继承和可选方法。
  • Optional类代替null值
    null值作为最开始设计用来表达缺失的值一种方式,最终证明是有缺陷的,因为会需要我们再编程中针对值缺失做大量的检查,否则你就会收到NullPointException。使用Optional类对存在或缺失的变量值建模,能有效避免漏掉null值检查导致的异常。
  • CompletableFuture异步编程
    异步化帮助我们更好地使用多核CPU的处理能力,并且相比线程池和parallelStream来说,在编程上更具有灵活性,可以处理异常,也可以根据情况处理回调时间。
  • 新的Date和Time接口
    以前的Date由于设计原因,使用复杂,经过java版本不断升级后很多方法被废弃,后来Calendar类并不能完全替代Date类,并且自身也有一些设计问题,比如月份依旧是从0开始计算。其次DateFormat类只适用于Date类,且是线程不安全的。
  • 超越java8
  • 函数式编程
  • 函数式编程的高级技术
  • Java8和Scala特性比较
  • 回顾与展望

Q&A:
  • 为什么学习java8?

因为在开发过程中会大量的使用for循环等处理集合,繁琐且可读性差,流和函数式编程很明显能帮我们解决这个问题。但是在使用过程中,由于不清楚其中原理,很多时候不知道该如何去优化我们的代码,不知道map什么时候用、collect都有些什么工具,无法做到手到擒来。

  • 为什么java8是java版本升级过程中的一个重要版本

个人认为两个方面,一个是流和函数式编程,一个方面是jvm垃圾回收算法的升级,这两个部分是主要原因,前者对我们的开发影响更甚。

  • DateFormat如何线程不安全,会有什么影响?
  • Optional类能解决null值的问题吗

我的回答是不能的,至少是不能彻底解决,从Optional类的设计上来看,只是帮助我们从方法签名上就能看出是否需要我们去做null值检查,在方法设计上,只能解应用Optional才能取到值,相当于强制提醒我们做了null值检查,在编程上来说认为是增加复杂度了的,所以目前你可以看到大家用的还是不多,也没有刻意地使用来避免null检查。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845734.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号