Java9、10、11的新特性

Java9、10、11新特性 目录一、Java9中的新特性1.1 JDK和JRE目录结构的改变1.2 模块化系统模块之间包的调用1.3 Java的REPL工具1.3.1 jShell命令产生背景设计理念实现目标1.4 语法改进:接口的私有方法1.5 语法改进:钻石操作符使用升级1.6 try结构的语法升级Java8中try的资源关闭是自动的Java9中try1.7 集合工厂方法 :快速创建只读集合1.8 InputStream 加强1.9 增强的 StreamAPItakeWhile()dropWhile()ofNullable()重载 阅读详情

Java 9

Java 9 提供了超过150项新功能特性,包括备受期待的模块化系统、可交互
的 REPL 工具,jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安 全增强、扩展提升、性能管理改善等,下面介绍一些常用新特性。

1. JDK 目录结构的改变

JDK1.8及以前的目录

JDK1.9目录

2. 模块化系统

Java 已经 发展超过 20 年(95 年最初发布),Java 和相关生态在不断丰富的同时也越来越暴露出一些问题:

  1. Java 运行环境的膨胀和臃肿,每次JVM启动的时候,至少会有30~60MB的内存 加载,主要原因是JVM需要加载rt.jar,不管其中的类是否被classloader加载,第一步整个jar都会被JVM加载到内存当中去。而模块化就是解决这问题,按需加载。
  2. 当代码库越来越大,创建复杂,不同版本的类库交叉依赖导致让人头疼的问题,这些都阻碍了 Java 开发和 运行效率的提升
  3. 很难真正地对代码进行封装, 系统并没有对不同JAR 文件之间的依赖关系有个明确的概念。每一个公共类都可以被类路径之下任何其它的公共类所访问到,这样就会导致无意中使用了并不想被公开访问的API。

另外,关注公众号「Java编程大本营」,在后台回复:面试,可以获取我整理的 MySQL、分布式系列面试题和答案,非常齐全。

实现目标

  1. 模块化的主要目的在于减少内存的开销
  2. 只须必要模块,而非全部jdk模块
  3. 改进 Java SE 平台,使其可以适应不同大小的计算设备
  4. 改进其安全性,可维护性,提高性能

使用细节

模块由声明文件module-info.java组成。该文件是位于 java代码结构的顶层,该模块描述符明确地定义了我们的模块需要依赖哪些模块,以及自己的哪些模块可以被外部使用。

比如下面,创建了2个模块,java9demo 和java9test , 并在Java代码结构的顶层创建了module-info.java文件。

现在想在java9demo模块中调用java9test模块下包中的Person类,需要做如下操作

  1. 在java9test的module-info.java中声明如下信息,控制自己的模块哪些包可以被外部访问。

  1. 在java9demo的module-info.java中声明如下信息,指明对模块的依赖。

3. jShell命令

就像Python 和 Scala 之类的语言早就有交互式编程环境 REPL (read - evaluate - print - loop)了,以交互式的方式对语句和表达式进行求值。开发者只需要输入一些代码, 就可以在编译前获得对程序的反馈。而之前的Java版本要想执行代码,必须创建文 件、声明类、提供测试方法方可实现。

至于一些使用细节大家网上找找资料就行, 个人觉得用处不大。

4. 接口的私有方法

Java 8中规定接口中的方法除了抽象方法之外,还可以定义静态方法 和默认的方法。一定程度上,扩展了接口的功能,此时的接口更像是 一个抽象类.

在Java 9中,接口更加的灵活和强大,连方法的访问权限修饰符都可以声明为private。

5. 钻石操作符使用升级

在Java 8匿名实现类与钻石操作符(diamond operator)共同使用,在编译期间会报错,如下:

而在Java 9 后,这个将不在是一个问题。

6. try的语法升级

Java 8 中,可以实现资源的自动关闭,但是要要求代码必须在try子句中初始化,否则编译不通过。如下例所示:

Java 9 中,用资源语句编写try将更容易,我们可以在try子句中使用已经初始 化过的资源,此时的资源是final的

7. String 内部存储结构变更

String 再也不用 char[] 来存储啦,改成了 byte[] 加上编码标记,节约 了一些空间。

8. 快速创建只读集合

在Java 8 及以前我们要创建一个只读的集合,需要进行一系列如下的繁琐步骤:

Java 9 引入更优雅的API,使得创建只读集合更加容易

9. 增强Stream API

