Java 9 新特性
Java9在语言上并没有添加太多的新特性,但在使用、性能上做了很改进。
一、模块间引用
Java9添加了模块化的概念,使得之前的控制访问权限有了改变。
之前:
- public
- protect
- (default,package)
- private
Java9
- public to everyone
- public but only for specific user
- public within a module
- protect
- (default,package)
- private
可以看到,对public类又做了进一步的限制,主要是对模块间的依赖做出限制,使得模块能够控制那些public类型能够被其他模块读取,以及该模块需要使用其他模块的类型。
如何定义模块
在src根目录下,创建module-info.java:
// 该模块的名称为 module.one
module module.one {// 该包下的所有public类型对其他模块可见export package.name;// 该public类型对其他模块可见export class.name;
}
// 该模块的名称为 module.two
module module.two {// 该模块将引用模块1// 该模块将能够使用模块1所开放的public类型// 其他的pubic类型将不可见require module.one;
}
以上是最简单的模块使用方式。
二、多版本jar包支持
即在不同java版本下,执行相应版本的代码。比如DateUtil.java,若在java7环境下,将执行java7的代码,在java8的环境下,将执行java8的代码。
在发布新版本的java后,用户可能不会升级到新环境, 但是项目可能会开始逐步升级到新版本,来提前适应即将到来的环境。此时就要对多个版本的支持。
实现
$ javac --release 11 java11/com/xiao/test/Tester.java
$ javac --release 8 java8/com/xiao/test/Tester.java
$ tree
.
├── java11
│ └── com
│ └── xiao
│ └── test
│ ├── Tester.class
│ └── Tester.java
└── java8└── com└── xiao└── test├── Tester.class└── Tester.java8 directories, 4 files
$ jar -v -c -f multiversion.jar -C java8 com/xiao/test/Tester.class --release 11 -C java11 com/xiao/test/Tester.class
已添加清单
正在添加: com/xiao/test/Tester.class(输入 = 428) (输出 = 296)(压缩了 30%)
正在添加: META-INF/versions/11/com/xiao/test/Tester.class(输入 = 429) (输出 = 296)(压缩了 31%)
$ ls
java11 java8 multiversion.jar
$ /Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/bin/java -cp multiversion.jar com.xiao.test.Tester
In Java8
$ /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/bin/java -cp multiversion.jar com.xiao.test.Tester
In Java11
三、Interface增强(可添加私有方法)
public interface PrivateMethod {// java7以前// 默认为 public static finalString NAME = "xiao";// 默认为 publicString get();// java8default void giveMyMoney() {System.out.println("No way!!!");}static void makeFriend() {System.out.println("Hello, my friend.");}// java9private void show() {System.out.println("Nobody can find me.");}
}
四、JShell
提供互交式的工具。
$ jshell
| 欢迎使用 JShell -- 版本 11.0.1
| 要大致了解该版本, 请键入: /help introjshell> /help intr
|
| intro
| =====
|
| 使用 jshell 工具可以执行 Java 代码,从而立即获取结果。
| 您可以输入 Java 定义(变量、方法、类等等),例如:int x = 8
| 或 Java 表达式,例如:x + x
| 或 Java 语句或导入。
| 这些小块的 Java 代码称为“片段”。
|
| 这些 jshell 工具命令还可以让您了解和
| 控制您正在执行的操作,例如:/list
|
| 有关命令的列表,请执行:/helpjshell> System.out.println("The first time use jshell");
The first time use jshelljshell> String a = "xiao"
a ==> "xiao"jshell> System.out.println("name" + a)
namexiaojshell> System.out.println("name:" + a)
name:xiaojshell>
五、try/catch增强
Java6以及之前的版本中,在使用一些资源时,通常会使用try/catch语句,并且在finally语句中来关闭资源,Java7做了改进,Java9也做了一点改进。
public class TryCatchImprove {public static void main(String[] args) {// Java 6 or early// 使用的资源,建议都在finally块中关闭InputStreamReader inputStream7 = new InputStreamReader(System.in);try {int i = inputStream7.read();} catch (IOException ie) {ie.printStackTrace();} finally {try {inputStream7.close();} catch (IOException ie) {ie.printStackTrace();}}// Java 7,8// 当有多个资源被使用时,括号中使用 ; 分割,不再需要finally语句块try (InputStreamReader inputStream8 = new InputStreamReader(System.in)) {int i = inputStream8.read();} catch (IOException ie) {ie.printStackTrace();}// Java 9// 能够直接在try的括号中使用变量,多个变量时用 ; 分割InputStreamReader inputStream9 = new InputStreamReader(System.in);try (inputStream9) {int i = inputStream9.read(); } catch (IOException ie) {ie.printStackTrace();}}
}
参考
更多更详细的特性,可以参照以下:
Oracle
- What’s New in Oracle JDK 9:https://docs.oracle.com/javas...
- Java Language Updates :https://docs.oracle.com/javas...
Blog
- NewImport:http://www.importnew.com/2452...
- http://www.runoob.com/java/ja...
Java 9 新特性相关推荐
- IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍
文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...
- Java 11 新特性
2019独角兽企业重金招聘Python工程师标准>>> Java 11 新特性 转载于:https://my.oschina.net/u/3764794/blog/2993127
- stream distinct去重_再来看看Java的新特性——Stream流
半年前开始试着使用Java的新特性,给我印象最深的就是Stream流和Optional.其中Stream提高了看法效率,让代码看起来十分清爽. 为什么要使用流? 摘要中已经说明了,为了提高开发效率.流 ...
- 跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局
转载自 跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局 恭喜你们,马上就要学完Java8 Stream流的一整系列了,其实我相信Stream流对很多使用Java的同 ...
- 跟我学 Java 8 新特性之 Stream 流(六)收集
转载自 跟我学 Java 8 新特性之 Stream 流(六)收集 我们前面的五篇文章基本都是在说将一个集合转成一个流,然后对流进行操作,其实这种操作是最多的,但有时候我们也是需要从流中收集起一些 ...
- 跟我学 Java 8 新特性之 Stream 流基础体验
转载自 跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章, ...
- 跟我学 Java 8 新特性之 Stream 流(二)关键知识点
转载自 跟我学 Java 8 新特性之 Stream 流(二)关键知识点 我们的第一篇文章,主要是通过一个Demo,让大家体验了一下使用流API的那种酣畅淋漓的感觉.如果你没有实践,我还是再次呼吁 ...
- 跟我学 Java 8 新特性之 Stream 流(三)缩减操作
转载自 跟我学 Java 8 新特性之 Stream 流(三)缩减操作 和前面两篇文章一起服用,效果会更佳.通过对流API的基础体验Demo和关键知识点的讲解,相信大家对流API都有一定的认识了, ...
- 跟我学 Java 8 新特性之 Stream 流(四)并行流
转载自 跟我学 Java 8 新特性之 Stream 流(四)并行流 随着对流API认识的慢慢深入,本章我们要讨论的知识点是流API里面的并行流了. 在开始讨论并行流之前,我先引发一下大家的思考, ...
- 跟我学 Java 8 新特性之 Stream 流(五)映射
转载自 跟我学 Java 8 新特性之 Stream 流(五)映射 经过了前面四篇文章的学习,相信大家对Stream流已经是相当的熟悉了,同时也掌握了一些高级功能了,如果你之前有阅读过集合框架的基 ...
最新文章
- Python系统调用——运行其他程序
- hutool 读取扩展名文件_JPG,PNG,GIF,TIFF、SVG玩设计必须了解的文件格式你知道几个?...
- JVM内存管理------垃圾搜集器参数精解
- 黄金寨景区、缥缈间温泉2019北京推介会成功举办
- 学习hibernate(五) -- hibernate映射关系
- 【C语言】爱心表白代码
- Java_管家婆项目(三十一)——管家婆家庭记账软件(项目环境搭建、功能模块、代码)、后附网盘链接
- Microsoft Agent技术在Delphi中的应用
- 【第158期】游戏策划:给@zhang的简历分析
- 视频教程-SAP快速入门-其他
- 《指数基金投资指南》读书笔记
- 校招经历-java开发面试题
- U盘插入之后有声音但是无法显示打开U盘
- 【信号与系统学习笔记】—— 拉普拉斯变换的性质分析
- 蓝湖怎么切图标注_如何用蓝湖做自动标注 ?
- 【机器学习炼丹炉】使用便宜的x99和二手显卡,单显卡的学习机器在3000元,多显卡更贵,可以用支架,架起显卡,用做算法的学习使用,模型训练需要显卡的算力支持,低成本做算法研究,万一从入门到放弃了呢
- vue 项目获取QQ音乐歌单数据
- 【Linux】之【网络】相关的命令及解析[ethtool、nload、nethogs、iftop、iptraf、ifstat]
- AI独立开发者:一周涨粉8万赚2W美元;推特#HustleGPT GPT-4创业挑战;即刻#AIHackathon创业者在行动 | ShowMeAI周刊
- js + leetcode刷题:No.914 卡牌分组
热门文章
- vmware+android+4.3,Vmware虚拟机安装安卓4.0系统教程
- javascript 字符串中间隔固定位置插入字符
- 二十四、哈希表的原理分析及代码实现
- Chart.js-极区图分析(参数分析+例图)
- CVPR2019--Binary Ensemble Neural Network--二值CNN网络集成
- 编译phonetisaurus时configure找不到openfst的问题解决
- 解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte问题
- mac java web_mac os安装java web开发环境配置
- 圆通招java_圆通java程序员面试经验|面试题 - 职朋职业圈
- leetcode每日一题系列——881. 救生艇