Java9新特性(2)--Java標(biāo)準(zhǔn)模塊系統(tǒng)(Jigsaw)(二)

前言

????如果要使用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):

代碼結(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文件

創(chuàng)建module-info文件

四、在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):

代碼結(jié)構(gòu)圖

需求:demo1調(diào)用demo2中的類

步驟:

一、創(chuàng)建兩個(gè)module,demo1和demo2

創(chuàng)建module

二、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ǔ)句作用和使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容