在 Java 9 中,Stream API 变得更好,Stream 接口中添加了 4 个新的方法: takeWhile, dropWhile, ofNullable,还有个重载的iterate方法 ,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。

  • takeWhile()

takewhile() 方法接受所有值,直到谓词返回false为止,才停止。也就是从第1个元素一直往后判断,符合条件的就进行处理,如果中间遇见一个不符合的,整个流程结束。

  • dropWhile()

dropWhile()方法丢弃所有值,直到它与谓词匹配为止。行为与 takeWhile 相反,返回剩余的元素。也就是从第1个元素一直往后判断,如果符合条件的就继续往下判断,当发现元素不符合条件,那么处理后面的那些元素。

  • ofNullable()

Java 8 中 Stream 不能完全为null,否则会报空指针异常。而 Java 9 中的 ofNullable 方 法允许我们创建一个单元素 Stream ,可以包含一个非空元素 ,也可以创建一个空 Stream。

  • iterate()

这个 iterate重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。

Optional 和 Stream 之间的结合也得到了改进。 现在可以通过 Optional 的新方法 stream() 将一个 Optional 对象转换为一个 (可能是空的) Stream 对象

Java 10

JDK 10一共定义了109个新特性,其中包含12个JEP(JDK Enhancement Proposal特性加强提议,对于程序员来讲,真正的新特性其实就一个),还有一些新API和JVM规范、JAVA语言规范上的改动,下面介绍一个这个新特性。

局部变量类型推断

因为变量声明有时候太长,会导致可读性变差,所以通过类型名 var 来统一声明一个局部变量。适用的范围只能在局部代码块中,它会自动推断类型,如下:

它不适用于以下几种情况:

  • 情况1:没有初始化的局部变量声明
  • 情况2:方法的返回类型
  • 情况3:方法的参数类型
  • 情况4:构造器的参数类型
  • 情况5:属性
  • 情况6:catch块

个人觉得类型推断的这一新特性,并没有带来什么可读性的好处。

工作原理

在编译阶段,处理var部分时,编译器先是查看表达式右边部分,并根据右边变量值的类型进行推断,作为左边变量的类型,然后将该类型写入字节码当中,最终的代码变量声明也是会转化成实际类型。所以这个过程时在编译阶段完成。

Java 11

官网公开的 17 个 JEP(JDK Enhancement Proposal 特性增强提议),下面介绍一下常用新特性。

1. 新增一些字符串的处理方法

2. 升级局部类型推断

在var上添加注解的语法格式,在jdk10中是不能实现的。在JDK11中加入了这样 的语法。

3. 全新的HTTP 客户端

HTTP,用于传输网页的协议,早在1997年就被采用在目前的1.1版本中。直到2015年,HTTP2才成为标准。

HTTP/1.1和HTTP/2的主要区别是如何在客户端和服务器之间构建和传输数据 。 HTTP/1.1依赖于请求/响应周期。HTTP/2允许服务器“push”数据:它可以发送比客户端请求更多的数据。

这是Java 9开始引入的一个处理 HTTP 请求的HTTP Client API,该API支持同步和异步,而在Java 11中已经为正式可用状态,你可以在 java.net包中找到这个API
它将替代仅适用于blocking模式的HttpURLConnection,并提供对WebSocket 和 HTTP/2的支持。

4. 更简化的编译运行程序

在我们的认知里面,要运行一个 Java 源代码必须先编译,再运行,两步执行动作。 而在未来的 Java 11 版本中,通过一个 java 命令就直接搞定了。

java Javastack.java
5. 新一代的垃圾回收器ZGC

ZGC, A Scalable Low-Latency Garbage Collector(Experimental)
ZGC, 这应该是JDK11最为瞩目的特性, 没有之一。但是后面带了Experimental, 说明这还不建议用到生产环境。

ZGC是一个并发,基于region, 压缩型的垃圾收集器,只有 root 扫描阶段会STW(stop the world), 因此GC停顿时间不会随着堆的增长和存活对象的增长而变长。

优势

  • GC暂停时间不会超过10ms
  • 既能处理几百兆的小堆, 也能处理几个T的大堆(OMG)
  • 和G1相比, 应用吞吐能力不会下降超过15%
  • 为未来的GC功能和利用colord指针以及Load barriers优化奠定基础
  • 初始只支持64位系统
6. 其他新特性
  • Unicode 10
  • Deprecate the Pack200 Tools and API
  • 新的Epsilon垃圾收集器
  • 完全支持Linux容器(包括Docker)
  • 支持G1上的并行完全垃圾收集
  • 最新的HTTPS安全协议TLS 1.3
  • Java Flight Recorder

