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#程序随系统启动例子 - 开源研究系列文章
今天讲讲C#中应用程序随系统启动的例子. 我们知道,应用程序随系统启动,都是直接在操作系统注册表中写入程序的启动参数,这样操作系统在启动的时候就根据启动参数来启动应用程序,而我们要做的就是将程序启动参 ...
- langchain中的LLM模型使用介绍
简介 构建在大语言模型基础上的应用通常有两种,第一种叫做text completion,也就是一问一答的模式,输入是text,输出也是text.这种模型下应用并不会记忆之前的问题内容,每一个问题都是最 ...
- ctypes使用浅谈
什么是ctypes: ctypes 是 Python 的一个标准库,用于与 C 语言进行交互.它提供了一组工具和函数,可以方便地调用动态链接库(DLL)或共享对象(SO)中的 C 函数,并处理 C 数 ...
- Codeforces-1095E-Almost-Regular-Bracket-Sequence
题意 给定一个长度为 \(n\) 的小括号序列,求有多少个位置满足将这个位置的括号方向反过来后使得新序列是一个合法的括号序列.即在任意一个位置前缀左括号的个数不少于前缀右括号的个数,同时整个序列左右括 ...
- java循环自动生成简单图片
import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import ...
- 如何解决IOS 15提示“此App的开发者需要更新APP以在此IOS版本上正常工作”, 无法打开安装的APP的问题
在苹果手机最新的IOS 15 beta的系统上安装自签名或者企业签名的APP时,可能会遇到如下的错误提示: 此App的开发者需要更新APP以在此IOS版本上正常工作 The developer of ...
- 聊聊数据库事务内嵌TCP连接
最近再看项目代码,发现很多的service里面,喜欢在事务内部再去调用HTTP请求,简单分析下此种方式的利弊与解决策略. 概述 在数据库内部嵌套TCP连接(一般是HTTP调用或是RPC远程调用). @ ...
- 7.4 通过API枚举进程权限
GetTokenInformation 用于检索进程或线程的令牌(Token)信息.Token是一个数据结构,其包含有关进程或线程的安全上下文,代表当前用户或服务的安全标识符和权限信息.GetToke ...
- CF451B
题目简化和分析: 这题就是判断将一段翻转后是否能变为升序的数组. 我的方法是保存原数组每一个数出现的位置(相同任意一个),让后另外用一个数组存储排好序后的原数组,逐一进行比较. 若同,则跳到下一个元素 ...
- Treap树学习笔记
等我写完. 普通fhq treap: enum { Maxn = 1000005 }; struct FHQTreap { int lson[Maxn], rson[Maxn], data[Maxn] ...