java 9 的新特性解读(1)
前言
经过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中声明:
module java9test {//package we exportexports com.atguigui.bean;
}
exports:控制着哪些包可以被其它模块访问到。所有不被导出的包默认 都被封装在模块里面。
对应在java 9demo 模块的src 下创建module-info.java文件:
module java9demo {requires java9test;}
requires:指明对其它模块的依赖。
模块化的主要目的在于减少内存的开销
只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开 发和维护
改进 Java SE 平台,使其可以适应不同大小的计算设备
改进其安全性,可维护性,提高性能
模块化的主要目的在于减少内存的开销
只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开 发和维护
改进 Java SE 平台,使其可以适应不同大小的计算设备
改进其安全性,可维护性,提高性能
java 9 的新特性解读(1)相关推荐
- Java基础学习总结(184)—— 从 Java 9 到 Java 17 的新特性解读
一.Java 9 Java 9 最大的变化就是引入了一个 JShell 和模块化,日常并没有用太多,所以今天不花时间在这些功能上面. 新的创建集合的方法 用过谷歌 Guava 类库的知道,Guava ...
- Java 11 正式发布,新特性解读
Java 11 正式发布,新特性解读 杨晓峰 2018 年 9 月 26 日 话题:Java语言 & 开发 不知不觉 JDK 11 已经发布了,从 9 开始,JDK 进入了让人学不动的更新 ...
- Spring Boot3.0正式发布及新特性解读
Spring Boot 3.0 正式发布 同时发布更新的还有 2.7.x 和 2.6.x 两条版本线,Spring Boot 是我见过的发版最守时的技术框架之一. Spring Boot 3.0 现已 ...
- Java SE 6 新特性 Instrumentation 新功能
系列内容: 此内容是该系列的一部分:Java SE 6 新特性 Instrumentation 简介 利用 Java 代码,即 java.lang.instrument 做动态 Instrumenta ...
- JDK 15 JAVA 15的新特性展望
文章目录 JEP 371: Hidden Classes JEP 372: 删除 Nashorn JavaScript Engine JEP 377: 新的垃圾回收器ZGC正式上线了 JEP 378: ...
- c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引
原创作者:杨涛涛 我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引. MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉. 比如对于以下的查询,无法发挥索引 ...
- ES2020的新特性解读
ES2020的新特性解读 ES2020 是 ECMAScript 对应 2020 年的版本.这个版本不像 ES6 (ES2015)那样包含大量新特性.但也添加了许多有趣且有用的特性.本文以简单的代码示 ...
- 资源放送丨Oracle 20C DataGuard 新特性解读PPT视频
前段时间,墨天轮分享了云和恩墨高级工程师 章芋文 带来的直播< Oracle 20C DataGuard 新特性解读>,在这里我们共享一下PPT和视频,供大家参考学习. 从Oracle官方 ...
- 中累计直方图_新特性解读 | MySQL 8.0 直方图
原创作者:杨涛涛 MySQL 8.0 推出了histogram,也叫柱状图或者直方图.先来解释下什么叫直方图. 关于直方图 我们知道,在DB中,优化器负责将SQL转换为很多个不同的执行计划,完了从中选 ...
最新文章
- 网络推广专员浅析如何提升企业网站在网络推广期间的用户体验?
- 图像的灰度级数越多越好_数字图像处理:Reducing Gray Levels, Zooming and Shrinking
- 基本的EJB参考,注入和查找
- 三星全速进军物联网 所有产品都将内置互联功能
- java ora 28040_Oracle 11g与112c中ORA-28040 错误解决
- 域管理中经常用到的组策略禁止修改IP及计算机名
- 3.2. tensorflow2实现Wileoxon秩和检验法(下) ——python实战
- [Everyday Mathematics]20150112
- csgo手机上看demo_《CSGO》观看游戏DEMO方法 怎么观看游戏DEMO
- linux安装yum
- 数字音频水印技术的matlab代码,数字水印技术dct算法matlab源代码
- ORACLE有EXCEL中trend函数,[求助]trend使用方法
- java读取mp3文件_java读取mp3文件 | 学步园
- PyCharm 新建 Python Package
- 大数据背景下互联网用户行为分析
- CVPR2019| 中科院VIPL实验室11篇CVPR解读:弱监督学习、视频分割、目标检测
- 设计一个程序,帮助小学生练习10以内的加法题目
- 汽车电子学习【车载网络CAN/LIN】
- Linux模板机以及搭建集群操作
- 读《VR虚拟现实与AR增强现实的技术原理与商业应用》
热门文章
- java 编程中遇到空指针异常的可能原因java.lang.nullpointerexception
- matlab实验——信号和噪声产生及其功率谱分析
- 盛迈坤电商:自然流量怎么样打造爆款
- Nuclei Studio IDE 安装及导入项目
- php 微信客服聊天开发,客服服务
- ShuffleNet 系列(2): ShuffleNet v2 理论讲解
- Office 2010在win7上安装出现1935错误的解决方法
- 如何在一个服务器上建立两个(多个)网站
- python 给PDF添加目录
- 2021金三银四,啃完这35个Java技术栈,冲刺年薪百万!