Java 9 新特性

发布时间:2019-11-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java 9 新特性脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Java9在语言上并没有添加太多的新特性,但在使用、性能上做了很改进。

一、模块间引用

Java9添加了模块化的概念,使得之前的控制访问权限有了改变
之前:

Java9

可以看到,对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.java  8 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 final     String NAME = "xiao";     // 默认为 public     String get();      // java8     default void giveMyMoney() {         System.out.println("No way!!!");     }      static void makeFriend() {         System.out.println("Hello, my friend.");     }          // java9     private void show() {        System.out.println("Nobody can find me.");     } }

四、JShell

提供互交式的工具。

$ jshell |  欢迎使用 JShell -- 版本 11.0.1 |  要大致了解该版本, 请键入: /help intro  jshell> /help intr |   |                                   intro |                                   ===== |   |  使用 jshell 工具可以执行 Java 代码,从而立即获取结果。 |  您可以输入 Java 定义(变量、方法、类等等),例如:int x = 8 |  或 Java 表达式,例如:x + x |  或 Java 语句或导入。 |  这些小块的 Java 代码称为“片段”。 |   |  这些 jshell 工具命令还可以让您了解和 |  控制您正在执行的操作,例如:/list |   |  有关命令的列表,请执行:/help  jshell> System.out.println("The first time use jshell"); The first time use jshell  jshell> String a = "xiao" a ==> "xiao"  jshell> System.out.println("name" + a) namexiao  jshell> System.out.println("name:" + a) name:xiao  jshell>

五、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();         }     } }

参考

更多更详细的特性,可以参照以下:

脚本宝典总结

以上是脚本宝典为你收集整理的Java 9 新特性全部内容,希望文章能够帮你解决Java 9 新特性所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。