《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > Java 平臺的擴展機制

Java 平臺的擴展機制

2008-12-19
作者:王秀峰,李利

一、什么是擴展機制?

從1.2版開始,Java 平臺引入了一種機制——擴展(Extension),這種機制提供了一種標準的、方便的方式,以使在同一Java平臺上運行的應用程序" title="應用程序">應用程序都能使用客戶提供的(非平臺本身提供的)API。通過擴展機制,可以使用一些自己所寫的包和類對Java平臺進行增強,我們暫且稱這些類或包為“擴展”。采用擴展機制,不用在類路徑(classpath)上添加“擴展”,運行環境也能找到并加載" title="加載">加載這些“擴展” 。從這一點看,“擴展”就像Java平臺的核心類一樣,這也正是這些類之所以稱為“擴展”的原因——它們實際上是對Java平臺核心API進行了擴展,更加加強了“Write Once,Run Anywhere”的理念。

如圖1所示,“擴展”就是將類打包成“JAR”文件,成為Java平臺的可添加的模塊,它們的類和公共的API對于運行在Java平臺上的任何應用程序都是可以使用的。不但如此,Java的擴展機制還提供了一種通過遠程下載供Applet使用“擴展”的方式。

二、擴展的方式

有兩種擴展方式,分別適于不同的環境,下面我們通過簡單示例說明如何應用Java平臺的擴展機制。

方式一:安裝擴展?

“安裝擴展”是指將“擴展”的JAR文件放在Java運行環境(JRE)軟件安裝" title="軟件安裝">軟件安裝目錄中的/lib/ext目錄下(注意:是JRE軟件安裝目錄下的/lib/ext/目錄)。JRE是Java開發工具包(Java Development Kit,JDK)的運行部分,JRE既可以單獨使用,也可以作為JDK的一部分而使用(如果只是提供運行環境,而不是用以開發,僅僅安裝JRE就可以了)。JDK軟件的目錄樹如下所示:

JRE就是上圖中灰色部分,它是JDK的真子集。不論JRE是單獨使用,還是作為JDK的一部分,在JRE中的 /lib/ext目錄下的任何JAR文件都自動作為運行環境的“擴展”。

例如,我們創建一個簡單的“擴展”,含有一個類Square,用于計算一個整數的平方。代碼如下:

public final class Square{

?????? public static int getSquare(int a){

????????????? return a*a;

?????? }

}

Square 類含有一個方法——getSquare,它以一個整數為參數,返回這個整數的平方。

假使有一個應用程序(Application)——ComputeSquareApp,要使用Square類,代碼如下:

public class ComputeSquareApp{

?????? public static void main(String[] args){

????????????? int s=10;

????????????? System.out.println('整數'+s+'的平方是'+Square.getSquare(s));

?????? }

}

假如我們已將Square類打包成square.jar文件,那么在不使用擴展機制的情況下怎么運行ComputeSquareApp這個應用程序呢?因為Square類不是Java平臺的一部分(是我們自己定義的類),所以,如果square.jar是在目錄 c:myjava下,為了正常運行ComputeSquareApp,則應當使用如下命令:

java –classpath ?.;c:myjavasquare.jar ComputeSq?

也就是命令中的類路徑既要包含ComputeSquareApp.class文件所在的當前目錄,又要包含square.jar的路徑。

下面我們看一下在采用擴展機制時如何運行ComputeSquareApp程序。要使Square類成為“擴展”,需要將square.jar文件放在JRE的 lib/ext目錄下,這樣,就使Square類自動成為安裝方式" title="安裝方式">安裝方式的“擴展”。因為我們將square.jar作為安裝方式的“擴展”,運行環境就能夠找到并加載Square類,即使我們不指定Square的類路徑。這樣,我們在命令行直接輸入下面不帶類路徑的命令,就能運行程序:

java ComputeSquareApp?

同樣,在這個做了擴展的系統下運行的任何Applet或Application都可以找到并使用Square類。

方式二:“下載擴展”?

“下載擴展”是指在其它JAR文件的清單(manifest)文件的Class-Path頭中列出的JAR文件中的類,“下載擴展”不像“安裝擴展”那樣處于JRE中,它僅是在需要時從所指定的URL加載。例如,a.jar和b.jar是兩個在同一目錄下的JAR文件,a.jar的manifest文件包含下面的" title="面的">面的頭:

Class-Path:b.jar

那么b.jar中的類就可用作a.jar中類的“下載擴展”,這樣b.jar中的類不用寫在類路徑上,a.jar中的類就可以調用b.jar中的類(a.jar自身可以是也可以不是“擴展”)。

為了更好理解“下載擴展”,讓我們看一個例子。

假如我們創建了一個要使用前面Square類的Applet——ComputeSquareApplet:

import java.applet.Applet;

import java.awt.*;