心得

随着云计算和AI等技术浪潮,当前的计算模式和场景正在发生翻天覆地的变化,不仅对 Java的发展速度提出了更高要求,也深刻影响着Java技术的发展方向。传统的大型企业或互联网应用,正在被云端、容器化应用、模块化的微服务甚至是函数(FaaS,Function-as-a-Service)所替代。另外,关注公众号「Java编程大本营」,在后台回复:面试,可以获取我整理的 MySQL、分布式系列面试题和答案,非常齐全。

Java虽然标榜面向对象编程,却毫不顾忌的加入面向接口编程思想,又扯出匿名对象之概念,每增加一个新的东西,就是对Java面向对象思想的一次冲击。反观Python,抓住面向对象的本质,又能在函数编程思想方面游刃有余。Java对标C/C++,以抛掉内存管理为卖点,却又陷入了JVM优化的噩梦。选择比努力更重要,选择Java的人更需要对它有更清晰的认识。

Java需要在新的计算场景下,改进开发效率。这话说的有点笼统,我谈一些自
己的体会,Java 代码虽然进行了一些类型推断等改进,更易用的集合 API 等,
但仍然给开发者留下了过于刻板、形式主义的印象,这仍然是一个长期的改进方向。

Java15新特性一览 作者:Java技术栈 JDK 15 2020/09/15 如期而至! 这个时间牛逼啊,和苹果发布会同天? OracleJDK 15 发布地址: https://www.oracle.com/java/technologies/javase/15all-relnotes.html OpenJDK 15 发布地址: https://openjdk.java.net/projects/jdk/15/ OracleJDK 和 OpenJDK 两者的区别这里不撰述了,不清楚的请点击这里进行查 阅读详情

相关推荐

一口气读完 Java 8 ~ Java 21 所有新特性

一口气读完 Java 8 ~ Java 21 所有新特性

共同进步,共同学习。 1999

Java 9&10&11 新特性

视频链接:Java零基础教程 JDK 9 的发布 经历4次跳票,历经曲折的Java 9终于在2017年9月21日发布 从Java 9这个版本开始,Java的计划发布周期是6个月,下一个Java的主版本将于2018年3月发布,命名为 Java 18.3,紧接着再过六个月将发布 Java 18.9 这意味着Java的更新从传统的以特性驱动的发布周期,转变为以时间驱动的(6个月为周期)发布模式,并逐步的将Oracle JDK原商业特性进行开源 针对企业客户的需求,Oracle将以三年为周期发布长期支持版本(l.

博客 605

set_data_check专题[使用,report_timing,setup/hold检查]

set_data_check用于约束『数据-对-数据』的『建立保持』时间检查,通常被称为非时序约束 ( non-sequential constraints ), 理论上set_data_check 可以设在任意的两个data pin 上,其中一个pin 称为 constrained pin 类似于寄存器的data pin, 另一个pin 称为related pin 类似于寄存器的clock pin.

cy413026的博客 1万+

Java11的新特征

1

python_studying的博客 423

小白 虚拟机 kali_Linux安装 详细教程

安装版本:VMmare workstation pro kali_Linux 安装环境:Window10 首先我们先了解一下什么是kali_linux: Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。每一季度更新一次。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行

m0_50917178的博客 9万+

superpowers-中文使用说明

《obra/superpowers:AI辅助开发的流程纪律工具集》 摘要:obra/superpowers是一套面向AI辅助软件开发的系统化流程规范,包含14个核心技能,强调"先理解后行动"的纪律性开发方法。该工具集定义了从头脑风暴到代码评审的完整工作流,要求严格遵循测试驱动开发、子代理隔离执行等原则。核心特色包括:1) 任何实现前必须完成设计和评审;2) 采用红-绿-重构的TDD循环;3) 复杂任务通过独立子代理串行处理;4) 所有产出需经过双重验证(规格合规+代码质量)。该工具集特别注重文档化和可验证性

qq_22786633的博客 765

java9&java10&java11新特性介绍

JAVA9&JAVA10JAVA11新特性说明

weixin_44335707的博客 1568

WGS-84 ECEF ENU 坐标系学习记录

地球坐标系固定在地球上而随地球一起在空间做公转和自转运动,因此地球上任一固定点在地球坐标系的坐标就不会由于地球旋转而变化。地心地固直角坐标系和大地坐标系都属于这种坐标系。 一、 几种坐标系 地心地固直角坐标系(ECEF)坐标系 其原点为地球的质心,x轴延伸通过本初子午线(0度经度)和赤道(0deglatitude)的交点。 z轴延伸通过的北极(即,与地球旋转轴重合)。 y轴完成右手坐标系,穿...

