热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

读Java实战(第二版)笔记01_Java的变化

原标题:读Java实战(第二版)笔记01_Java的变化

原标题:读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.5.1.switch语句增强;数字转字符串NumberFormat;G1收集器的优化


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的变化


推荐阅读
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了使用Python编写购物程序的实现步骤和代码示例。程序启动后,用户需要输入工资,并打印商品列表。用户可以根据商品编号选择购买商品,程序会检测余额是否充足,如果充足则直接扣款,否则提醒用户。用户可以随时退出程序,在退出时打印已购买商品的数量和余额。附带了完整的代码示例。 ... [详细]
author-avatar
A_2na轻奢主义总店访烟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有