public class ComputeSquareApplet extends Applet {

??? int s=10;

???

??? public void paint(Graphics g) {

??????? g.drawString('整數'+s+'的平房是'

????????????????????? + Square.getSquare(s), 10, 10);

??? }

}

這個Applet通過調用Square類的方法getSquare計算一個整數的平方。然而,這個Applet是下載到調用方的機器上運行的,調用方的系統中并沒有Square類,所以若不采取措施ComputeSquareApplet是不能正常運行的。解決這個問題的方式之一就是將Square類做成“下載擴展”,在ComputeSquareApplet運行時可以加載“下載擴展”。

如何做呢?首先將Square類打包成Square.jar文件,將ComputeSquareApplet打包成ComputeSquareApplet.jar文件(須將Square.jar列到ComputeSquareApplet.jar的manifest文件頭部的Class-Path中),這樣Square類就會被當做“下載擴展” 。ComputeSquareApplet.jar的manifest文件就像下面這樣:

Manifest-Version: 1.0

Class-Path: RectangleArea.jar

上面ComputeSquareApplet.jar的manifest文件的Class-Path沒有特別指明路徑,表示Square.jar和ComputeSquareApplet.jar處于同一個目錄中。

另外,如果Applet或Application使用了不止一個擴展,我們可以在manifest文件中列出多個URL,例如,下面就是一個有效的Class-Path頭:

Class-Path: area.jar servlet.jar ?images/

在Class-Path頭中列出的URL如果不是以“/”結尾,就表示是JAR文件,如果以“/”結尾則表示是目錄,在上面的例子中,images/就是目錄,其中含有Applet或Application所需的資源。

我們還可以使用多個Class-Path頭指定多個擴展的URL。例如:

Class-Path: area.jar

Class-Path: servlet.jar

“下載擴展”還可以是“擴展鏈”,也就是一個“下載擴展”還可以有一個“Class-Path”頭指向另一個“擴展”,第二個“擴展”還可以指向第三個“擴展”,……

三、擴展機制的背后

為什么使用“擴展”就不用指明類路徑了呢?是因為擴展機制利用了Java平臺(1.2版之后)的新類加載機制。當需要為應用程序加載一個新的類時,運行環境從以下位置并且按以下順序搜索這個新類:

1.????????????? 引導(Bootstrap)類:rt.jar文件中的運行時類以及i18n.jar文件中的國際化類。

2.????????????? “安裝擴展”:JRE中lib/ext目錄下JAR文件中的類。

3.????????????? 指明的類路徑:系統屬性java.class.path所指明的路徑下的類以及這些路徑下的JAR文件中的類。如果類路徑中的JAR文件的manifest文件帶有Class-Path屬性,那么Class-Path所指定的類也會被搜索。默認情況下,java.class.path屬性的值是“.”,即當前路徑,我們可以通過設置環境變量“CLASSPATH”或者在命令行中使用“-classpath”或“-cp”選項改變這個屬性值。