YYshuangshuang的博客 1万+

科普文:Java8、9、10、11的新特性

详细8、9、10、11的新特性见官方的What's New。Java8 Lambda表达式 Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样传递)。使用它可以写出更简洁,更灵活的的代码。作为一种观念更紧凑的代码风格,使Java的语言表达能力得到了提升。

为无为,事无事,味无味。 887

STM32F103C8T6板子使用说明

pcb版,把众多元器件集中到一个板子上面管理。

LYC_462857656的博客 2191

视觉SLAM的前段后端最详细的梳理(硕士入门知识框架更新)

文章目录视觉SLAM的组成结构视觉里程计(VO)-特征点法 -构建稀疏点云地图-直接法 -构建稠密或半稠密的地图 --需要使用 RGB-D 传感器视觉里程计--总结:SLAM 后端研究滤波器法非线性优化后端方式的差异(有五种优化方式):单目视觉里程计的初始化:运动估计:半直接法运动估计的优化方案:关于解决累计误差的一些方法:关键帧的建图及后端优化:特征的深度估计:图优化的后端研究:视觉与IMU融合的分类:视觉与IMU的融合的优势:存在的问题:优秀的开源: 视觉SLAM的组成结构 视觉里程计(VO) -特

DC 6812

JAVA【JAVA9&10&11新特性】

从Java9这个版本开始,Java的计划发布周期是6个月,下一个Java的主版本将于2018年3月发布,命名为Java18.3,紧接着再过六个月将发布Java18.9。模块化系统jShell命令多版本兼容jar包接口的私有方法钻石操作符的使用升级语法改进try语句String存储结构变更便利的集合特性of()增强的StreamAPI全新的HTTP客户端APIDeprecated的相关APIjavadoc的HTML5支持。...

芊樱烛渊的博客 1475

EEMD算法原理及应用

本博客主要概括EEMD算法的背景、原理以及应用,利用EEEMD对信号进行分解,然后选择有用的IMF分量进行叠加以完成信号的重构,从而实现对信号降噪。本文配套的源代码见文中链接,可供大家免费下载。

总结论文中的算法并给出论文的复现代码 4万+

Java9,10,11的新特性

jdk9 1. 目录结构改变 2. 模块化系统 使用junit也必须要先在module-info.java下先requires一下 3. jshell命令 /vars列出所有变量 /methods列出所有定义的方法 /list列出到目前为止[定义的]数据的列表 /edit调出编辑框 jshell中再次定义一个变量是可以的, 比如之前已经定义了int m =10;相当于一个覆盖 没有受检异常是指, 没有编译时异常throws xxException或tryCatch

weixin_43744059的博客 676

一文搞定离线环境下的RAG引擎部署

在人工智能浪潮下,技术已成为构建智能问答、文档分析和代码助手等应用的核心。然而,在许多企业场景中,出于数据安全和性能的考虑,服务器往往部署在中,并要求极致的推理效率。这给依赖外部资源的应用部署带来了巨大挑战。如何在这种严苛的环境下,完整、可靠地部署一套包含向量数据库、**高性能推理服务(vLLM)**和Python后台的复杂RAG系统呢?本文将为你提供一个,手把手教你如何使用 Docker 技术,将一套基于 Weaviate 和的 Python RAG 应用完整打包,并在离线环境中一键部署。

木鱼时刻的专栏 1242

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

016Java9、10、11新特性

Java9新特性: JDK 和 JRE 目录结构的改变: Java8目录结构: bin 目录 包含命令行开发和调试工具, 如javac, jar和javadoc。 include目录 包含在编译本地代码时使用的C/C++头文件 lib 目录 包含JDK工具的几个JAR和其他类型的文件。 它有一个tools.jar文件, 其中包 含javac编译器的Java类 jre/bin 目录 包含基本命令, 如java命令。 在Windows平台上, 它包含系统的运行时动态链 接库(DLL)

传说中国的博客 174

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java 8 到 Java 24 新特性一览

本文系统梳理了Java 8至Java 24各版本的新特性,重点介绍了Java 8的重要更新。Java 8引入了Lambda表达式、方法引用、接口默认方法和静态方法等语言特性,显著提升了代码简洁性和可读性。核心库方面,新增了Stream API、Optional类、全新的日期时间API以及并发增强工具,优化了集合操作、空值处理和异步编程。JVM层面,移除了永久代,引入元空间,并改进了垃圾回收机制和HashMap性能。这些特性为开发者提供了更强大的工具和更高的性能,推动了Java的现代化进程。

