Java 9 新特性,看这里就明白了

2018 年 2 月 26 日 开源中国 木九天


摘要: 


1.目录结构 

2.repl工具 jShell命令 

3.模块化 

4.多版本兼容jar包 

5.接口方法的改进(在接口中 jdk7 只能声明全名常量和抽象方法 jdk8 添加了静态方法和默认方法 jdk9添加了私有方法)

6.钻石操作符升级 可以有{} 

7.异常处理try升级 

8.下划线标识符命名的限制 _ 不允许了 

9.String底层存储结构的变更(char数组变成byte字节数组) 

10.增强了Stream API(在java8基础上,新增加4个方法) 

11.jdk9 中引入httpClient api 代替原有的HttpURLConnection


1、Java9 新特性之---目录结构


包含jdk8及以前的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  把它所在的包导出 



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



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


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


怎么理解呢?


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


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



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



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


首先看下jdk6,7,8,9 的try catch的比较


Java6处理方式:



java7,8 共同的处理方式:



 java9的处理方式:



这下子应该一幕了然了吧


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


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


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


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也更换了底层数据结构


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


在原有Stream API 新添加了4个方法,takeWhile dropWhile ofNullable iterate(新重载方法)


首先解释 takeWhile 当达到一定条件就结束:输出结果为45 43,如图


    


而 dropWhile 则和takeWhile 相反


ofNullable, 在java8中 Stream中的元素不能完全为null,否则空指针异常,而在java9的升级中,允许创建null


iterate 不加条件无线循环


    


11、Java9新特性之---引进HttpClient


以往我们都是通过maven添加httpclient ,java9直接引入即可

 

Java9所有特性都是为了提高性能和内存。



推荐阅读

给程序员的 2018 新年计划清单

程序员的春节正确打开方式:防火防盗防老板...

25 副为程序员定制的对联,祝大家除夕快乐!

深入了解 Token 认证的来龙去脉

大型高并发与高可用的三层缓存架构总结

点击“阅读原文”查看更多精彩内容

登录查看更多
1

相关内容

Java 是一门编程语言,拥有跨平台、面向对象、泛型编程等特性。
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
【2020新书】C++20 特性 第二版,A Problem-Solution Approach
专知会员服务
57+阅读 · 2020年4月26日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
TensorFlow 2.0 学习资源汇总
专知会员服务
66+阅读 · 2019年10月9日
21个必须知道的机器学习开源工具!
AI100
13+阅读 · 2019年9月13日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
6大最常用的Java机器学习库一览
AI前线
4+阅读 · 2018年10月9日
从零开始一起学习SLAM | 学习SLAM到底需要学什么?
计算机视觉life
8+阅读 · 2018年9月9日
Java开发者必看!机器学习开发库精选
云栖社区
5+阅读 · 2018年8月22日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
Bidirectional Attention for SQL Generation
Arxiv
4+阅读 · 2018年6月21日
Arxiv
5+阅读 · 2018年6月12日
VIP会员
相关VIP内容
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
【2020新书】C++20 特性 第二版,A Problem-Solution Approach
专知会员服务
57+阅读 · 2020年4月26日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
TensorFlow 2.0 学习资源汇总
专知会员服务
66+阅读 · 2019年10月9日
相关资讯
21个必须知道的机器学习开源工具!
AI100
13+阅读 · 2019年9月13日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
6大最常用的Java机器学习库一览
AI前线
4+阅读 · 2018年10月9日
从零开始一起学习SLAM | 学习SLAM到底需要学什么?
计算机视觉life
8+阅读 · 2018年9月9日
Java开发者必看!机器学习开发库精选
云栖社区
5+阅读 · 2018年8月22日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
Top
微信扫码咨询专知VIP会员