按照上面的順序,我們可知只有在rt.jar、i18n.jar以及“安裝擴展”中沒有找到所需的類時,才會在類路徑所指的地方進行搜索。我們采用擴展機制時,由于運行環境自動從“安裝擴展”中加載所需的類,因此,就不用再特別指明類路徑了。

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
午夜久久久久久| 麻豆精品在线播放| 亚洲国产cao| 亚洲在线中文字幕| 日韩一本二本av| 91久久线看在观草草青青| 国产一区二区三区在线观看视频| 欧美视频网站| 欧美日韩一区二区国产| 欧美精品三级| 欧美激情第9页| 欧美激情成人在线视频| 欧美大片免费观看在线观看网站推荐 | 在线中文字幕一区| 日韩亚洲欧美成人一区| 日韩亚洲综合在线| 99爱精品视频| 宅男噜噜噜66一区二区66| 99视频有精品| 一区二区三区视频在线看| 一区二区三区高清在线| 在线视频欧美日韩精品| 国产精品99久久久久久宅男| 在线视频精品一区| 亚洲制服丝袜在线| 篠田优中文在线播放第一区| 香港久久久电影| 久久精品91久久久久久再现| 久久久91精品国产| 免费久久精品视频| 欧美日韩a区| 国产精品久久久久久久app| 国产精品久久久久久久久久尿 | 性感少妇一区| 欧美一区二区三区免费看| 久久成人在线| 理论片一区二区在线| 欧美国产大片| 欧美日韩综合久久| 国产欧美日韩在线播放| 国产亚洲va综合人人澡精品| 黄色在线一区| 亚洲精品乱码视频 | 中国亚洲黄色| 小处雏高清一区二区三区| 亚洲丰满在线| 一区二区三区久久精品| 亚洲欧美日韩国产综合在线| 久久精品国产亚洲aⅴ| 欧美成人免费网站| 欧美午夜精品久久久久久超碰| 国产精品亚洲综合久久| 狠狠色丁香久久婷婷综合丁香| 亚洲黄色毛片| 亚洲一区在线观看视频 | 亚洲高清成人| 在线视频欧美日韩精品| 久久疯狂做爰流白浆xx| 欧美电影免费观看大全| 国产精品久久久久影院亚瑟 | 午夜精品电影| 免费亚洲电影在线观看| 欧美三级电影网| 国内精品久久久久久| 亚洲精品欧美激情| 性色av一区二区三区在线观看| 亚洲欧洲日产国产综合网| 亚洲一区视频| 男女激情视频一区| 国产精品影视天天线| 亚洲人体影院| 欧美专区日韩专区| 亚洲一区二区欧美| 美女精品一区| 国产精品一区在线播放| 亚洲欧洲日本国产| 欧美亚洲免费高清在线观看| 99精品国产一区二区青青牛奶 | 欧美精品国产| 国产一区二区剧情av在线| 日韩午夜视频在线观看| 欧美在线视频观看免费网站| 在线视频中文亚洲| 麻豆精品精品国产自在97香蕉| 国产精品久久国产三级国电话系列 | 午夜精品一区二区三区在线播放| 最新国产成人av网站网址麻豆| 香蕉久久久久久久av网站| 欧美激情1区2区3区| 国产自产女人91一区在线观看| 在线综合亚洲欧美在线视频| 亚洲七七久久综合桃花剧情介绍| 性欧美8khd高清极品| 欧美日韩第一区日日骚| 悠悠资源网久久精品| 午夜久久资源| 亚洲一区二区免费| 欧美日本国产精品| 在线不卡a资源高清| 亚欧美中日韩视频| 午夜影院日韩| 国产精品高潮粉嫩av| 亚洲巨乳在线| 亚洲美女淫视频| 久久久中精品2020中文| 国产精品视频成人| 在线中文字幕一区| 亚洲午夜视频| 欧美日韩国产色综合一二三四| **网站欧美大片在线观看| 久久福利一区| 久久久久国色av免费观看性色| 国产精品免费电影| 中文亚洲视频在线| 亚洲一区国产| 国产精品qvod| 中文国产成人精品| 亚洲在线免费| 国产精品毛片大码女人| 中文在线资源观看网站视频免费不卡| 99国内精品| 欧美日韩国产综合新一区| 亚洲精品久久久久| 日韩视频在线观看免费| 欧美成人免费大片| 亚洲欧洲精品一区二区三区不卡| 亚洲日本中文字幕区| 欧美大尺度在线| 亚洲欧洲日本一区二区三区| 亚洲精品国产品国语在线app| 免费成人激情视频| 亚洲国产精品久久久久婷婷884 | 午夜精品久久| 国产精品一区久久久| 午夜亚洲福利| 久久久成人网| 伊人色综合久久天天五月婷| 亚洲国产成人91精品| 母乳一区在线观看| 亚洲精品一区二区三区樱花| 一区二区三区成人| 国产精品久久久久久超碰| 亚洲资源av| 久久精品一区二区三区中文字幕 | 欧美一级一区| 久久综合九色综合网站| 亚洲国产精品久久久久| 在线一区二区视频| 国产精品免费网站在线观看| 亚洲欧美日韩国产中文| 久久久久久久999精品视频| 精品999在线播放| 亚洲精品日产精品乱码不卡| 欧美日韩在线观看一区二区| 亚洲在线一区二区| 久久先锋影音| 亚洲韩国精品一区| 亚洲一二三四区| 国产一区二区精品丝袜| 亚洲欧洲精品一区| 欧美日韩国产色综合一二三四| 亚洲一区网站| 欧美freesex8一10精品| 99视频日韩| 久久精品亚洲精品| 亚洲国产日韩美| 亚洲欧美国产日韩天堂区| 国内精品久久久久久久果冻传媒| 亚洲日本电影在线| 国产精品热久久久久夜色精品三区| 羞羞答答国产精品www一本| 欧美不卡福利| 亚洲午夜电影| 麻豆成人av| 亚洲网址在线| 男女精品网站| 亚洲自拍偷拍一区| 蜜臀91精品一区二区三区| 一区二区三区免费观看| 久久亚洲精选| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久久久久网址| 91久久国产自产拍夜夜嗨| 欧美亚洲综合久久| 91久久国产综合久久蜜月精品| 亚洲欧美日韩国产成人| 永久免费视频成人| 先锋影音国产精品| 最新国产成人在线观看| 久久国产精品色婷婷| 日韩视频在线一区| 狼人天天伊人久久| 亚洲一区二区三区精品在线观看| 久久亚洲私人国产精品va媚药| 夜夜夜久久久| 蜜桃精品一区二区三区| 亚洲欧美精品suv| 欧美日韩在线亚洲一区蜜芽| 亚洲国产成人在线| 国产农村妇女精品一二区|