Java 9 - 18 各个版本新特性总结

【 Java 9 - 18 各个版本新特性总结,B站视频介绍】https://www.bilibili.com/video/BV1PT411P7Wn?vd_source=5a3a58ca0e99223ffb58cddf2f3a7282

一、模块化引入

        模块是 Java 9 中新增的一个组件,可以简单理解为是package的上级容器,是多个package的集合,一个jar可以有多个module,一个module可以有多个package。从代码结构上看:jar > module > package > class, interface

        Java 9 的模块通过 requires 和 exports 关键字,对自身所依赖(requires)的模块和自身暴露(exports)出去的内容(package)进行了声明。本模块只能使用其他模块暴露(exports)出来的内容(package),其他模块也只能使用本模块暴露(exports)出去的内容(package)。

二、String 底层存储结构变化

        对字符串采用更节省空间的内部表达,以提高字符串的内部表示中使用代替编码。

        在 Java8 中String的是实现是将字符存储在一个char类型的数组中,而char类型是由两个字节组成。但是Java官方人员根据上万个应用程序的heap dump信息进行了分析,大多数String对象仅包含Latin-1字符。此类字符只需要一个字节的存储空间,因此String对象内部char中的一半空间其实是未使用的。并且字符串都是用String Pool 来存储的,String Pool 通常使用了 JVM 的 heap 内存空间,Heap 内存空间又是 JVM 垃圾清理程序活动的地方。这样做不仅仅可以提高内存空间的使用率并且还能减少JVM垃圾清理的工作量。

        简单来讲就是:Java8 之前 String 的底层结构类型都是 char[] ,在 Java9 替换成 byte[] 这样就能更节省空间和提高性能。

        之所以替换是因为 之前一直是最小单位是一个char,用到两个byte,但是 Java8 是基于latin1的,而这个latin1编码可以用一个byte标识,所以当你数据明明可以用到一个byte的时候,我们用到了一个最小单位chat两个byte,就多出了一个byte的空间。所以Java9 在这一方面进行了更新,现在的Java9 是基于ISO/latin1/Utf-16  ,latin1和ISO用一个byte标识,UTF-16用两个byte标识,Java9 会自动识别用哪个编码,当数据用到1byte,就会使用iSO或者latin1 ,当空间数据满足2byte的时候,自动使用utf-16,节省了很多空间。

        同理,StringBuilder StringBuffer也更换了底层数据结构。

三、多版本兼容Jar

        多版本JAR(MR JAR)可能包含同一类的多个变体,每个变体都针对特定的Java版本。 在运行时,类的正确变体将被自动加载,这取决于所使用的Java版本。这允许库作者在早期利用新的Java版本,同时保持与旧版本的兼容性。

应用场景:

        比如某个架构师开发了一个工具类MyUtils,该工具类里面使用了jdk9的新特性,这时候该 具在推广的时候会遇到很大的阻力,因为很多用户还没有升级jdk版本,JDK9推出了多版本兼用jar的特性就允许该架构师编写一个同类名的工具MyUtils,并在该工具类中不使用jdk9的新特性,然后两个同类名的类一起打包成为一个jar,提供给用户去使用,这时候即可根据用户当前使用的jdk版本而选择不同的 工具类了。

util.jar
│ MyUtils.class

└─META-INF
   │ MANIFEST.MF
   │
   └─versions
 └─9
  MyUtils.clas

简言之:

        该jar包在java 8中可以执行最上层的MyUtils.class,在Java 9中自动选择执行目录9下的 MyUtils.class。

