前言
????如果要使用java9進(jìn)行開發(fā),就必須要使用模塊化系統(tǒng),否則就不能進(jìn)行開發(fā)了,所以今天我們先來(lái)簡(jiǎn)單使用一下java9中的模塊化系統(tǒng)開發(fā)一個(gè)hello world程序。
????每個(gè)程序員對(duì)hello world這句話都有著特殊的情感,因?yàn)榛旧洗蟛糠志幊陶Z(yǔ)言最開始都是寫hello world程序,所以今天我們先來(lái)使用模塊化系統(tǒng)寫一個(gè)hello world程序,以及了解有了模塊化系統(tǒng)之后給我們的程序開發(fā)產(chǎn)生了什么影響。
1、為什么使用IntelliJ?IDEA開發(fā)工具開發(fā)java9項(xiàng)目?
????目前來(lái)說(shuō)eclipse對(duì)java9的支持沒(méi)有IntelliJ?IDEA好,為了適應(yīng)模塊化系統(tǒng)IntelliJ?IDEA做了以下的支持:
一、module-info.java文件的創(chuàng)建和已有模塊的提示。
二、自動(dòng)創(chuàng)建模塊圖
三、提供了探查(Inspection)功能,有助于將舊版本的java代碼遷移至Java 9
????除了適應(yīng)模塊化系統(tǒng),還可以直接在IntelliJ?IDEA中使用Jshell等,這無(wú)一不顯示著IntelliJ?IDEA這款開發(fā)工具的誠(chéng)意。
2、在模塊化系統(tǒng)中自定義模塊并調(diào)用jdk中自帶的模塊
代碼結(jié)構(gòu):

步驟:
一、創(chuàng)建一個(gè)普通的javase工程,sdk選用java9所在的目錄
二、創(chuàng)建一個(gè)helloworld程序,代碼如下:
import java.util.logging.Logger;
public class Hello {
//創(chuàng)建日志對(duì)象
public static final Logger Log = Logger.getLogger("Hello");
public static void main(String[] args) {
//輸出日志信息
Log.info("Hello World");
}
}
注意:此時(shí)java.util.logging.Logger類是引入引入不了的,編譯報(bào)錯(cuò)。所以我們需要進(jìn)行第三步操作。
三、創(chuàng)建module-info.java文件

四、在module-info.java文件中引入java.util.logging.Logger類所在java.logging模塊,代碼如下:
//創(chuàng)建模塊名為java9
module java9 {
//依賴jdk中Logger所在的java.logging模塊
requires java.logging;
}
總結(jié):
????有了模塊化系統(tǒng)之后,很多的類文件都拆分成不同的模塊了,我們常用的String、System等類存在在java.base模塊中,我們使用的時(shí)候無(wú)需引入java.base模塊,因?yàn)閖ava9默認(rèn)引入此模塊。但是其他的類我們使用的時(shí)候可能需要先引入模塊之后才能導(dǎo)入我們使用的類,就好比我們例子中的Logger類。
????雖然會(huì)為我們的開發(fā)帶來(lái)不便,但是也讓我們的代碼更加的安全和輕便了。
3、兩個(gè)自定義模塊的互相調(diào)用
代碼結(jié)構(gòu):

需求:demo1調(diào)用demo2中的類
步驟:
一、創(chuàng)建兩個(gè)module,demo1和demo2

二、demo2中準(zhǔn)備一個(gè)Coder類,提供給demo1調(diào)用,代碼如下:
package cn.wolfcode.bean;
public class Coder {
private String name;
private int age;
public Coder(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Coder{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
三、demo1中準(zhǔn)備一個(gè)CoderDemo類調(diào)用demo2中的Coder類,代碼如下:
package cn.wolfcode.test;
import cn.wolfcode.bean.Coder;
public class CoderDemo {
public static void main(String[] args) {
Coder coder = new Coder("wolf",2);
System.out.println(coder);
}
}
注意:我們還沒(méi)有引入模塊,我們的cn.wolfcode.bean.Coder包是引用不了的
四、在demo2模塊中的module-info.java文件創(chuàng)建demo2模塊,準(zhǔn)備被demo1的模塊調(diào)用,代碼如下:
//創(chuàng)建模塊名為demo2
module demo2 {
//在模塊中輸出cn.wolfcode.bean包中的類
exports cn.wolfcode.bean;
}
注意:如果不在模塊demo2中輸出cn.wolfcode.bean包,其他模塊及時(shí)依賴了demo2這個(gè)模塊,它是不能導(dǎo)入cn.wolfcode.bean包中的類的,即使你的類使用了public修飾。
五、在demo1模塊中的module-info.java文件創(chuàng)建demo1模塊,并且依賴模塊demo2,代碼如下:
//創(chuàng)建模塊名為demo1
module demo1 {
//依賴模塊demo2
requires demo2;
}
小結(jié):
????本章簡(jiǎn)單的使用了一下模塊化系統(tǒng)進(jìn)行了簡(jiǎn)單的開發(fā),調(diào)用JDK自帶的模塊和調(diào)用自定義的模塊,但是具體的一些模塊化中的語(yǔ)句我們還沒(méi)有詳細(xì)說(shuō)明,比如exports 、requires 等語(yǔ)句我們還沒(méi)有詳細(xì)分析,沒(méi)掌握模塊化語(yǔ)句我們根本做不了模塊化的開發(fā),所以請(qǐng)期待我們下一篇文章,將為大家分析模塊化中的語(yǔ)句作用和使用。