日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

p1417 烹调方案_Java 8的烹调方式–拼图项目

發(fā)布時間:2023/12/3 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 p1417 烹调方案_Java 8的烹调方式–拼图项目 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

p1417 烹調(diào)方案

什么是Project Jigsaw:Project Jigsaw是使Java編譯器模塊知道的項(xiàng)目。 多年以來,Java API一直是單塊的,即從代碼的任何部分都可以平等地看到整個API。 還沒有任何方法可以聲明代碼對任何其他用戶庫的依賴關(guān)系。 拼圖項(xiàng)目試圖以一種非常有效的方式來解決這些問題。 在本文中,我將重點(diǎn)介紹Jigsaw模塊系統(tǒng)的基本概念,并解釋其如何與命令一起使用,以提供真實(shí)的感覺。 目前,Jigsaw的目標(biāo)是要包含在Java 8的發(fā)行版中。我認(rèn)為,這比Java平臺第5版隨附的泛型有很大的變化。

Project Jigsaw實(shí)現(xiàn)了什么:正如我之前解釋的,Jigsaw項(xiàng)目解決了整個Java API用作單個整體代碼庫的問題。 以下幾點(diǎn)突出了主要優(yōu)點(diǎn)。

1.依賴關(guān)系圖 :Jigsaw提供了一種方法,可以唯一地標(biāo)識特定的代碼庫,還可以聲明代碼庫對其他代碼庫的依賴關(guān)系。 這將為一組特定的類創(chuàng)建一個完整的依賴圖。 例如,您要編寫一個依賴于Apache BCEL庫的程序。 到目前為止,您還沒有辦法在代碼本身中表達(dá)此要求。 使用Jigsaw,您可以在代碼本身中表達(dá)此要求,從而允許工具解決此依賴性。

2.同一代碼的多個版本 :假設(shè)您編寫了一個同時依賴于libray A和庫B的程序。現(xiàn)在假設(shè)庫A依賴于庫C的版本1.0,而庫B依賴于庫C的版本2.0。在當(dāng)前的Java中在運(yùn)行時,如果不創(chuàng)建自定義類加載器的復(fù)雜層次結(jié)構(gòu),就無法同時使用庫A和B,即使在所有情況下都無法使用。 在Jigsaw成為Java的一部分之后,這就不成問題了,因?yàn)橐粋€類將只能看到其依賴類的版本,這些依賴類是類容器模塊所需的模塊版本的一部分。 也就是說,由于模塊A依賴于模塊C的版本1.0,模塊B依賴于模塊C的版本2.0,因此Java運(yùn)行時可以找出模塊A或模塊可以看到模塊C中的類的哪個版本。 B.這類似于OSGi項(xiàng)目。

3. Java平臺本身的模塊化 :當(dāng)前的Java平臺API龐大,并非每種情況下它的所有部分都相關(guān)。 例如,旨在運(yùn)行Java EE服務(wù)器的Java平臺不必實(shí)現(xiàn)Swing API,因?yàn)檫@沒有任何意義。 同樣,嵌入式環(huán)境可以精簡一些不太重要的API(對于嵌入式),例如編譯器API,以使其更小,更快。 在當(dāng)前的Java平臺下,這是不可能的,因?yàn)槿魏谓?jīng)過認(rèn)證的Java平臺都必須實(shí)現(xiàn)所有API。 拼圖將提供一種僅實(shí)現(xiàn)與??特定平臺相關(guān)的API集的一部分的方法。 由于模塊可以顯式聲明其對任何特定Java API模塊的依賴關(guān)系,因此只有在平臺具有該模塊所要求的模塊的實(shí)現(xiàn)時,該模塊才會運(yùn)行。

4.與OS本機(jī)安裝集成 :由于模塊系統(tǒng)與現(xiàn)代操作系統(tǒng)中當(dāng)前可用于安裝程序和庫的模塊系統(tǒng)非常相似,因此Java模塊可以與這些系統(tǒng)集成。 這些實(shí)際上不在Jigsaw項(xiàng)目本身的范圍內(nèi),但鼓勵OS供應(yīng)商啟用此功能,他們很可能會這樣做。 例如,可以輕松地增強(qiáng)基于Redhat的linux系統(tǒng)中可用的基于rpm的存儲庫系統(tǒng)和基于Debian的linux系統(tǒng)中可用的基于apt的存儲庫系統(tǒng),以支持java模塊系統(tǒng)。

5.模塊入口點(diǎn) :Java模塊可以指定入口點(diǎn)類,就像jars可以指定它一樣。 運(yùn)行模塊時,將調(diào)用入口點(diǎn)的main方法。 現(xiàn)在,由于操作系統(tǒng)現(xiàn)在可以安裝Java模塊并且可以執(zhí)行Java模塊,因此它與安裝操作系統(tǒng)的本機(jī)程序非常相似。

5.效率 :目前,每次運(yùn)行JVM時,它都會驗(yàn)證程序運(yùn)行期間加載的每個單個類的完整性。 這需要花費(fèi)大量時間。 此外,還可以從OS文件系統(tǒng)單獨(dú)訪問類。 由于可以在運(yùn)行之前安裝模塊,因此安裝本身現(xiàn)在可以包括驗(yàn)證步驟,從而無需在運(yùn)行時驗(yàn)證類。 這將導(dǎo)致相當(dāng)大的性能改進(jìn)。 而且,模塊系統(tǒng)可以以其自己的優(yōu)化方式存儲類,從而進(jìn)一步提高性能。