四、接口私有方法

        当我们在一个接口里写多个默认方法或者静态方法的时候,可能会遇到程序重复的问题。我们可以把这些重复的程序提取出来,创建一个新的方法,用private进行修饰,这样就创造了一个只有接口可以调用 的私有方法。

    public interface UserDao {
        default void methodA(){
            System.out.println("methodA...");
            System.out.println("A....");
            System.out.println("B....");
            System.out.println("C....");

        }

        default void methodB(){
            System.out.println("methodB...");
            System.out.println("A....");
            System.out.println("B....");
            System.out.println("C....");
        }
    } 

        以上代码的methodA与methodB存在着代码冗余问题,我们可以把这部分公共的方法抽取成私有的方法提供给接口内部去使用。

    public interface UserDao {
        default void methodA(){
            System.out.println("methodA...");
            commons();
        }

        default void methodB(){
            System.out.println("methodB...");
            commons();
        }

        //定一个私有的方法,把重复部分的代码抽离出来。然后在methodA与methodB方法内部去调用。
        //私有方法只能在本类中调用,这里包括接口的实现类也不能调用。
        private void commons(){
            System.out.println("A....");
            System.out.println("B....");
            System.out.println("C....");

        }

五、JShell工具 

        针对于Java9来说,相当于cmd工具,可以和cmd一样,直接写方法等等,不过我认为只是适用于初学者做一些最简单的运算和写一些方法。

六、try-with-resources 增强 

         动机:try-with-resources 声明在 JDK 9 已得到改进。如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中使用该变量,而无需在 try-with-resources 语句中声明一个新变量

        介绍 :try-with-resources 是 JDK 7 中一个新的异常处理机制,它能够很容易地关闭在 try-catch语句块中使用的资源。所谓的资源(resource)是指在程序完成后,必须关闭的对象。try-with-resources 语句确保了每个资源在语句结束时关闭。所有实现了 java.lang.AutoCloseable 接口(其中,它包括实现了 java.io.Closeable 的所有对象),可以使用作为资源。
  • java7之前 try的使用

        这里主要突出必须对资源(比如说IO流)进行显式关闭。
  •  java8 中try的新用法

         这里突出,资源不需要在进行显式关闭,只需要将资源的实例化对象放在try后面的括号中,使用结束后便会自动关闭。

  • java9 中try的变化

       可在try后面的括号中放入已经实例化过的对象。但是需要注意的是:这里所说的实例化对象默认被final修饰,所以在try中不能再对其进行修改,否则会报错;再者,try后面的()可以放入多个实例化对象,对象之间用分号隔开。

七、语法改进(下划线使用限制)

        Java8 之前 String _ ="hello"; 这样的标识符可以用,但在Java9中进行了限制使用。

八、Stream、Optional 增强,集合增强

  • 在原有Stream API 新添加了4个方法,takeWhile、dropWhile、ofNullable、iterate(新重载方法)
  • Optional的增强与优化
  • collection集合类的增强与优化

Java 9 新特性,看这里就明白了 51CTO博客Java 9 新特性,看这里就明白了,摘要:1.目录结构2.repl工具jShell命令3.模块化4.多版本兼容jar包5.接口方法的https://blog.51cto.com/u_15486212/5287850

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/22339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

gitlab建立新分支提交,cherry-pick部分更新

gitlab介绍 GitLab是一个基于Git的在线代码托管和协作平台,提供源代码管理、单元测试、CI/CD构建、代码审查等功能。它是一个开放源代码的Git仓库管理系统,使用 Ruby on Rails 构建GitLab 不仅具有自己的 Git 仓库管理系统,还具有很多其他的…

网络协议与攻击模拟-11-DHCP协议原理

DHCP 协议 1、掌握 DHCP 的工作原理 2、会在 Windows server 上去部署 DHCP 服务 3、抓流量 .正常 收到攻击后 一、 DHCP 1、 DHCP 基本概念 dhcp (动态主机配置协议):主要就是给客户机提供 TCP / IP 参数( IP 地…

App外包开发上线Google Play流程

完成App开发后需要在各大应用市场上线,国内的应用市场比较多,各自的规则也不相同,上线审核也比较复杂;国外上线主要是Google Play市场,它更重视隐私的保护,必须严格按照规范来保护个人隐私,因此…

【C++】模板的一点简单介绍

模板 前言泛型编程函数模板概念格式函数模板的原理函数模板的实例化 类模板类模板的定义格式类模板的实例化 前言 这篇博客讲的是模板的一些基本知识,并没有那么深入,但是如果你是为了过期末考试而搜的这篇博客,我觉得下面讲的是够了的。 之…

阿里云、腾讯云、移动云飙“价”:智能普惠成新风向?

经过过去一年的“低迷”境况之后,2023年云服务商因为AI大模型的爆发,重新燃起了斗志。站在当下的时间节点,云服务商们也在重新思考如何在新形势下,让自己占据更大的优势,于是一场围绕“技术竞争与市场争夺”的新战争打…

【总结】Numpy2

Numpy 1. 数组和数的运算 array1 np.arange(1,10) array1 # array([1, 2, 3, 4, 5, 6, 7, 8, 9]) array1 10 # array([11, 12, 13, 14, 15, 16, 17, 18, 19]) array1 - 10 # array([-9, -8, -7, -6, -5, -4, -3, -2, -1]) array1 * 10 # array([10, 20, 30, 40, 50, 60, 70…

3-《安卓基础》

3-《安卓基础》 一.Android系统架构二.四大组件1. Activity1.1 生命周期1.2. Activity四种启动模式1.3.Activity任务栈的概念1.4 面试题面试题1:onSaveInstanceState(Bundle outState),onRestoreInstanceState(Bundle savedInstanceState) 的调用时机&am…

小黑子—Java从入门到入土过程:第十一章 - 网络编程、反射及动态代理

Java零基础入门11.0 网络编程1. 初识网络编程2. 网络编程三要素3.IP三要素3.1 IPV4的细节3.1.1特殊的IP地址3.1.2 常用的CMD命令 3.2 InetAddress 的使用3.3 端口号3.4 协议3.4.1 UDP协议3.4.1 - I UDP 发送数据3.4.1 - II UDP 接收数据3.4.1 - III UDP 练习(聊天室…

前端列表页+element-puls实现列表数据弹窗功能

效果图: 这是一个修改的弹窗,我们要实现的功能是,在列表,点击修改按钮时,将数据带入到弹窗里面,点击保存时关闭弹窗。 1,点击修改展开弹窗 使用 eldialog组件,v-model绑定的值为tru…

Godot引擎 4.0 文档 - 入门介绍 - 学习新功能

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Learning new features — Godot Engine (stable) documentation in English 学习新功能 Godot 是一个功能丰富的游戏引擎。有很多关于它的知识。本页介绍了如何使用…

迪赛智慧数——柱状图(基本柱状图):全球自动化无人机智能支出预测

效果图 全球自动化无人机智能支出及预测分析,2022年机器人流程自动化支出10.4十亿美元,智能流程自动化支出13十亿美元,人工智能业务操作达10.8十亿美元,未来,这些数字将进一步增长,自动化无人机智能也将拥有…

华为OD机试真题 Java 实现【天然蓄水池】【2023Q1 200分】

一、题目描述 公元2919年,人类终于发现了一颗宜居星球——X星。现想在X星一片连绵起伏的山脉间建一个天然蓄水库,如何选取水库边界,使蓄水量最大? 要求: 山脉用正整数数组s表示,每个元素代表山脉的高度。…

Java基础-面向对象总结(3)

本篇文章主要讲解Java面向对象的知识点 面向对象的三大特性类的扩展(抽象类,接口,内部类,枚举) 目录 面向对象和面向过程的区别? 面向对象的五大基本原则 面向对象三大特性 继承 怎么理解继承 ? 继承和聚合的区别? 封装 多态 什么是多态 什么是运行时多…

数字识别问题

文章目录 6.1 MNIST数据处理6.2.1 训练数据6.2.2 变量管理6.3.1 保存模型6.3.1 加载计算图6.3.1 加载模型6.3.2 导出元图 6.1 MNIST数据处理 在直接在第6章的目录下面创建文件 compat.v1.是tensorflow2.x的语法,全部删掉 删除compat.v1.后的代码 # -*- coding: …

基于最新SolVES 模型与多技术融合【QGIS、PostgreSQL、ARCGIS、MAXENT、R】实现生态系统服务功能社会价值评估及拓展案例分析

目录 第一章 理论基础与研究热点 第二章 SolVES 4.0 模型运行环境配置 第三章 SolVES 4.0 模型运行 第四章 数据获取与入库 第五章 环境变量与社会价值的相关分析 第六章 拓展案例分析 SolVES模型(Social Values for Ecosystem Services)全称为生态…

如何使用SolVES 模型与多技术融合实现生态系统服务功能社会价值评估?

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

SSL/TLS认证握手过程

一: SSL/TLS介绍 什么是SSL,什么是TLS呢?官话说SSL是安全套接层(secure sockets layer),TLS是SSL的继任者,叫传输层安全(transport layer security)。说白点,就是在明文的上层和TCP层之间加上一层加密,这样就保证上层信…

Jenkins + docker-compose 在 Centos 上搭建部署

一、前期准备 1. 检查 CentOS上 是否安装 docker 可以使用以下命令: sudo docker version 如果已经安装了Docker,它将显示有关Docker版本和构建信息的输出。如果未安装Docker,将收到有关命令未找到的错误消息。 2. 检查是否安装 docker-…

吴恩达 x OpenAI Prompt Engineering教程中文笔记

Datawhale干货 作者:刘俊君,Datawhale成员 完整课程:《吴恩达ChatGPT最新课程》 🐳Reasons & Importance Important for research, discoveries, and advancement 对研究、发现和进步很重要 Accelerate the scientific resea…

MySQL 事务篇

事务有哪些特性? 原子性: 一个事务中的所有操作,必须全部执行。要么全部完成要么就不完成。中间如果出现错误,就要回滚到初始状态。 持久性: 事务处理结束后,对数据的修改就是永久的,就是系统故…