首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >java 9 的新特性解读(1)

java 9 的新特性解读(1)

作者头像
一个风轻云淡
发布2023-10-15 10:08:14
发布2023-10-15 10:08:14
3690
举报
文章被收录于专栏:java学习javajava学习java

前言

 经过4次跳票,历经曲折的Java 9 终于终于在2017年9月21日发布。  从Java 9 这个版本开始,Java 的计划发布周期是 6 个月,下一个 Java 的主版本将于 2018 年 3 月发布,命名为 Java 18.3,紧接着再过六个月将发布 Java18.9。  这意味着Java的更新从传统的以特性驱动的发布周期,转变为以时间驱动的 (6 个月为周期)发布模式,并逐步的将 Oracle JDK 原商业特性进行开源。  针对企业客户的需求,Oracle 将以三年为周期发布长期支持版本(longtermsupport)。  Java 9 提供了超过150项新功能特性,包括备受期待的模块化系统、可交互 的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强、扩展提升、性能管理改善等。可以说Java 9是一个庞大的系统工程,完全做了一个整体改变。

新特效一览 

 模块化系统  jShell命令  多版本兼容jar包  接口的私有方法  钻石操作符的使用升级  语法改进:try语句  String存储结构变更  便利的集合特性:of()  增强的Stream API  全新的HTTP客户端API  Deprecated的相关API  javadoc的HTML 5支持  Javascript引擎升级:Nashorn  java的动态编译器

JDK 和 JRE 目录结构的改变  

模块化系统: Jigsaw =>Modularity  

谈到 Java 9 大家往往第一个想到的就是 Jigsaw 项目。众所周知,Java 已经 发展超过 20 年(95 年最初发布),Java 和相关生态在不断丰富的同时也越 来越暴露出一些问题:

 Java 运行环境的膨胀和臃肿。每次JVM启动的时候,至少会有30~60MB的内存 加载,主要原因是JVM需要加载rt.jar,不管其中的类是否被classloader加载,第 一步整个jar都会被JVM加载到内存当中去(而模块化可以根据模块的需要加载程 序运行需要的class)

 当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。不同版本的类库交叉依赖导致让人头疼的问题,这些都阻碍了 Java 开发和运行效率的提升。

 很难真正地对代码进行封装, 而系统并没有对不同部分(也就是 JAR 文件)之间 的依赖关系有个明确的概念。每一个公共类都可以被类路径之下任何其它的公共类所访问到,这样就会导致无意中使用了并不想被公开访问的 API。

 本质上讲也就是说,用模块来管理各个package,通过声明某个package暴露,模块(module)的概念,其实就是package外再裹一层,不声明默认就是隐藏。因此,模块化使得代码组织上更安全,因为它可以指定哪 些部分可以暴露,哪些部分隐藏。

 实现目标

 模块化的主要目的在于减少内存的开销  只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开 发和维护  改进 Java SE 平台,使其可以适应不同大小的计算设备  改进其安全性,可维护性,提高性能

 模块将由通常的类和新的模块声明文件(module-info.java)组成。该文件是位于java代码结构的顶层,该模块描述符明确地定义了我们的模块需要什么依赖关系, 以及哪些模块被外部使用。在exports子句中未提及的所有包默认情况下将封装在 模块中,不能在外部使用。

要想在java9demo模块中调用java9test模块下包中的结构,需要在java9test的module-info.java中声明:

代码语言:javascript
复制
module java9test {

//package we export

    exports com.atguigui.bean;
}

exports:控制着哪些包可以被其它模块访问到。所有不被导出的包默认 都被封装在模块里面。 

对应在java 9demo 模块的src 下创建module-info.java文件: 

代码语言:javascript
复制
module java9demo {

    requires java9test;

}

requires:指明对其它模块的依赖。 

 模块化的主要目的在于减少内存的开销  只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开 发和维护  改进 Java SE 平台,使其可以适应不同大小的计算设备  改进其安全性,可维护性,提高性能

 模块化的主要目的在于减少内存的开销  只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开 发和维护  改进 Java SE 平台,使其可以适应不同大小的计算设备  改进其安全性,可维护性,提高性能

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 新特效一览 
  • JDK 和 JRE 目录结构的改变  
  • 模块化系统: Jigsaw =>Modularity  
    •  实现目标
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档