weixin_53933896的博客 18万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java9、10、11特性总结

一、Java9 1、接⼝私有⽅法 JDK8新增了静态⽅法和默认⽅法,但是不⽀持私有⽅法 JDK9中新增了私有⽅法 public interface OrderPay { void pay(); default void defaultPay() { privateMethod(); } //接⼝的私有⽅法可以在JDK9中使⽤ privat...

hxt的博客 701

Java新特性

纵观Java这几年的版本变化,在Java被收入Oracle之后,Java以小步快跑的迭代方式,在功能更新上迈出了更加轻快的步伐。基于时间发布的版本,可以让Java研发团队及时获得开发人员的反馈,因此可以看到最近的Java版本,有很多语法层面简化的特性。同时,Java在支持容器化场景,提供低延迟的GC方面(ZGC等)也取得了巨大的进步。孵化器(Incubator)阶段:这是新特性最早的开发和试验阶段,此时新特性只能作为一个单独的模块或库出现,而不会包含在Java SE中。

2301_80152021的博客 2491

jdk9、10、11新特性

用过Python的童鞋都知道,Python 中的读取-求值-打印循环( Read-Evaluation-Print Loop )很方便。它的目的在于以即时结果和反馈的形式。java9引入了jshell这个交互性工具,让Java也可以像脚本语言一样来运行,可以从控制台启动 jshell ,在 jshell 中直接输入表达式并查看其执行结果。当需要测试一个方法的运行效果,或是快速的对表达式进行求值时,jshell 都非常实用。除了表达式之外,还可以创建 Java 类和方法。

noob9527的博客 588

【Java】从java8到java17各版本新特性详解

下面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线,可以看出,JDK 17的支持时间最长,可以延续到2029年9月。考虑到技术更新的速度,这次免费商用8年的时间可谓是经过精心考虑,旨在让用户放心地升级到JDK 17(不过JDK 8的支持时间更长,可以延续到2030年12月)。从JDK诞生到现在,仅有几个版本得到了长期支持,主要包括JDK 7、JDK 8、JDK 11以及即将发布的JDK 17,它将是继Java 8之后最重要的LTS版本,是Java社区八年努力的成果。

一个天蝎座的程序猿 5891

Java 9、10、11,谁才是Java程序员的本命?

同样的调查,但奇妙的是双方调查结果大致相同,国外的Java程序员也是更多的在使用Java 8。现在Java 9和10都已经发布了,根据Oracle给出的半年一个版本的约定,没有多久Java 11也将和大家见面。那么问题来了,现在使用Java 8的程序员更愿意迁移到这三个版本的哪个版本呢?  Java 9 Java 9虽然是三个备选选项中发布最早的版本,并且OpenJDK董事会主席兼Oracle...

java03_15的博客 2443

【Java 8 新特性】Java 8 新特性大全

【Java 8 新特性】目录Java Util StreamJava Util FunctionJava Util ConcurrentJava UtilJava TimeJava MathJava Lang Java Util Stream 【Java 8 新特性】Java Stream中forEachOrdered()和forEach() 【Java 8 新特性】如何将Java流(Stream)转化成数组(Array) Java Util Function Java Util Concurrent

猫巳的博客 3034

【Java】Java 17 新特性概览

Java 11 于 2021年09月14日 正式发布,且为长期支持版本(Long-Term-Support - LTS)。。下面为 Oracle Java SE 产品的一些关键产品日期示例(

迪曼奥特迦-博客 1万+

Java 8的新特性—终极版

前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency、Java 8 Date Time API Tutorial : LocalDateTime和Abstract Class Versus

飞鸟Blog 14万+

白骑士的Java教学Java新特性 6.5 Java 15-17新特性

欢迎继续深入探索Java的新特性!在Java 15到Java 17中,Java平台引入了许多重要的新特性和改进,这些变化使得Java语言更加强大和灵活。通过学习这些新特性,你将能够编写更加高效和优雅的代码,提高开发效率和代码质量。在本篇博客中,我们将详细介绍Java 15到Java 17中的关键新特性,帮助你掌握这些版本带来的最新变化。

JeremyTC的博客 749
上一篇: 这也太简单了!!Zookeeper核心ZAB协议
下一篇: 一个基于Spring Boot+Vue+Redis的物联网智能家居系统
yi博说
博客等级 码龄11年 20粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值