作者:A_2na轻奢主义总店访烟 | 来源:互联网 | 2023-09-15 22:39
原标题:读Java实战(第二版)笔记01_Java的变化
1.语言的演变
1.1.C和C++仍然是构建操作系统和各种嵌入式系统的流行工具
1.2.Java和C#等安全型语言在诸多运行资源不太紧张的应用中已经取代了C和C++
1.3.Java可能会被同样运行在JVM上的竞www.yii666.com争对手语言(如Scala或Groovy)取代
1.4.Ada、Algol、COBOL、Pascal、Delphi、SNOBOL没落
1.4.1.COBOL一度是最重要的商用语言之一
2.Java的演进路径
2.1.Java 8于2014年3月
2.1.1.比Java历史上任何一次改变都深远
2.1.2.长支持(LTS)
2.2.Java 9于2017年9月
2.2.1.文章来源站点https://www.yii666.com/效率提升方面的重要改进
2.2.2.反应式编程支持
2.2.2.1.RxJava
2.2.2.2.Akka
2.2.2.3.构建高并发系统的标准方式
2.3.Java 10于2018年3月
2.3.1.对类型推断做了微调
2.4.Java 11于2018年9月
2.4.1.异步HTTP客户端库
2.4.2.长支持(LTS)
2.5.12 2019 年 3 月
2.6.13 2019 年 9 月
2.6.1.switch优化更新;文本块升级;增加ZGC以将未使用的堆内存返回给操作系统
2.7.14 2020 年 3 月
2.7.1.instanceof模式匹配;提出Records类;空指针异常的地方变得更具体;移除CMS垃圾收集器
2.8.15 2020 年 9 月
2.8.1.密封类;隐藏类;ZGC 成为正式的垃圾收集器
2.9.16 2021 年 3 月
2.9.1文章来源地址135425.html.内存管理提升;新的打包工具;UNIX-Domain Socket channels;Value-based Classes的警告;提供了 C++ 14语言特性
2.10.17 2021 年 9 月
2.10.1.恢复始终严格的浮点语义;增强型伪随机数发生器;弃用即将删除的Applet API
2.10.2.长支持(LTS)
2.11.18 2022 年 3 月
2.11.1.指定 UTF-8 作为标准 Java API 的默认字符集;引入一个简单的 Web 服务器;支持在 Java API 文档中加入代码片段
2.12.19 2022 年 9 月
2.12.1.结构化并发
2.12.2.Record模式
2.12.3.外部函数和内存 API
2.12.4.虚拟线程
2.12.5.switch 表达式和语句的模式匹配
2.13.从Java的演进路径来看,它一直致力于让并发编程更容易、出错更少
3.Java8解决了两个迫切需求
3.1.编写更简洁的代码
3.1.1.Stream API
3.1.1.1.由Stream库来选择底层最佳执行机制
3.1.1.2.避免用synchronized编写代码
3.1.2.向方法传递代码的技巧
3.1.3.接口的默认方法
3.2.更方便地利用处理器的多核
4.流处理
4.1.流是一系列数据项,一次只生成一项
4.2.程序可以从输入流中一个一个文章来源地址135425.html读取数据项,然后以同样的方式将数据项写入输出流
5.函数式编程范式的基石
5.1.没有共享的可变数据
5.1.1.一个方法可以通过它将参数值转换为结果的方式来完整描述
5.1.2.就像一个数学函数,没有可见的副作用
5.1.3.所写的代码不能访问共享的可变数据来完成它的工作
5.1.4.“纯函数”“无副作用函数”或“无状态函数”
5.2.将方法和函数(即代码)传递给其他方法的能力
5.2.1.用行为参数化把代码传递给方法
6.命令式编程范式
6.1.写的程序则是一系列改变状态的指令
7.默认方法
7.1.默认方法只是推进程序演进的一种技术,并不会直接帮助你实现某个特性
7.2.接口可以包含实现类没有提供实现的方法签名了
7.3.给接口设计者提供了一种扩充接口的方式,而不会破坏现有的代码
7.4.使用default关键字来表示
8.方法和Lambda作为一等值
8.1.方法引用
8.2.Lambda
8.2.1.匿名函数
8.2.2.长度多于几行的话,还是应该用方法引用来指向一个有描述性名称的方法,而不是使用匿名的Lambda
8.3.以代码的清晰度为准绳
9.谓词(predicate)
9.1.在数学上常常用来代表类似于函数的东西,它接受一个参数值,并返回true或false
9.2.Function‹T,Boolean›
9.3.Predicawww.yii666.comte‹T›
9.3.1.更标准的方式
9.3.2.效率更高
9.3.3.避免了把boolean封装在Boolean里面
10.外部迭代
10.1.for-each循环一个个地迭代元素
10.2.
11.内部迭代
11.1.数据处理完全是在库内部进行的
11.2.
12.Optional‹T›类
12.1.通过显式使用更多的描述性数据类型来避免null
12.2.如果能一致地使用它,就能帮助避免出现Null-PointerException
12.3.一个容器对象,它既可以包含值,也可以不包含值
12.4.通过类型系统,允许表明一个变量可能缺失值
13.(结构化的)模式匹配
13.1.使用模式匹配比if-then-else更简明
13.1.1.编译器能够检测常见的错误
13.2.采用多态和方法重写替代if-then-else来处理这种类型的数据
14.演变
14.1.使用for-each循环,而不用暴露Iterator里面的模板写法
14.2.经典面向对象思想,而向函数式编程领域转变
14.2.1.Collection主要是为了存储和访问数据,Stream则主要用于描述对数据的计算
14.3.Java 9提供了模块系统
14.3.1.模块对简单的类JAR组件进行了增强,使其具备了结构,既能作为用户文档,也能由机器进行检查
14.4.菱形继承问题
来源于:读Java实战(第二版)笔记01_Java的变化