Java教程
+ -

Java Java 9 模块系统

2019-09-09 0 0

Java 9 最大的变化之一是引入了模块系统(Jigsaw 项目)。

模块就是代码和数据的封装体。模块的代码被组织成多个包,每个包中包含Java类和接口;模块的数据则包括资源文件和其他静态信息。

Java 9 模块的重要特征是在其工件(artifact)的根目录中包含了一个描述模块的 module-info.class 文件。
工件的格式可以是传统的 JAR 文件或是 Java 9 新增的 JMOD 文件。这个文件由根目录中的源代码文件 module-info.java
编译而来。该模块声明文件可以描述模块的不同特征。

在 module-info.java文件中,我们可以用新的关键词module来声明一个模块,如下所示。下面给出了一个模块com.mycompany.mymodule的最基本的模块声明。

module com.bytekits.mymodule {
}

创建模块

接下来我们创建一个 com.bytekits.greetings 的模块。

第 一步

创建文件夹 C:>JAVA\src,然后在该目录下再创建与模块名相同的文件夹 com.bytekits.greetings。

第 二步

在 C:>JAVA\src\com.bytekits.greetings 目录下创建 module-info.java 文件,代码如下:

module com.bytekits.greetings { }

module-info.java 用于创建模块。这一步我们创建了 com.bytekits.greetings 模块。

第 三步

在模块中添加源代码文件,在目录 C:>JAVA\src\com.bytekits.greetings\com\bytekits\greetings 中创建文件
Java9Tester.java,代码如下:

package com.bytekits.greetings;
public class Java9Tester {
   public static void main(String[] args) {
      System.out.println("Hello World!");
   }
}

第 四步

创建文件夹 C:>JAVA\mods,然后在该目录下创建 com.bytekits.greetings 文件夹,编译模块到这个目录下:

C:/>JAVA> javac -d mods/com.bytekits.greetings 
   src/com.bytekits.greetings/module-info.java 
   src/com.bytekits.greetings/com/bytekits/greetings/Java9Tester.java

第 五步

执行模块,查看输出结果:

C:/>JAVA> java --module-path mods -m com.bytekits.greetings/com.bytekits.greetings.Java9Tester
Hello World!

module-path 指定了模块所在的路径。

-m 指定主要模块。

0 篇笔记 写笔记

