JDK 9是Java开发语言的一个重大版本。其中最令人兴奋的新特性之一是模块化系统。模块化系统提出了一种新的代码组织方式,它可以帮助开发人员更好地组织和管理代码,从而使Java应用程序更加可维护、可扩展和安全。

Java 9的模块化系统基于模块概念,即Java开发人员现在可以将他们的代码组织成一个个小的、相互依赖的模块。每个模块都有明确的接口和实现,因此即使在代码的修改和维护时,也可以避免出现问题。

在Java 9之前,开发人员必须手动设置类路径并确保类库和依赖项正确加载。JDK 9模块化系统可以为每个模块分别定义类路径和依赖项,从而使每个模块更加清晰和独立。

JDK 9模块化系统为Java应用程序提供了三个主要方面的好处:

  1. 更安全

模块化系统能够更好地隔离代码,并且在运行时可以更有效地限制代码的访问。这就意味着,Java应用程序将更加安全,因为恶意的代码将不再有机会修改或执行其他代码。

  1. 更可维护

模块化系统可以帮助Java开发人员更好地组织和管理他们的代码。模块可以清晰地定义它们需要的依赖项,以及它们自身的接口和实现。这使得代码更加清晰、易于维护,并且更容易进行重构和扩展。

  1. 更少的冲突和更快的启动时间

在传统的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模块化的更多相关文章

  1. 深入JVM内核---原理,诊断与优化

    JVM的概念 JAM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 指通过软件模拟的具有完整硬件系统功能的,运行在一种完整隔离环境中的完整计算机系统 有哪些虚拟机 - V ...

  2. JVM内核-原理、诊断与优化学习笔记(一):初识JVM

    文章目录 JVM的概念 JVM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 有哪些虚拟机 VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 JVM ...

  3. 深入JVM内核--JVM简介

    JVM概念 jvm是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完成计算机系统. 目前主要有vmMare.visual Box和JVM三款虚拟机. JVM使用软件模拟java字节 ...

  4. 彻底剖析JVM类加载机制

    本文仍然基于JDK8版本,从JDK9模块化器,类加载器有一些变动. 0 javac编译 java代码 public class Math { public static final int initD ...

  5. Java11实战:模块化的 Netty RPC 服务项目

    Java11实战:模块化的 Netty RPC 服务项目 作者:枫叶lhz链接:https://www.jianshu.com/p/19b81178d8c1來源:简书简书著作权归作者所有,任何形式的转 ...

  6. Java 9 模块化(Modularity)

    JDK9的发布一直在推迟,终于在2017年9月21日发布了.下面是JDK9的几个下载地址: JDK9.0.1 Windows-x64下载地址 Oracle Java 官网下载地址 OpenJDK 9官 ...

  7. 初探Java 9 的的模块化

    Java 9中最重要的功能,毫无疑问就是模块化(Module),它将自己长期依赖JRE的结构,转变成以Module为基础的组件,当然这在使用Java 9 开发也和以前有着很大的不同. Java8或更加 ...

  8. 【转载】Java 9 新特性——模块化

    来自 <http://www.jianshu.com/p/053a5ca89bbb#> 前言 年,我们将迎来 Java 语言的 22 岁生日,22岁,对于一个人而言,正是开始大展鸿图的年纪 ...

  9. JDK各个版本比较 JDK5~JDK9

    JDK5 自动装箱与拆箱: 枚举 静态导入,如:import staticjava.lang.System.out 可变参数(Varargs) 内省(Introspector),主要用于操作JavaB ...

  10. Java9模块化(Jigsaw)初识

    Java9经历了多次跳票,终于要在9月份正式发布,原计划Jigsaw在Java7就有的,也终于在Java9里面提供了,简单总结下. 对比 Java9 以前 上面2个图分别对应的分别是JDK8/9的目录 ...

随机推荐

  1. WPF-封装自定义雷达图控件

    源码地址:https://gitee.com/LiuShuiRuoBing/code_blog 雷达图用于表示不同内容的占比关系,在项目中有广泛的应用,但是目前未曾有封装良好的雷达图控件,鉴于最近项目 ...

  2. 简单聊一聊SpringBoot的约定优于配置

    Spring Boot的约定优于配置 对于今天聊的SpringBoot的约定优于配置,我打算从三个方面去展开: 1.什么是约定优于配置 1> 约定优于配置是一种软件设计的范式,其核心思想:使用一 ...

  3. SICTF-2023 #Round2-WP-Crypto | Misc

    Crypto 一.[签到]古典大杂烩 附件信息: 很明显可以看出来是base100,密码工具箱一把梭: SICTF{fe853b49-8730-462e-86f5-fc8e9789f077} 二.Ra ...

  4. Solution Set -「ARC 116」(in progress)

    「ARC 116A」Odd vs Even Link. 看 \(n\) 有多少 \(2\) 因子. // Problem: A - Odd vs Even // Contest: AtCoder - ...

  5. 6.2 Sunday搜索内存特征

    Sunday 算法是一种字符串搜索算法,由Daniel M.Sunday于1990年开发,该算法用于在较长的字符串中查找子字符串的位置.算法通过将要搜索的模式的字符与要搜索的字符串的字符进行比较,从模 ...

  6. SSM-Mybatis笔记

    目录 Mybatis-9.28 1.简介 1.1.什么是Mybatis 1.2.持久化 1.3.持久层 1.4 为什么需要Mybatis? 2.第一个Mybatis程序 2.1.搭建环境 2.2.创建 ...

  7. css的认知与样式

      目录 1. 介绍css 2. CSS语法 3. CSS注释 4. CSS中的颜色值 5. CSS长度单位 6. html引入CSS的三种方法 6.1 行内样式(内联样式) 6.2   内嵌样式 6 ...

  8. 【matplotlib 实战】--直方图

    直方图,又称质量分布图,用于表示数据的分布情况,是一种常见的统计图表. 一般用横轴表示数据区间,纵轴表示分布情况,柱子越高,则落在该区间的数量越大.构建直方图时,首先首先就是对数据划分区间,通俗的说即 ...

  9. Jmeter调用Python脚本,实现参数互相传递

    首先传值到python 1:新增取样器--->os进程取样器 2:新建.bat文件 (写python脚本的路径和传参的个数:思路是:jmeter调用shell,用shell执行py) F:cd ...

  10. [GXYCTF 2019]Ping Ping Ping

    题目就是ping,而且这还有一个查询窗口,就随便查询试试 ping了一下本地,发现没有什么很大的作用,给出了提示是php可以执行系统函数这就感到神奇了,就还是上网搜了搜 发现可以在查询IP后面进行拼接 ...