JDK9 新特性详解,2017-09-21 正式发布

news/2024/4/28 6:01:11/文章来源:https://blog.csdn.net/weixin_38933806/article/details/128938797

1、Java9 新特性之目录结构

  包含 [jdk8](https://so.csdn.net/so/search?q=jdk8&spm=1001.2101.3001.7020) 及以前的 jdk 版本,所有目录结构以及目录含义如图:

   jdk9 之后,目录结构发生变化如图:

 这个新特性只要了解下就可以了,这个目录结构是方便为了接下来新特性做保证

2、Java9 新特性之 JShell 工具

  怎么理解,怎么用呢?这个只是针对于 java9 来说,相当于 cmd 工具,你可以和 cmd 一样,直接写方法等等,不过我认为只是适用于初学者做一些最简单的运算和写一些方法,在 cmd 中打开这个工具:

     进入工具后可以做一些简单的 java 操作

    等等,我认为只适用于初学者学习 java 不用其他编辑工具就可以学习 java

3、Java9 新特性之模块化

    一个大型的项目,比如淘宝商城等,都会包含多个模块,比如订单模块,前台模块,后台管理模块,广告位模块,会员模块..... 等等,各个模块之间会相互调用,不过这种情况下会很少,只针对特殊情况,如果一个项目有 30 个模块系统进行开发,但是只要某个单独模块运行时,都会带动所有的模块,这样对于 jvm 来说在内存和性能上会很低,所以,java9 提供了这一个特性,某一个模块运行的时候,jvm 只会启动和它有依赖的模块,并不会加载所有的模块到内存中,这样性能大大的提高了。写法上如下:

    一个项目中的两个模块,模块之间通过 module-info.java 来关联,在 IDEA 编辑器右键创建 package-info.java

    在这个两个模块 java9Demo 和 java9Test 中,java9demo 编写一个实体类 Person, 在 java9Test 调用这样一个过程这个是 java9Demo 将 java9Test 模块需要的文件导出 exports  把它所在的包导出 

module java9Demo{
exports com.mdxl.layer_cj.entity;
}

   然后在 java9Test 模块中创建一个 package-info.java, 引入 java9Demo 模块导出包名

module java9Test{
requires java9Demo;
}

  这样就可以直接在 java9Test 中引入 Person 实体类了,exports 控制着那些包可以被模块访问,所以不被导出的包不能被其他模块访问。

4、Java9 新特性之多版本兼容 Jar 包

   怎么理解呢?好多公司用的 JDK 大部分还是老版本,JDK6、7 都有,他们都不敢升级主要是因为兼容的问题,但是 JDK9 做到了这一点,就是不管公司的项目是用的 JDK6、7、8 甚至 5,他都可以兼容不出错,打个比方,你之前用的是 iphone5,现在出现了 iPhone6,iphone7,iphon8 和 iphone9,但是你不敢买 9,因为你自己已经适应了 iphone5 的所有手机的运行流程,6,7,8 每个手机的运行流程不一样,但是这个 9 很强大,它能够识别你现在所用的版本 iphone 是 5,所以当你升级到 iphone9 的时候,你的这个手机运行流程还是 iphone5 的流程,只是在原有基础上拥有了更多的 iphone9 的所有优势。

5、Java9 新特性之接口 Interface 的升级

public interface FilterProcess {

//java 7 及以前 特性  全局常量 和抽象方法
public static final String a ="22";
boolean process(T t);//java 8 特性 静态方法和默认方法
default void love(){System.out.println("java8 特性默认方法");
}
static void haha(){System.out.println("java8 特性静态方法");
}//java 9 特性 支持私有方法
private void java9(){}

}

6、Java9 新特性之钻石操作符的升级

//java6及以前
Map<String,String> map7 = new HashMap<String,String>();
//java7和8 <>没有了数据类型
Map<String,String> map8 = new HashMap<>();
//java9 添加了匿名内部类的功能 后面添加了大括号{} 可以做一些细节的操作
Map<String,String> map9 = new HashMap<>(){};

7、Java9 新特性之异常处理 try 升级

  首先看下 jdk6,7,8,9 的 try catch 的比较Java6 处理方式:

//java7及以前写法 每一个流打开的时候都要关闭
@Test
public void test7(){
InputStreamReader reader = null;
try{
reader = new InputStreamReader(System.in);
reader.read();
}catch (IOException e){
e.printStackTrace();
}finally {
if (reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

  JDK7,8 共同的处理方式:

//java7和8及 每一个流打开的时候都要关闭,但是在try的括号中来进行关闭
@Test
public void test7(){
try(InputStreamReader reader =new InputStreamReader(System.in)){
reader.read();
}catch (IOException e){
e.printStackTrace();
}
}

  java9 的处理方式:

//java9及 每一个流打开的时候都要关闭,但是在try的括号中来进行关闭,在
//java8的基础上进一步升级 直接在try括号中直接写入 变量就好,如果有多个流,就用分号隔开
//try(reader;writer){}
@Test
public void test7(){
InputStreamReader reader =new InputStreamReader(System.in);
try(reader){
reader.read();
}catch (IOException e){
e.printStackTrace();
}
}

8、Java9 新特性之特殊标识符增加限制

  JDK8 之前 String \_ ="hello";  这样的标识符可以用,JDK9 就用不到。

9、Java9 新特性之 String 底层存储结构更换

  JDK8 之前 String 的底层结构类型都是 char \[\] , 但是 JDK9 就替换成 byte \[\] 这样来讲,更节省了空间和提高了性能。

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

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

10、Java9 新特性之 Stream API 新方法的添加

  在原有 Stream API 新添加了 4 个方法,takeWhile dropWhile ofNullable iterate (新重载方法)首先解释 takeWhile 当达到一定条件就结束:输出结果为 45 43,如图

  而 dropWhile 则和 takeWhile 相反ofNullable, 在 [java8](https://so.csdn.net/so/search?q=java8&spm=1001.2101.3001.7020) 中 Stream 中的元素不能完全为 null,否则空指针异常,而在 java9 的升级中,允许创建 nulliterate 不加条件无线循环

11、Java9 新特性之引进 HttpClient

  以往我们都是通过 maven 添加 httpclient ,java9 直接引入即可Java9 所有特性都是为了提高性能和内存。。。。

https://blog.csdn.net/qq_25391785/article/details/126050088?spm=1001.2014.3001.5502

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

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

相关文章

ChatGPT的火爆出圈,你对它有几分了解?

文章目录1.ChatGPT是什么&#xff1f;2.ChatGPT能做什么&#xff1f;2-1.什么是自然语言模型&#xff1f;3.ChatGPT带来的评价4.了解完ChatGPT之后&#xff0c;你会有什么反思&#xff1f;4-1.为什么微软不自己研发ChatGPT&#xff1f;4-2.Elon Musk为什么退出OpenAI公司&#…

深度学习——注意力机制(笔记+代码)

1.从心理学的角度出发 人类根据随意线索&#xff08;随着意志&#xff0c;主动的&#xff0c;有意识&#xff09;和不随意线索&#xff08;无主动&#xff0c;潜意识&#xff09;选择注意点 第一眼看到红色咖啡杯比较突出和易见就是潜意识的不随意线索 随着意识想主动读书&…

谁说菜鸟不会数据分析,不用Python,不用代码也轻松搞定

作为一个菜鸟&#xff0c;你可能觉得数据分析就是做表格的&#xff0c;或者觉得搞个报表很简单。实际上&#xff0c;当前有规模的公司任何一个岗位如果没有数据分析的思维和能力&#xff0c;都会被淘汰&#xff0c;数据驱动分析是解决日常问题的重点方式。很多时候&#xff0c;…

TypeScript快速入门

TypeScript快速入门1.TypeScript介绍1.1.TypeScript为什么要为JS添加类型支持1.2.TypeScript相比JS优势2.TypeScript初体验2.1.安装编译TS的工具包2.2.编译并运行TS代码2.3.简化运行TS代码3.TypeScript常用类型3.1.类型注解3.2.常用基础类型3.3.原始类型 number/string/boolean…

MG996R舵机介绍

舵机简介舵机是一种位置&#xff08;角度&#xff09;伺服的驱动器&#xff0c;适用于那些需要角度不断变化并可以保持的控制系统。在高档遥控玩具&#xff0c;如飞机、潜艇模型&#xff0c;遥控机器人中已经得到了普遍应用。舵机主要是由外壳、电路板、驱动马达、减速器与位置…

【c语言技能树】文件

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

NAS系列 硬件选择

转自我的博客文章https://blognas.hwb0307.com/nas/3224&#xff0c;内容更新仅在个人博客可见。欢迎关注&#xff01; 前言 经过《NAS系列 为什么你需要一台NAS》的简单介绍&#xff0c;如果你也决定像我一样组装一台自己的NAS&#xff0c;那么就千万不要错过本文喔&#xff…

负载均衡反向代理下的webshell上传+apache漏洞

目录一、负载均衡反向代理下的webshell上传1、nginx 负载均衡2、搭建环境3、负载均衡下的 WebShell连接的难点总结难点一、需要在每一台节点的相同位置都上传相同内容的 WebShell难点二、无法预测下次的请求交给哪台机器去执行。难点三、下载文件时&#xff0c;可能会出现飘逸&…

【3】深度学习之Pytorch——如何使用张量处理表格数据集(葡萄酒数据集)

张量是PyTorch中数据的基础。神经网络将张量输入并产生张量作为输出&#xff0c;实际上&#xff0c;神经网络内部和优化期间的所有操作都是张量之间的操作&#xff0c;而神经网络中的所有参数&#xff08;例如权重和偏差&#xff09;也都是张量。 怎样获取一条数据、一段视频或…

Springboot + RabbitMq 消息队列

前言 一、RabbitMq简介 1、RabbitMq场景应用&#xff0c;RabbitMq特点 场景应用 以订单系统为例&#xff0c;用户下单之后的业务逻辑可能包括&#xff1a;生成订单、扣减库存、使用优惠券、增加积分、通知商家用户下单、发短信通知等等。在业务发展初期这些逻辑可能放在一起…

openGL学习之GLFW和GLAD的下载和编译

背景:为什么使用GLFW和GLADOPenGL环境 目前主流的桌面平台是GLFW和GLAD之前使用的GLUT和Free GLUT已经基本淘汰了&#xff0c;所以记录一下如何下载GLFW和GLAD并且编译.GLFW下载:An OpenGL library | GLFW复制到你想存放的位置,我这里就存放到C盘Libaray文件夹下了,这里是我存放…

中国区注册使用ChatGPT指南(OpenAI‘s services are not available in your country)

ChatGPT又火了&#xff0c;各大平台热搜提到手软。暴增的访问量&#xff0c;即使强如ChatGPT&#xff0c;也表示顶不住了。Openai表示服务器已满负荷&#xff0c;ChatGPT暂无法提供服务由于目前ChatGPT未在中国开放&#xff0c;所以国内目前是无法注册使用ChatGPT。但我经过一番…

『 MySQL篇 』:MySQL表的聚合与联合查询

基础篇 MySQL系列专栏(持续更新中 …)1『 MySQL篇 』&#xff1a;库操作、数据类型2『 MySQL篇 』&#xff1a;MySQL表的CURD操作3『 MySQL篇 』&#xff1a;MySQL表的相关约束4『 MySQL篇 』&#xff1a;MySQL表的聚合与联合查询目录一. 聚合查询1.1 聚合函数1.2 GROUP BY子句…

Python将字典转换为csv

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

MySQL篇02-三大范式,多表查询

数据入库时,由于数据设计不合理&#xff0c;会存在数据重复、更新插入异常等情况, 故数据库中表的设计遵循的设计规范&#xff1a;三大范式1.第一范式(1NF)要求数据库的每一列都是不可分割的原子数据项&#xff0c;即原子性。强调的是列的原子性&#xff0c;即数据库中每一列的…

攀升MaxBook P2电脑U盘重装系统方法教学

攀升MaxBook P2电脑U盘重装系统方法教学。攀升MaxBook P2电脑是一款性价比非常高的笔记本。有用户购买了这款电脑后&#xff0c;想要将系统进行重装。今天和大家分享一个U盘重装系统的方法&#xff0c;学会这个方法后以后就可以自己轻松去重装电脑系统了。接下来一起看看具体的…

相机坐标系的正向投影和反向投影

1 、正向投影: 世界坐标系到像素坐标系 世界3D坐标系(x, y, z) 到图像像素坐标(u,v)的映射过程 &#xff08;1&#xff09;世界坐标系到相机坐标系的映射。 两个坐标系的转换比较简单&#xff0c;就是旋转矩阵 平移矩阵&#xff0c;旋转矩阵则是绕X&#xff0c; Y&#xff…

Thread 类及常见方法

Thread 类是 JVM 用来管理线程的一个类&#xff0c;换句话说&#xff0c;每个线程都有一个唯一的 Thread 对象与之关联。用我们上面的例子来看&#xff0c;每个执行流&#xff0c;也需要有一个对象来描述&#xff0c;类似下图所示&#xff0c;而 Thread 类的对象就是用来描述一…

分享111个JS焦点图代码,总有一款适合您

分享111个JS焦点图代码&#xff0c;总有一款适合您 111个JS焦点图代码下载链接&#xff1a;https://pan.baidu.com/s/1GxjW5m9DNOPEQd-Qf_gGSA?pwd4aci 提取码&#xff1a;4aci Python采集代码下载链接&#xff1a;https://wwgn.lanzoul.com/iKGwb0kye3wj jQuery宽屏左右…

没有人能比我快,用Python写一个自动填写答案的脚本

前言 不是标题党&#xff0c;真的就是没有人比我快&#xff0c;今天用Python写了个自动填写答案的脚本&#xff0c;快就算了&#xff0c;准确率还是百分之百 话不多说 咱先看代码 后看效果 不想看全文的 点击文末名片 领取源码 环境使用 Python 3.8Pycharm 模块使用 imp…