6.模塊抽象 :可以為特定模塊提供抽象。 說模塊A依賴于模塊X?,F(xiàn)在,模塊D可以提供模塊X,從而提供其實(shí)現(xiàn)。 例如,Apache Xerces模塊將要提供jdk.jaxp模塊,并且能夠滿足jdk.jaxp的依賴關(guān)系要求。

模塊化代碼庫的基礎(chǔ):上面的所有討論都非常模糊,沒有模塊化代碼庫及其用法的真實(shí)示例。 模塊化代碼庫可以是單個模塊或多個模塊。 對于單個模塊,我們需要啟用模塊就是在任何包之外的源路徑的基礎(chǔ)上創(chuàng)建一個名為module-info.java的文件。 module-info.java文件是以特殊語法編寫的特殊Java文件,旨在聲明模塊信息。 以下是此類mdoule-info.java的示例。

module com.a @ 1.0{requires com.b @ 1.0;class com.a.Hello; }

在這種情況下,該模塊名為com.a,并且它對com.b有依賴性。 它還聲明了一個入口點(diǎn)com.a.Hello。 請注意,雖然這可能是最佳做法,但不一定要在程序包結(jié)構(gòu)中加上模塊名稱。

現(xiàn)在您可能會想,如果它是單個模塊模式,那么為什么要依賴于另一個模塊,卻不能使它成為兩個模塊。 請注意,即使只有一個顯式聲明依賴模塊,對所有Java API模塊也存在隱式依賴。 如果沒有將Java API模塊明確聲明為依賴項(xiàng),則將全部包含。 它仍然是單個模塊的唯一原因是com.b必須在模塊庫中以二進(jìn)制形式可用。 同時編譯多個模塊時的多模塊。 在單個模塊中編譯源代碼就像我們編譯非模塊化源代碼一樣簡單。 唯一的區(qū)別是module-info.java將出現(xiàn)在源根目錄中。

多模塊源:如果源包含多個模塊,則必須為它們提供目錄結(jié)構(gòu)。 它非常簡單。 特定模塊下的源必須保存在模塊名稱的目錄中。 例如,模塊com.a中com.a.Hello類的源必須保存在[source-root] /com.a/com/a/Hello.java中,而模塊-info.java必須保留在在目錄[source-root] /com.a中

編譯多模塊源:為此,讓我們考慮一個編譯兩個模塊com.a和com.b的示例。 首先讓我們看一下目錄結(jié)構(gòu)。 如下:

classes src|--com.a| |--module-info.java| |--com| |--a| |--Hello.java|--com.b|--module-info.java|--com|--b|--Printer.java

com.a中module-info.java的代碼將像這樣。

module com.a @ 1.0{requires com.b @ 1.0;class com.a.Hello; }

com.b中的module-info.java

module com.b @ 1.0{exports com.b; }

com.b / com / b中的Printer.java

package com.b;public class Printer{public static void print(String toPrint){System.out.println(toPrint);} }

com.a / com / a中的Hello.java

package com.a; import com.b.Printer;public class Hello{public static void main(String [] args){Printer.print("Hello World!");} }

這些代碼很容易解釋,我們嘗試使用模塊com.a中com.a.Hello類中的模塊com.b中的com.b.Printer類。 為此,com.a module-info.java必須使用Requires關(guān)鍵字將com.b聲明為依賴項(xiàng)。 我們正在嘗試在classes目錄中創(chuàng)建輸出類文件。 下面的javac命令可以做到這一點(diǎn)。

javac -d classes -modulepath classes -sourcepath src `find src -name '*.java'`

請注意,我們在backquotes(`)中使用了find命令,以便該命令的輸出將包含在文件列表中。 這將在linux和unix環(huán)境中工作。 在其他情況下,我們可以簡單地輸入文件列表。

編譯后,classes目錄將具有類似的類結(jié)構(gòu)。 現(xiàn)在,我們可以使用jmod命令安裝模塊。

jmod create -L mlib jmod install -L mlib classes com.b jmod install -L mlib classes com.a

我們首先創(chuàng)建了一個模塊庫mlib并將模塊安裝在該庫中。 通過在jmod中不為install命令指定-L選項(xiàng),我們也可以使用默認(rèn)庫。

現(xiàn)在我們可以使用以下命令運(yùn)行模塊com.a

java -L mlib -m com.a

在這里我們也可以使用默認(rèn)模塊。 還可以創(chuàng)建可直接安裝的可分發(fā)模塊軟件包(相當(dāng)于今天的分發(fā)機(jī)制中的jar)。 例如,以下將為com.a創(chuàng)建com.a@1.0.jmod

jpkg -m classes/com.a jmod com.a

我試圖在即將發(fā)布的Java版本中概述模塊基礎(chǔ)結(jié)構(gòu)。 但是項(xiàng)目Jigsaw每天都在進(jìn)行修改,并且最終可能完全不同。 但是,預(yù)計(jì)基本概念將保持不變。 整個模塊的概念更加復(fù)雜,我將在下一篇文章中詳細(xì)介紹。

參考: Java 8中的烹飪方法–來自JCG合作伙伴 Debasish Ray Chawdhuri的Jigsaw項(xiàng)目 ,位于Geeky Articles博客上。


翻譯自: https://www.javacodegeeks.com/2012/05/whats-cooking-in-java-8-project-jigsaw.html

p1417 烹調(diào)方案

總結(jié)

以上是生活随笔為你收集整理的p1417 烹调方案_Java 8的烹调方式–拼图项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。