jdk9模块化
JDK 9是Java开发语言的一个重大版本。其中最令人兴奋的新特性之一是模块化系统。模块化系统提出了一种新的代码组织方式,它可以帮助开发人员更好地组织和管理代码,从而使Java应用程序更加可维护、可扩展和安全。
Java 9的模块化系统基于模块概念,即Java开发人员现在可以将他们的代码组织成一个个小的、相互依赖的模块。每个模块都有明确的接口和实现,因此即使在代码的修改和维护时,也可以避免出现问题。
在Java 9之前,开发人员必须手动设置类路径并确保类库和依赖项正确加载。JDK 9模块化系统可以为每个模块分别定义类路径和依赖项,从而使每个模块更加清晰和独立。
JDK 9模块化系统为Java应用程序提供了三个主要方面的好处:
- 更安全
模块化系统能够更好地隔离代码,并且在运行时可以更有效地限制代码的访问。这就意味着,Java应用程序将更加安全,因为恶意的代码将不再有机会修改或执行其他代码。
- 更可维护
模块化系统可以帮助Java开发人员更好地组织和管理他们的代码。模块可以清晰地定义它们需要的依赖项,以及它们自身的接口和实现。这使得代码更加清晰、易于维护,并且更容易进行重构和扩展。
- 更少的冲突和更快的启动时间
在传统的Java应用程序中,类库和依赖项必须手动设置,并在启动时加载。这可能导致启动时间过长,并且可能会导致不必要的冲突。模块化系统解决了这个问题,因为每个模块的依赖项都是明确的,因此运行时加载和启动时间将更快,并且不会发生冲突。
总的来说,JDK 9模块化系统是一个伟大的改进。它可以帮助Java开发人员更好地组织和管理他们的代码,并提高应用程序的安全性、可维护性和性能。如果你是一个Java开发人员,你应该更新到JDK 9,并开始使用模块化系统来组织你的代码。
这里先解释一下,你的项目倘若没有module-info.java这个文件,那么一切都按照原先的形势执行,这里先解释一些专有名称requires代表模块依赖关系,指定当前模块依赖的其他模块,exports代表模块导出,指定当前模块向其他模块暴露的包。就是一个jar包里面暴露的包是需要生产者所思考的,而消费者只需要添加requires 但是:本模块里面的,也就是同一个包(旨在module-info.java所在的目录及其子目录)里面的是不需要加requires的
例子:就比如,我上一次的例子
HttpClientExample.java
package com.example.jdk11;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class HttpClientExample {
public static void main(String[] args) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://www.baidu.com");
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
倘若module-info.java文件
module java8Over {
requires org.apache.httpcomponents.httpclient;
requires org.apache.httpcomponents.httpcore;
requires org.apache.commons.codec;
requires java.net.http;
//exports com.example.jdk9.mokuai;
}
倘若这里面,没有这些requires,则会报错,说找不到
jdk9模块化的更多相关文章
- 深入JVM内核---原理,诊断与优化
JVM的概念 JAM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 指通过软件模拟的具有完整硬件系统功能的,运行在一种完整隔离环境中的完整计算机系统 有哪些虚拟机 - V ...
- JVM内核-原理、诊断与优化学习笔记(一):初识JVM
文章目录 JVM的概念 JVM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 有哪些虚拟机 VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 JVM ...
- 深入JVM内核--JVM简介
JVM概念 jvm是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完成计算机系统. 目前主要有vmMare.visual Box和JVM三款虚拟机. JVM使用软件模拟java字节 ...
- 彻底剖析JVM类加载机制
本文仍然基于JDK8版本,从JDK9模块化器,类加载器有一些变动. 0 javac编译 java代码 public class Math { public static final int initD ...
- Java11实战:模块化的 Netty RPC 服务项目
Java11实战:模块化的 Netty RPC 服务项目 作者:枫叶lhz链接:https://www.jianshu.com/p/19b81178d8c1來源:简书简书著作权归作者所有,任何形式的转 ...
- Java 9 模块化(Modularity)
JDK9的发布一直在推迟,终于在2017年9月21日发布了.下面是JDK9的几个下载地址: JDK9.0.1 Windows-x64下载地址 Oracle Java 官网下载地址 OpenJDK 9官 ...
- 初探Java 9 的的模块化
Java 9中最重要的功能,毫无疑问就是模块化(Module),它将自己长期依赖JRE的结构,转变成以Module为基础的组件,当然这在使用Java 9 开发也和以前有着很大的不同. Java8或更加 ...
- 【转载】Java 9 新特性——模块化
来自 <http://www.jianshu.com/p/053a5ca89bbb#> 前言 年,我们将迎来 Java 语言的 22 岁生日,22岁,对于一个人而言,正是开始大展鸿图的年纪 ...
- JDK各个版本比较 JDK5~JDK9
JDK5 自动装箱与拆箱: 枚举 静态导入,如:import staticjava.lang.System.out 可变参数(Varargs) 内省(Introspector),主要用于操作JavaB ...
- Java9模块化(Jigsaw)初识
Java9经历了多次跳票,终于要在9月份正式发布,原计划Jigsaw在Java7就有的,也终于在Java9里面提供了,简单总结下. 对比 Java9 以前 上面2个图分别对应的分别是JDK8/9的目录 ...
随机推荐
- 让C#调用vue组件里的方法
前言:web页面开发时采用的是vue开发的,后台语言是C# 需求:后台需要通过浏览器调用vue组件的方法 c# 可以调用xxx.html 中的script引用的js中定义的方法是可以调用的, 之前c# ...
- IDA函数特征识别自动签名
IDA函数特征识别自动签名 Vc6编译的有些无法识别一些库里面的函数 测试代码 #include <stdio.h> int main() { printf("123456\n& ...
- 论文解读(CBL)《CNN-Based Broad Learning for Cross-Domain Emotion Classification》
Note:[ wechat:Y466551 | 付费咨询,非诚勿扰 ] 论文信息 论文标题:CNN-Based Broad Learning for Cross-Domain Emotion Clas ...
- CentOS7.9中的Glibc2.17源码编译升级到Glibc2.31
一.准备工作 1.配置yum阿里镜像源 查看yum当前配置的仓库,如果yum配置的不是阿里云源,请配置阿里云源. yum repolist all 验证是否能ping通阿里云 # 如果不能ping通可 ...
- 《SQL与数据库基础》08. 多表查询
目录 多表查询 多表关系 一对多 多对多 一对一 多表查询概述 分类 内连接 外连接 自连接 联合查询 子查询 分类 标量子查询 列子查询 行子查询 表子查询 案例 本文以 MySQL 为例 多表查询 ...
- 使用 Sealos 一键部署高可用 MinIO,开启对象存储之旅
大家好!今天这篇文章主要向大家介绍如何通过 Sealos 一键部署高可用 MinIO 集群. MinIO 对象存储是什么? 对象是二进制数据,例如图像.音频文件.电子表格甚至二进制可执行代码.对象的大 ...
- Solution -「营业」「ABC 170D」Not Divisible
Description Link. 给出一个长度为 \(n\) 的序列 \(a\),求 \(\sum_{i=1}^{n}[\forall j\in[1,i)\cup(i,n],a_{j}\nmid a ...
- Solution -「洛谷 P4007」小 Y 和恐怖的奴隶主
Description Link. 这道题 的加强版. Solution 题解里面大多数都是概率 DP,或者是期望 DP 然后是逆推.甚至不给 DP 的转移式.机房 yyds Reanap 发了一篇逆 ...
- 从MVC到DDD,该如何下手重构?
作者:付政委 博客:bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主小傅哥.多年的 DDD 应用,使我开了技术的眼界! MVC 旧工程腐化严重,迭代成本太高 ...
- How to start with Gradle?
How to start with Gradle? Download the latest Gradle release from http://www.gradle.org/downloads Se ...