VueJS 计算属性(Computed)
我们已经看到了Vue实例和组件的方法。计算属性(Computed Properties)类似于方法,但与方法相比有一些区别,我们将在本章中讨论。让我们通过一个例子来了解计算属性。 VueJs Instance&...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/perl/perl-packages-modules.html"> Perl 包和<em>模块</em></a> <div class="pull-right" style="color:#888;"><!--2020-12-05 13:42:57--></div> </div> <div class="Intra">Perl 中每个包有一个单独的符号表,定义语法为:package mypack;此语句定义一个名为 mypack 的包,在此后定义的所有变量和子程序的名字都存贮在该包关联的符号表中,直到遇到另一个 package语句为止。每个符号表有其自己的一组变量、子程序名,各组名字是不相关的,因此可以在不同的包...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/dotnet-core/dotnet-core-modularity.html"> .NET Core<em>模块</em>化</a> <div class="pull-right" style="color:#888;"><!--2021-12-12 14:44:38--></div> </div> <div class="Intra">.NET Core的另一个考虑是构建和实现<em>模块</em>化的应用程序。现在,应用程序现在可以只安装所需的内容,而不是安装整个.NET Framework。下面来看看解决方案浏览器中的<em>模块</em>化。这是一个简单的.NET Core应用程序,在 解 决方案资源管理器 中展开引用,可以看到对.NETCoreApp的引...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/java/java-string-compareto.html"> Java <em>com</em>pareTo() 方法</a> <div class="pull-right" style="color:#888;"><!--2020-12-02 15:12:24--></div> </div> <div class="Intra"><em>com</em>pareTo() 方法用于两种方式的比较:字符串与对象进行比较。按字典顺序比较两个字符串。语法int <em>com</em>pareTo(Object o)或int <em>com</em>pareTo(String anotherString)参数o -- 要比较的对象。anotherString -- 要比较的字符串。返回...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/java/java-string-comparetoignorecase.html"> Java <em>com</em>pareToIgnoreCase() 方法</a> <div class="pull-right" style="color:#888;"><!--2020-12-02 15:13:02--></div> </div> <div class="Intra"><em>com</em>pareToIgnoreCase() 方法用于按字典顺序比较两个字符串,不考虑大小写。语法int <em>com</em>pareToIgnoreCase(String str)参数str -- 要比较的字符串。返回值如果参数字符串等于此字符串,则返回值 0;如果此字符串小于字符串参数,则返回一个小于 0 的值...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/dedecms/dedecms-moudle-mange.html"> dedecms5.7原代码分析 <em>模块</em>的管理</a> <div class="pull-right" style="color:#888;"><!--2020-12-16 11:44:32--></div> </div> <div class="Intra">dedecms为了便于扩展,支持<em>模块</em>功能管理。最新的<em>模块</em>支持列表URL为:http://updatenew.dedecms.<em>com</em>/base-v57/dedecms/<em>module</em>_utf-8/<em>module</em>list.txt 其为一个txt文件,以类似json的格式存储。文件中存储的是当前可安装或更新的...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/redis/redis-server-command.html"> Redis COMMAND 数组</a> <div class="pull-right" style="color:#888;"><!--2020-11-09 19:04:06--></div> </div> <div class="Intra">Redis COMMAND 数组答复有关所有Redis命令的详细信息。COMMAND - 语法以下是Redis COMMAND 命令的基本语法。redis 127.0.0.1:6379> COMMANDCOMMAND - 示例redis 127.0.0.1:6379> COMMAND 1...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/java/java-java9-module-system.html"> Java Java 9 <em>模块</em>系统</a> <div class="pull-right" style="color:#888;"><!--2020-12-02 22:17:27--></div> </div> <div class="Intra">Java 9 最大的变化之一是引入了<em>模块</em>系统(Jigsaw 项目)。<em>模块</em>就是代码和数据的封装体。<em>模块</em>的代码被组织成多个包,每个包中包含Java类和接口;<em>模块</em>的数据则包括资源文件和其他静态信息。Java 9 <em>模块</em>的重要特征是在其工件(artifact)的根目录中包含了一个描述<em>模块</em>的 <em>module</em>-in...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/redis/redis-server-command-getkeys.html"> Redis COMMAND GETKEYS命令</a> <div class="pull-right" style="color:#888;"><!--2020-11-09 19:05:58--></div> </div> <div class="Intra">Redis COMMAND GETKEYS 是一个帮助程序命令,可让您从完整的Redis命令中查找键(key)。GETKEYS - 返回值返回命令中的键列表。GETKEYS - 语法以下是Redis COMMAND GETKEYS 命令的基本语法。redis 127.0.0.1:6379> C...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/redis/redis-server-command-count.html"> Redis COMMAND COUNT 命令</a> <div class="pull-right" style="color:#888;"><!--2020-11-09 19:05:09--></div> </div> <div class="Intra">Redis COMMAND COUNT 返回此Redis服务器中的命令总数。COMMAND COUNT - 语法以下是Redis COMMAND COUNT 命令的基本语法。redis 127.0.0.1:6379> COMMAND COUNTCOMMAND COUNT - 示例redis 1...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/java/java-number-compareto.html"> Java <em>com</em>pareTo() 方法</a> <div class="pull-right" style="color:#888;"><!--2020-12-02 12:24:16--></div> </div> <div class="Intra"><em>com</em>pareTo() 方法用于将 Number 对象与方法的参数进行比较。可用于比较 Byte, Long, Integer等。该方法用于两个相同数据类型的比较,两个不同类型的数据不能用此方法来比较。语法public int <em>com</em>pareTo( NumberSubClass referenceN...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/ruby/ruby-module.html"> Ruby <em>模块</em>(Module)</a> <div class="pull-right" style="color:#888;"><!--2020-12-04 23:56:12--></div> </div> <div class="Intra"><em>模块</em>(Module)是一种把方法、类和常量组合在一起的方式。<em>模块</em>(Module)为您提供了两大好处。<em>模块</em>提供了一个 命 名空间和避免名字冲突。<em>模块</em>实现了 mixin 装置。<em>模块</em>(Module)定义了一个命名空间,相当于一个沙盒,在里边您的方法和常量不会与其他地方的方法常量冲突。<em>模块</em>类似与类,但有一下...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/mysql/mysql-transaction.html"> MySQL 事务</a> <div class="pull-right" style="color:#888;"><!--2020-11-25 14:10:36--></div> </div> <div class="Intra">MySQL事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务处理可以用...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/python3/python3-os-path.html"> Python3 os.path() <em>模块</em></a> <div class="pull-right" style="color:#888;"><!--2020-11-22 01:00:54--></div> </div> <div class="Intra">以下是 os.path <em>模块</em>的几种常用方法:方法说明os.path.abspath(path)返回绝对路径os.path.basename(path)返回文件名os.path.<em>com</em>monprefix(list)返回list(多个路径)中,所有path共有的最长的路径os.path.dirname(...... </div> </div> <div class="RecommentList"> <div> <a class="RecommentTitle" target=_blank href="/redis/redis-server-command-info.html"> Redis COMMAND INFO命令</a> <div class="pull-right" style="color:#888;"><!--2020-11-09 19:07:52--></div> </div> <div class="Intra">Redis COMMAND INFO 返回有关多个Redis命令的详细信息。COMMAND INFO - 返回值返回命令详细信息的嵌套列表。COMMAND INFO - 语法以下是Redis COMMAND INFO 命令的基本语法。redis 127.0.0.1:6379> COMMAND ...... </div> </div> </div> </main> <div class="column right-column" style="border:0px;"> <div class="card middle"> <div class="card-header "> <a class="collapsed card-link" data-toggle="collapse" href="#">技术专栏</a> </div> <div class="collapse show"> <li class="list-inline list-group-item list-group-item-action"><a title=".NET Core教程" href="/dotnet-core/index.html">.NET Core教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="A/B测试教程" href="/ab-testing/index.html">A/B测试教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="ADO.Net教程" href="/ado-net/index.html">ADO.Net教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="AIML教程" href="/aiml/index.html">AIML教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Ajax教程" href="/ajax/index.html">Ajax教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="ARP教程" href="/arp/index.html">ARP教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="BIOS编程教程" href="/bios/index.html">BIOS编程教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Bochs模拟器教程" href="/bochs/index.html">Bochs模拟器教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="C#教程" href="/csharp/index.html">C#教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="C++11教程" href="/cpp11/index.html">C++11教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="C++教程" href="/cpp/index.html">C++教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="C++标准库" href="/cppstdlib/index.html">C++标准库</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="C/C++技巧" href="/ccpp-skill/index.html">C/C++技巧</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="CEF浏览器" href="/cef/index.html">CEF浏览器</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="CENTOS7教程" href="/centos7/index.html">CENTOS7教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="C语言教程" href="/c/index.html">C语言教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="dedecms5.7原代码分析" href="/dedecms/index.html">dedecms5.7原代码分析</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Docker教程" href="/docker/index.html">Docker教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="gcc命令选项教程" href="/gcc/index.html">gcc命令选项教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Go语言教程" href="/go/index.html">Go语言教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="H264学习资料" href="/h264/index.html">H264学习资料</a></li> <li class="list-inline list-group-item list-group-item-action active font-weight-bold" ><a style="color:#fff;" title="Java教程" href="/java/index.html">Java教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="jQuery教程" href="/jquery/index.html">jQuery教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="JSON教程" href="/json/index.html">JSON教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Libuv教程" href="/libuv/index.html">Libuv教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Linux" href="/linux/index.html">Linux</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Linux命令大全" href="/linuxcmd/index.html">Linux命令大全</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Linux驱动教程" href="/linuxdriver/index.html">Linux驱动教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Lua教程" href="/lua/index.html">Lua教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="MakeFile教程" href="/makefile/index.html">MakeFile教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Memcached教程" href="/memcached/index.html">Memcached教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="MongoDB教程" href="/mongodb/index.html">MongoDB教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="MySQL数据库" href="/mysql/index.html">MySQL数据库</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Nasm教程" href="/nasm/index.html">Nasm教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Nginx服务器" href="/nginx/index.html">Nginx服务器</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="ObjectiveC教程" href="/objectc/index.html">ObjectiveC教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="OsgEarth教程" href="/osgearth/index.html">OsgEarth教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Perl" href="/perl/index.html">Perl</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="PHP教程" href="/php/index.html">PHP教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="ProtcolBuffer教程" href="/protcolbuffer/index.html">ProtcolBuffer教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Python3教程" href="/python3/index.html">Python3教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="QT学习笔记" href="/qt/index.html">QT学习笔记</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Redis教程" href="/redis/index.html">Redis教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Ruby教程" href="/ruby/index.html">Ruby教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="SQLite" href="/sqlite/index.html">SQLite</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="SQL教程" href="/sql/index.html">SQL教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="UNIX/Linux教程" href="/unix/index.html">UNIX/Linux教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="VBScript教程" href="/vbscript/index.html">VBScript教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="VueJS教程" href="/vuejs/index.html">VueJS教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="Windows运维大全" href="/windows/index.html">Windows运维大全</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="XPath教程" href="/xpath/index.html">XPath教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="关于本站" href="/about/index.html">关于本站</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="批处理教程" href="/bat/index.html">批处理教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="技术笔记" href="/blog/index.html">技术笔记</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="正则表达式教程" href="/regexp/index.html">正则表达式教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="设计模式教程" href="/designpattern/index.html">设计模式教程</a></li> <li class="list-inline list-group-item list-group-item-action"><a title="高质量 C++/C 编程指南" href="/highcpp/index.html">高质量 C++/C 编程指南</a></li> </div> </div> </div> </div> <footer> <div class="maincontent text-center"> <a href="/about/about.html">关于我们</a> <a href="/about/disclaimer.html">免责声明</a> <a href="/about/connect.html">侵删联系</a> <a href="/sitemap/sitemap.xml">网站地图</a> <br>Copyright © 2021 <a href="http://www.bytekits.com">字节流 QQ群:952873936</a> <a class="d-sm-inline d-none" href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow">陕ICP备19020272号-1</a> </div> </footer> <script src="/res/jquery2.1.1/jquery-2.1.1.min.js"></script> <script src="/res/bootstrap4.1.0/bootstrap.min.js"></script> <script src="/res/bootstrap-toggle/bootstrap-toggle.js"></script> <script src="/res/prettyPrint/prettify.js"></script> <script src="/res/js/main.js"></script> <script src="/res/feedback/js/jquery.feedback.js"></script> <script src="/res/feedback/js/feedback.js"></script> <script src="/res/share/jquery.share.min.js"></script> <script src="/res/js/third-www.js"></script> <script type="text/javascript" src="/res/simditor-2.3.19/scripts/module.js"></script> <script type="text/javascript" src="/res/simditor-2.3.19/scripts/hotkeys.js"></script> <script type="text/javascript" src="/res/simditor-2.3.19/scripts/uploader.js"></script> <script type="text/javascript" src="/res/simditor-2.3.19/scripts/simditor.js"></script> <script> $(function() { $("#share_code").click(function(){ $("#commentform").toggle(); }); $("#ShowNote").click(function() { $("#NoteList").toggle(); if($("#ShowNote i").hasClass("fa-minus-square")) { $("#ShowNote i").removeClass("fa-minus-square"); $("#ShowNote i").addClass("fa-square"); } else { $("#ShowNote i").removeClass("fa-square"); $("#ShowNote i").addClass("fa-minus-square"); } }); if("undefined" != typeof Simditor) { toolbar = ['title', 'bold', 'italic', 'underline', 'strikethrough', 'fontScale', 'color', '|', 'ol', 'ul', 'blockquote', 'code', 'table', '|', 'link', 'image', 'hr', '|', 'indent', 'outdent', 'alignment']; mobileToolbar = ["bold", "underline", "strikethrough", "color", "ul", "ol"]; //if (mobilecheck()) { // toolbar = mobileToolbar; //} var editor = new Simditor({ textarea: $('#editor'), placeholder: '写内容...', upload:false, defaultImage: '/res/img/comm/top-logo.png', codeLanguages: '', toolbar: toolbar }); editor.on('selectionchanged', function() { $(".code-popover").hide(); }); } var commentform=$('#commentform'); commentform.submit(function(e){ e.preventDefault(); var NoteContent = editor.getValue(); if(NoteContent.length<20) { alert("内容太短"); return; } var request = JSON.stringify({ArticleDetailId:ArticleDetailId,ArticleCommentContent:NoteContent}); $.post("/my/http.php", { action:"MakeArticleComment", request:request }, function(data,status) { console.log(data); json= JSON.parse(data); if(json.status ==0) { var NoetList=$("NoteList"); NoteContent = NoteContent.replace(/<pre><code>/g,"<pre>"); NoteContent = NoteContent.replace(/<\/code><\/pre>/g,"</pre>"); NoteContent +="<a href=\"/"+json.UserAccount+"\"/>"+json.UserNickName+"</a>"; NoteContent +=" "+json.CreateTime; console.log(NoteContent); var n=document.createElement("div"); n.innerHTML=NoteContent; NoteList.append(n); editor.setValue(''); } else { alert(json.info); } }); }); }); </script> <div id="container_drag" style="display:none;"></div> <script> var ArticleDetailId=1783; </script> <div class="fixbottom" style="overflow:hidden;" > <button type="button" class="btn btn-secondary" style="font-weight:normal" id="feedback">技术提问/意见反馈</button> </div> <div class="fixed-btn"> <a class="go-top" href="javascript:void(0)" title="返回顶部" style="display: inline-block;"> <i class="fa fa-angle-up"></i></a> <a class="writer" href="javascript:void(0)" title="标记/收藏"><i class="fa fa-star-o" id="BookMark2" aria-hidden="true"></i></a> <a class="qrcode" href="javascript:void(0)" title="关注我们"><i class="fa fa-qrcode"></i></a> <a class="dashang" href="javascript:void(0)" onclick="dashangToggle()" title="打赏,支持一下"><i class="fa fa-heart-o"></i></a> <div id="bottom-qrcode" style="display:none;"> <h6>加入QQ群</h6> <div class="panel-body"><img alt="微信关注" src="/res/img/comm//qq-qun.png"></div> </div> </div> <div class="hide_box"></div> <div class="shang_box"> <a class="shang_close" href="javascript:void(0)" onclick="dashangToggle()" title="关闭"><img src="/res/img/dashang/close.jpg" alt="取消" /></a> <div class="shang_tit">感谢您的支持,我会继续努力的!</div> <div class="shang_payimg"><img src="/res/img/dashang/alipay-img.jpg" alt="扫码支持" title="扫一扫" /></div> <div class="pay_explain">扫码打赏,你说多少就多少</div> <div class="shang_payselect"> <div class="pay_item checked" data-id="alipay"> <span class="radiobox"></span> <span class="pay_logo"><img src="/res/img/dashang/alipay-logo.jpg" alt="支付宝" /></span> </div> <div class="pay_item" data-id="wechat"> <span class="radiobox"></span> <span class="pay_logo"><img src="/res/img/dashang/wechatpay-logo.jpg" alt="微信" /></span> </div> </div> <div class="shang_info"> <p>打开<span id="shang_pay_txt">支付宝</span>扫一扫,即可进行扫码打赏哦</p> <p>您的支持,是我们前进的动力!</p> </div> </div> </script> </body> </html>