ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java 9&10&11新特性

2022-01-12 09:06:38  阅读:152  来源: 互联网

标签:11 10 Java Stream Optional jShell 集合 方法


Java 9 的新特性

  • 从Java 9 这个版本开始,Java 的计划发布周期是 6 个月

  • 这意味着Java的更新从传统的以特性驱动的发布周期,转变为以时间驱动的(6 个月为周期)发布模式,并逐步的将 Oracle JDK 原商业特性进行开源。

  • 针对企业客户的需求,Oracle 将以三年为周期发布长期支持版本(long term support)

  • Java 9 提供了超过150项新功能特性,包括备受期待的模块化系统、可交互的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强、扩展提升、性能管理改善等。可以说Java 9是一个庞大的系统工程,完全做了一个整体改变。

  • 主要新特性
    在这里插入图片描述
    .
    .

一、Java 8之后目录改变
在这里插入图片描述
在这里插入图片描述

.
.

二、模块化系统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

.

  • exports:控制着哪些包可以被其它模块访问到。所有不被导出的包默认都被封装在模块里面。
    在这里插入图片描述

  • requires:指明对其它模块的依赖。

在这里插入图片描述

.
.

三、Java的REPL工具: jShell命令

  • 设计理念:即写即得、快速运行
  • Java 9 中终于拥有了 REPL工具:jShell。让Java可以像脚本语言一样运行,从控制台启动jShell,利用jShell在没有创建类的情况下直接声明变量,计算表达式,执行语句。即开发时可以在命令行里直接运行Java的代码,而无需创建Java文件,无需跟人解释”public static void main(String[] args)”这句废话。
  • jShell也可以从文件中加载语句或者将语句保存到文件中。
  • jShell也可以是tab键进行自动补全和自动添加分号

.
.

四、语法改进:接口的私有方法

  • Java 8中规定接口中的方法除了抽象方法之外,还可以定义静态方法和默认的方法。
  • 在Java 9中,接口更加的灵活和强大,连方法的访问权限修饰符都可以声明为private的了,此时方法将不会成为你对外暴露的API的一部分

.
.

五、语法改进:钻石操作符使用升级

  • 我们将能够与匿名实现类共同使用钻石操作符(diamond operator),在Java 8中,赋的值必须要显示的在<>定义类型,但Java 9不用了。

.
.

六、语法改进:try语句

  • Java 8 中,可以实现资源的自动关闭,但是要求执行后必须关闭的所有资源必须在try子句中初始化,否则编译不通过。
    在这里插入图片描述
  • Java 9 中,用资源语句编写try将更容易,我们可以在try子句中使用已经初始 化过的资源,此时的资源是final的(在try语句中不能修改属性的值)。
    在这里插入图片描述
    .
    .

七、String存储结构变更

  • 结论:String 再也不用 char[] 来存储啦,改成了 byte[] 加上编码标记,节约了一些空间
  • 并且StringBuffer、StringBuilder也变成用byte[]存储了!
    在这里插入图片描述
    .
    .

八、集合工厂方法:快速创建只读集合

  • Java 9之前要创建一个只读、不可改变的集合,就要包装成一个不可修改的集合–>Collections类的静态方法unmodifiableXxx(Xxx)
    在这里插入图片描述

  • Java 9因此引入了方便的方法" 集合.of() ",创建的就是一个只读、不可改变的集合,这使得类似的事情更容易表达。
    在这里插入图片描述

.
.

九、InputStream 加强

  • InputStream 终于有了一个非常有用的方法:transferTo,可以用来将数据直接传输到 OutputStream!!!
    在这里插入图片描述
    .
    .

十、增强的StreamAPI

  • takeWhile():在有序的Stream 中,takeWhile 返回从开头开始的尽量多的元素(遇到不满足条件的就不在遍历下去,即使后面的数据满足条件)。

  • dropWhile():dropWhile 的行为与 takeWhile 相反,返回剩余的元素(遇到第一个不满足的情况就获取后面所有的元素)。

  • ofNullable():Java 8 中 Stream 的参数不能只有单个null元素,否则会报空指针异常。
    而 Java 9 中的 ofNullable 方法允许我们创建一个单元素 Stream,可以包含一个非空元素,也可以创建一个空Stream。

  • iterate()重载(无限流):这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。
    在这里插入图片描述

.
.

十一、Optional获取Stream的方法

  • Optional类中添加了stream()的使用
    在这里插入图片描述

.
.
.

Java 10 新特性

  • LTS (Long-Term-Support) 版本:长期稳定性版本!!!!!!!!!
  • Java 9 和 Java 10 都不是 LTS (Long-Term-Support) 版本。和过去的 Java 大版本升级不同,这两个只有半年左右的开发和维护期。而 Java 11,也就是 18.9 LTS,才是 Java 8 之后第一个 LTS 版本。

.

主要新特性
在这里插入图片描述

.
.

一、局部变量类型推断

var:只适用于局部变量,不适用于类变量

  • 适用于以下情况:
    在这里插入图片描述
  • 在局部变量中使用时,如下情况不适用:
    情况0:Lambda表达式
    在这里插入图片描述

.
.

工作原理
在处理 var时,编译器先是查看表达式右边部分,并根据右边变量值的类型进行推断,作为左边变量的类型,然后将该类型写入字节码当中。

  • var不是一个关键字:意味着可以当变量名使用,但不可以当类名使用
  • var并不会改变Java是一门静态类型语言的事实

.
.

二、集合新增创建不可变集合的方法

  • Java 9 开始,Jdk 里面为集合(List / Set / Map)都添加了of (jdk9新增)和copyOf (jdk10新增)方法,它们两个都用来创建不可变的集合。
  • of()和copyOf()区别:
    在这里插入图片描述
  • 总结 :copyOf 方法会先判断来源集合是不是AbstractImmutableList 类型的,如果是,就直接返回,如果不是,则调用 of 创
    建一个新的集合。

.
.
.

Java 11 新特性

  • JDK 11 是一个长期支持版本(LTS, Long-Term-Support)
    在这里插入图片描述

.
.

一、新增了一系列字符串处理方法
在这里插入图片描述

.
.

二、Optional 加强

  • Optional 也增加了几个非常酷的方法,现在可以很方便的将一个 Optional 转换成一个 Stream, 或者当一个空 Optional 时给它一个替代的。
    在这里插入图片描述

.
.

三、局部变量类型推断升级

  • var上添加注解的语法格式,在jdk10中是不能实现的。在JDK11中加入了这样的语法
    在这里插入图片描述

.
.

四、全新的HTTP 客户端API
在这里插入图片描述

.
.

五、更简化的编译运行程序

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

  • 一个命令编译运行源代码的注意点:
    执行源文件中的第一个类, 第一个类必须包含主方法。
    并且不可以使用其它源文件中的自定义类, 本文件中的自定义类是可以使用的。

标签:11,10,Java,Stream,Optional,jShell,集合,方法
来源: https://blog.csdn.net/Xgg0210/article/details/122299700

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有