本文是走上開放之路系列文章的第二部分。這個系列一共包括三部分,目的是幫助 .NET 、Windows 客戶機-服務器以及 ASP 開發人員快速轉換到 Java 平台上。在走上開放之路系 列文章中,作者將幫助您充分利用現有的開發知識,簡化您通往基於開放標准的編程之路。 對於那些使用 Visual Basic 6 或 C++,而對 Java 語言或 J2EE 技術並不熟悉,但卻對在 基於 Java 和 J2EE 的 Web 應用程序中支持 Web 的 Windows 客戶機-服務器的應用程序非 常感興趣的 Windows 開發人員來說,高級軟件工程師 Mark Weber 和高級電子商務體系結構 師 David Carew 為他們指出了一條道路,並幫助他們了解由 IBM 或其他地方提供的最有用 的一些工具、技術以及在線資料。您可以在相應的論壇中與作者或其他讀者分享您對這些文 章的想法。
您需要對現有的 Windows 客戶機-服務器應用程序或應用程序組件提供 Web 訪問權限嗎 ?您曾經考慮過將這些應用程序部署成基於 Java 技術或基於 J2EE 技術的 Web 應用嗎?如 果您曾經這樣考慮過,那麼這份指南就可以引您入門。本文重點闡述如何將現有的 Windows 客戶機-服務器的應用程序和應用程序組件移植到 Java 和 J2EE 平台上,並著重介紹為了實 現這個目的所采用的一些工具、技術和體系結構方法。在對 Java 技術進行簡要介紹之後, 我們會向您介紹更多一些資源,這些資源可以幫助您學習 Java 語言和 J2EE 技術、將 Windows 應用程序和應用程序組件集成到 Java 和 J2EE 應用程序中,並對這些應用程序提 供 Web 訪問權限。我們還會向您介紹一些集成應用所需要的部署環境,包括 IBM WebSphere 系列產品。
為什麼要使用 Java 技術來實現 Web 支持?
Java 平台既是一種應用程序編程語言,又是一個執行環境。它在語法上類似 C++,並具 有類似 SmallTalk 的執行環境。Sun Microsystems 在 1994 年首次發布了 Java 語言, Internet 浏覽器的廣泛應用使得 Java 語言非常流行。現在業界對於 Java 語言的認可已經 非常普遍。計算機和軟件供應商以及數百家商業公司都已經對 Java 技術非常認可。
Java 語言是一種簡單易用的面向對象語言,它是基於上一代面向對象編程語言 (SmallTalk 和 C++)最好的一些特性而開發出來的。Java 語言與體系結構無關,具有良好 的可移植性、安全性、穩定性,它是一種分布式的、解釋性的動態語言,對於目標應用程序 來說性能很高。Java 還語言包括一個完整的應用程序執行環境。這些特性綜合作用形成以下 三個主要的優點:
Java 語言在源代碼和二進制文件兩個層次上都是與平台無關的; 您只需編寫一次 Java 代碼就可以在任何地方運行這些代碼。
Java 語言的面向對象 的基本特性可以大力支持重用,並能讓您構建現代的應用程序和組件。
Java 語言的 標准 API 集可以讓您將應用程序部署到由多個不同供應商所提供的執行環境中。
J2EE 的優點
J2EE 是分布式企業級的 Java 應用程序平台。J2EE 的標准環境可以讓您分布式地部署應 用並重用應用程序組件。J2EE 中基於組件的現代應用程序體系結構可以大力倡導代碼的重用 ,簡化應用程序及組件的開發與維護,為部署提供充分的靈活性,允許使用負載均衡和分布 組件提高性能,並為應用程序提供更高的可擴展性。
由於 J2EE 的基礎是 Java 技術 ,而 J2EE 本身就是一種標准,因此它具有良好的可移植性。很多 J2EE 的服務器、供應商 以及組件都遵循 J2EE 開放標准,這樣就為您的開發和部署環境提供了一種選擇。Java 和 J2EE 應用程序都是面向網絡的,而且是分布式的,這一特性可以允許您編寫基於 Web 的瘦 客戶機應用程序。與原來的 Windows 應用程序或 Windows 客戶機-服務器應用程序相比,這 種體系結構提供了很多優點,其中包括:
對 Web 浏覽器、各種移動計算設備以及其 他應用程序提供統一的訪問程序的方法
使用完整的 Java 客戶機程序訪問相同的應用 程序可以獲得更豐富的交互性和外觀
升級應用程序到新版本非常容易,因為終端用戶 不需要更新或安裝任何代碼
可以與采用 Java 語言或 J2EE 應用的現代組件的外部應 用程序很好地集成,這樣可以提高重用性以及應用程序的靈活性
Java 編程基礎
在我們潛心研究為應用程序增加 Web 功能之前,首先請您深入了解一下 Java 編程語 言。使用 Java 語言,您既可以編寫服務器端的應用程序,也可以編寫具有 GUI 的客戶機應 用程序。本文假設您希望使用 Java 語言在服務器端實現一個基於 Web 的界面,因此我們就 忽略 GUI 編程環境,並著重介紹 Java 平台非可視化的部分。我們首先簡要介紹一下 Java 軟件開發包(SDK),然後向您介紹一下如何使用 Java 語言編寫一個久負盛名的 “Hello World”程序。接下來,我們向您揭示 Visual Basic 6 與 Java 語言之 間的區別。
Java SDK
Java SDK 是您在編寫和運行 Java 程序時所需要的一組命令行工具和包。Java 程序會 首先使用 JIT 編譯器編譯成一個與平台無關的字節碼,然後這個字節碼會在運行時再被編譯 成專用的代碼。最重要的工具是 Java 編譯器(javac.exe)和 Java 解釋器(java.exe), 後者用來運行 Java 程序。SDK 還包括一些基本的類(稱為 Java 平台),這些類提供了您 開始編寫應用程序所需要的基本功能和 API.
Sun Microsystems 已經為它的 5 個主 要的 Java 平台發行版各自發布發布了一個 SDK。對於本文來說,我們建議您下載最新的 SDK(Java 1.4.2)。Java SDK 是免費的。如果您現在還沒有 SDK,可以立即去下載。
您可以參考 Java 2 標准版(J2SE)API 的在線文檔。這些資料是一些 HTML 文檔, 您可以使用標准的 Web 浏覽器進行查看。API 文檔是一份必備的參考手冊,您可能會頻繁地 使用這份手冊。
Java SDK 基本步驟
使用可以支持長文件名的文本編輯器用普通的 ASCII 碼格式編寫源代碼。
將源代 碼保存為一個擴展名為 .java 的文件。
所有的 Java 關鍵字都是小寫的。對於 變量名和方法名來說,您可以任意使用大小寫,但是在一個類中使用時必須保持一致。
在一個命令行提示符中使用 javac 編譯器對程序進行編譯,javac 是 SDK 中提供的 。此時通常應該指定 .java 擴展名。
在命令行提示符中使用隨 SDK 一起提供的 Java 解釋器運行 Java 程序。此時 不要指定 .class 擴展名。
如果需要,就對代碼 進行調試。在編譯或運行 Java 程序時,可能會出現錯誤。
安裝 SDK
下載 SDK 之後,您需要將其安裝到自己的機器上。安裝過程非常簡單明了。如果在安裝 過程中提示您選擇“典型安裝”或“定制安裝”,那麼您可以選擇 “典型安裝”。(只有當您清楚地了解自己要做什麼,並且知道自己不想向機器 上安裝什麼內容時,才應該選擇“定制安裝”。)安裝程序通常會讓您選擇將標 准的 Java 平台類的源代碼也安裝到機器上。如果您的機器上有足夠的磁盤空間,我們建議 您接受這個選項。這些文件可以提供一個機會,讓您了解構成 Java 語言和標准的 API 的類 是如何實現的。這些類的設計和實現通常都非常精巧,您可以從中學到很多知識。
當 您安裝好 SDK 之後,可能需要對其進行配置,這樣才能在您的系統中正確使用。應該如何配 置 SDK 取決於您的操作系統和正在使用的 SDK 的版本。SDK 中包括了完整的安裝和配置提 示。
第一個 Java 程序
現在,您可以編寫自己的第一個 Java 程序了—— 也就是聞名於世的 “Hello World”。打開您的文本編輯器,然後輸入清單1 中的源代碼。
清單 1. Hello World 程序
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Java 語言是大小寫敏感的,而諸如 class 和 public 之類的關鍵字通常都是小寫。對於您自己的變量名和方法名,您可以任意使用大小寫 ,只要在一個類中使用時保持一致即可。當您輸入完源代碼時,將這些代碼保存到一個 HelloWorld.java 文件中。當源代碼被保存為這個文件時,我們沒有任何選擇。Java 源代碼 使用一個 .java 擴展名,每個 Java 源代碼文件的文件名都 必須 與該文件中定義的類同名 。我們無論怎麼重申這一點都不過分:大小寫非常重要,因此諸如 HELLOWORLD.JAVA 和 Helloworld.java 之類的文件名都會導致一個編譯錯誤。您可以將 HelloWorld.java 保存到 機器中的任何目錄中。但是您在使用命令行工具時,需要進入這個目錄,因此應該確保文件 保存的位置比較方便。
編譯程序
現在您已經准備好編譯 HelloWorld 程序了。隨 SDK 一起提供的 Java 編譯器是一個名 為 javac.exe 的命令行程序。要編譯一個 Java 源代碼文件,您可以簡單地向 javac.exe 程序傳遞一個名為 .java 的文件。要編譯 HelloWorld 程序,請打開一個命令行提示符,然 後將當前目錄切換到您剛才將 HelloWorld.java 保存到的目錄中。接下來執行下面的命令:
javac HelloWorld.java
與 Visual Basic 的編譯器類似,Java 編譯器可能會產生很多錯誤。通常,在 Java 編 譯器成功編譯 HelloWorld 程序之前,您需要首先改正這些錯誤。一次成功的編譯會生成一 個名為 HelloWorld.class 的文件。這個文件代表您要在 Java 解釋器中運行的可執行文件 。
運行程序
與 SDK 一起提供的 Java 解釋器是一個名為 java.exe 的命令行程序。要運行一個 Java 字節碼可執行程序,您可以簡單地向 Java 解釋器傳遞一個 Java 程序名。當您使用 Java 解釋器時,請不要指定 .class 擴展名。解釋器只希望接受類文件,因此如果添加上 .class 擴展名會導致產生錯誤。要運行您的 HelloWorld 程序,請打開一個命令行提示符,然後將 當前目錄切換到您剛才編譯 HelloWorld.java 文件所在的地方。您的字節碼可執行文件 HelloWorld.class 應該就在這個目錄中。然後,執行下面的命令:
java HelloWorld
Java 解釋器試圖執行 HelloWorld 程序的 main() 方法。返回類型為 void 的 Java 方 法等價於 Visual Basic 中的 Sub 。返回其他類型的 Java 方法等價於 Visual Basic 中的 Function 。
Java 解釋器可能會報告一個運行時錯誤,這通常會中斷程序的執行。像 在 Visual Basic 中一樣,Java 運行時錯誤比編譯時錯誤更難調試,但是出現的頻率也比後 者少。當運行時錯誤發生時,您可以從容地處理這些錯誤,因為 Java 程序是在一個受控的 環境中執行的,這樣可以減少那些“肆意運行的代碼”導致整台機器崩潰的可能 性。
非常感謝 Scott Stricker 對於本節和下一節的貢獻,這兩節中的內容改編自他 編寫的指南“Java programming for C/C++ developers” 。
Visual Basic 角度的 Java 101
現在,您對 Java 代碼的大概樣子以及應該如何在您的測試機器上編譯並運行 Java 程序 有了一個基本的概念,已經准備好開始深入了解 Java 語言的結構和語法了,包括 Java 編 程環境和 Java 中標准的數據類型。由於您已經對 Visual Basic 中的編程非常熟悉,因此 我們將通過對 Java 和 Visual Basic 進行比較來學習 Java 編程的知識。我們將通過對 Java 平台上的基本組件與 Visual Basic 編程框架中相應組件的對應關系及其區別對 Java 平台上的基本組件進行介紹。如果您是一個 C/C++ 程序員,就可以跳過本節,轉而參考免費 的 developerWorks中的“ Java programming for C/C++ developers”指南。
Visual Basic 執行環境
Visual Basic 是一種高級編程語言;其目的是簡化人類開發計算機程序的過程。計算機 並不能理解高級語言;它們只能理解低級的機器語言——即可以直接在計算機的 處理器上執行的二進制指令序列。出於這個原因,使用高級語言編寫的程序在計算機上運行 之前必須被轉換成機器語言的程序——即可執行程序。不同的計算機使用的機器 語言也不同。在一台計算機上可以運行的可執行程序在其他使用不同機器語言的機器上可能 無法運行。
將高級編程語言的可執行程序轉換成機器語言的可執行程序有兩種方法: 編譯和解釋。編譯是將使用高級語言編寫的程序全部轉換成一個完整的機器語言程序,後者 就完全可以執行了。解釋是將一個高級程序逐行轉換成機器指令;每一行指令都是在下一行 指令之前被翻譯並執行的。編譯和解釋在邏輯上是等價的,但是編譯後的程序的執行速度比 解釋後的程序速度更快。Visual Basic 程序使用一個稱為編譯器的程序編譯成機器語言可執 行程序。
Java 執行環境
與 Visual Basic 程序一樣,Java 程序也會被編譯。但是 Java 程序有一點與 Visual Basic 程序不同:Java 程序並不會被編譯成與平台相關的機器語言。相反,Java 程序被編 譯成一種與平台無關的語言,稱為 字節碼。雖然字節碼與機器語言非常類似,但是字節碼並 不是被設計用來在真正的物理機器上運行的。相反,它被設計用來通過一個名為 Java 虛擬 機(JVM)的程序運行,JVM 模擬了一台真正的機器。
簡單來說,JVM 是一個解釋器 ,負責將 Java 字節碼轉換成真正的機器語言指令,後者可以在底層的物理機器上執行。更 具體一點說,術語 Java 虛擬機通常就用來表示執行 Java 類文件的任何程序。Java 解釋器 程序 java.exe 就是 JVM 的一個特定實現。
Java 平台使用虛擬機器層來確保使用 Java 語言編寫的程序是與平台無關的。Java 程序一旦被編譯成字節碼之後,就可以在具有 JVM 的任何系統上運行。這些系統包括 UNIX、Linux、Windows 以及其他很多系統。使用其 他語言編寫的程序必須對每一種要在其上執行的平台都重新進行編譯,而 Java 程序只需要 編譯一次即可。
數據類型
Java 語言有兩種不同類型的數據:類定義(或將其作為 SDK 或第三方類庫的一部分使用 )和“原始的”(primitive)類型( boolean , char , byte , short , int , long , float 和 double ),Java 運行庫可以直接理解後者。大部分 Java 原始類型在 Visual Basic 中都有等價的類型,用戶定義的類與 Visual Basic 中的類大部分都非常相似 。表 1 列出了 Java 語言中的原始數據類型及其在 Visual Basic 中等價的類型。
表 1. Java 語言的原始數據類型及其在 Visual Basic 中對應的數據類型
Java 原始類型 范圍 Visual Basic 類型 說明 boolean true, false Boolean booleans 類型的合法值只有 true 和 false 。 char 0 - 65535 String (長度為 1) Java 語言使用 Unicode 對字符進行編碼。 byte 8位 整數(有符號) Byte ? short 16位整數(有 符號) Integer ? int 32位整數(有符號) Long ? long 64位整數(有符號) N/A ? float 32位浮點數 Single ? double 64位浮點數 Double ? N/A ? Variant Java 語言沒有 Variant 類型。 N/A ? Date Java 語言沒有對應的原始數據 類型。您可以使用 Date 類。 N/A ? Currency Java 語言沒有對應的原始數據類型。您可以使用 BigDecimal 類。
清單 2 給出了在兩種語言中聲明原始數據類型的一些例子 。
清單 2. 聲明原始數據類型
Visual Basic Java
Option Explicit // Note that all Java
Dim LetterJ As String, I As Integer, x As Byte // variables must be declared
Dim Point1 As Single, Point2 As Double // before they can be used
Dim IsEmpty As Boolean char letterJ = 'j';
LetterJ = "j" int i = 0;
I = 0 byte x = 12
X = 12 boolean isEmpty = false;
IsEmpty = False float point1 = 1.1F;
Point1 = 1.1 double point2 = 0.0025;
Point2 = 0.0025
操 作符
在 Visual Basic 和 Java 語言中,操作符具有很多共同點,也有很多關鍵的區別。 Java 語言使用的操作符集與 C 和 C++ 使用的操作符集完全相同。表 2 類出了在這兩種語 言中最常使用的一些操作符。
表 2. Visual Basic 和 Java 語言中的操作符
Java 操作符
說明
用法
Visual basic 操 作符
說明
++
自增
++num
num++
N/A
這個一元操作符允許對一個非浮點數字執行自增運算。
--
自減
--num
num--
N/A
這個一元操作符允許對一個非浮點數字執行自減運算。
*
/
乘
除
num * num
num / num
*
/
?
/
整除
num/num
\
Java 語言對於整除和數學除使用同樣的操作符。如 果操作符是整數,那麼就執行整除運算。
%
取模
num % num
Mod
?
+
-
加
減
num + num
num - num
+
-
?
+
字符串拼接
str + str
&
?
<
<=
Less小於 than
Less 小於或等於than or equal
expr < expr
expr <= expr
<
<=
?
>
>=
大於
大於或等於
expr > expr
expr >= expr
>
>=
?
!=
不等於
expr != expr
<>
?
==
等於(基本類型)
expr == expr
=
?
==
等於(對象 )
obj == obj
Is
?
!
邏輯非
!boolean
Not
Visual Basic 對整數執行的位反和對布爾表達式 所執行的邏輯非運算使用相同的操作符,而 Java 則不是。
~
位非
~int
Not
?
&
位 AND
布爾 AND
int & int
expr & expr
And
?
|
位 OR
布爾 OR
int | int
expr | expr
Or
?
^
位 XOR
布爾 XOR
int ^ int
expr ^ expr
Xor
?
&&
條件 AND
if (expr &&expr)...
And
Java 語言對條件與和邏輯布爾與使用不同的操 作符。
||
條件 OR
if (expr || expr) ...
Or
Java 語言對條件或和邏輯布爾或使用不同的操作符。
N/A
模式匹配
str Like pattern
Like
您可以使用 Java 中 String 對象的方法來實現 Visual Basic 中這個操作符的功能。
Visual Basic 的函數和子過程與 Java 方法的比較
在 Visual Basic 中您可以定義函數和子過程。函數與子過程之間的主要區別是子過程沒 有返回值,而函數有返回值。在 Java 術語中,函數被稱為 方法 。Java 語言中沒有與 Visual Basic 中的子過程等價的概念。然而,在 Java 語言中,您可以使用關鍵字 void 定 義一個沒有返回值的方法,這基本上就等價於一個子過程。您可以將 Java 方法聲明為類的 成員;但是不能在一個 Java 類之外定義方法。清單 3 給出了一個具有返回值的 Java 方法 和一個沒有返回值的 Java 方法。
清單 3. Java 方法的返回類型
public class MyClass {
// This method doesn't return a value
public void myMethod1(String arg) {
...
}
// This method returns an integer
public int myMethod2 (String arg) {
int i;
...
return i ;
}
數組
在 Java 語言中,數組是具有很多屬性的對象,其中最重要的是 length 屬性,您可以使 用這個屬性來確定數組的大小。Java 數組通常是從 0 開始索引的,並且數組聲明的大小中 就包含了第 0 個元素。因此,大小為 100 的數組就意味著其有效的索引值是從 0 到 99。 還有,方括號([ ])標記用來說明數組的類型,而不是數組名。Java 語言允許您將數組初 始化為預設的一組值。清單 4 給出了一些例子。
清單 4. 數組
Visual Basic Java
'An array with 100 integers // An array of 100 integers
Dim a(99) As Integer int[] a = new int[100];
'An array of Strings initialized // An array of Strings initialized
b = Array("Tom","Dick", "Harry") String[] b = {"Tom","Dick", "Harry"};
'Iterating through an array // Iterating through an array of length 100
' of length 100 int [] c = new int [100];
Dim c(99) As Integer for (int i = 0; i <.length; i++) {
For i=0 To UBound(c) c[i] = i;
c(i) = i }
Next
字符串
Visual Basic 有一個 String 數據類型來表示字符串。您可以使用 String 類來表示 Java 中的字符串。Visual Basic 和 Java 中的字符串都可以表示成使用引號括起來的一系 列字符。在 Java 語言中,您有兩種方法可以創建一個 String 對象:您可以使用一個字符 串聲明,也可以使用一個 構造函數。 String 對象是不可變的,這就是說一旦您為一個 String 對象賦了一個初值,就不能再修改它了。換而言之,如果您希望修改一個 String 引 用對象的值,就必須為這個引用分配一個新的 String 對象。由於 Java 中的字符串就是對 象,因此您必須使用 String 類中定義的 接口才能與其進行交互。 String 類具有非常豐富 的接口,其中提供了一些非常有用的方法。
清單 5 向我們展示了一些最常用的方法 。請嘗試編譯並運行這個例子。記住將源文件命名為 StringTest.java,不要忘記文件名的 大小寫是非常重要的。
清單 5. Java 語言中的字符串
/*
* The StringTest class simply demonstrates
* how Java Strings are created and how
* String methods can be used to create
* new String objects. Notice that when you
* call a String method like toUpperCase()
* the original String is not modified. To
* actually change the value of the original
* String, you have to assign the new
* String back to the original reference.
*/
public class StringTest {
public static void main(String[] args) {
String str1 = "Hi there";
String str2 = new String("Hi there");
// Display true if str1 and str2 have the value
System.out.println (str1.equals(str2));
// A new uppercase version of str1
System.out.println(str1.toUpperCase());
// A new lowercase version of str2
System.out.println(str1.toLowerCase ());
System.out.println(str1.substring(1,4));
// A new version of str1 w/o any trailing whitespace chars
System.out.println(str1.trim());
// Display true if str1 start with "Hi"
System.out.println(str1.startsWith("Hi"));
// Display true if str1 ends with "there"
System.out.println(str1.endsWith("there"));
// Replace all i's with o's
System.out.println(str1.replace('i', 'o'));
}
}
main() 方法
要在命令行中作為應用程序運行的 Java 類必須定義一個 main() 方法才能運行。在 Java 代碼中, main() 方法遵循一個嚴格的命名約定。您可以按照下面的方式聲明 main() 方法:
public static void main(String[] args)
注意 : 您可以保留 public 和 static 修飾符,您也可以將 String 數組命名為任何您喜歡的名 字。然而要記住上面的格式是常規的用法。並不是所有的類都需要一個 main() 方法 —— 只有那些從命令行中運行的程序才需要。一個典型的 Java 應用程序有一個 具有 main() 方法的類和其他幾個沒有 main() 方法的支持類。
包
像 Java 這種面向對象的語言有助於促進類的重用。由於大部分程序員在自己的類中 都使用非常簡單的描述性名字(例如 Invoice 或 User ),因此在重用他人提供的資源時命 名發生沖突的可能性就會很高。Java 語言通過讓每一個類都屬於一個 包 來解決這個問題。 您可以同時使用不同包中的同名類。要將一個類與一個包關聯在一起,您必須在類的源代碼 中的第一行就使用 package 語句進行聲明。下面是一個例子:
package com.ibm.training;
按照約定,您的包名的前綴要采用 Internet 域名反轉的形式(例如 com.yourco.somepackage )。要使用其他包中的類,您有兩種選擇。第一種選擇是使用該類 的全名,其中包括包名。清單 6 給出了一個例子。
清單 6. 使用完整的類名
public class PackDemo1 {
public static void main(String[] args) {
Java.util.Date today = new java.util.Date();
System.out.println("The date is " + today);
}
另外一種方法 是在源代碼文件中對其他包中的類使用一個 import 語句。這樣就不再需要全名了,如清單 7 所示。
清單 7. 使用 import 語句
import java.util.Date;
public class PackDemo1 {
public static void main(String[] args) {
Date today = new Date();
System.out.println("The date is " + today);
}
您可以使用通配符來導入一個包中的所有類。如 果您需要使用同一個包中的多個類,這種功能就會非常有用,如清單 8 所示。
清單 8. 使用帶有通配符的 import 語句
import java.util.*;
public class PackDemo1 {
public static void main(String[] args) {
Date now = new Date();
System.out.println("The date is " + today);
}
包的重用
在 Visual Basic 中,您可以先編寫一些代碼,並將其編譯為動態鏈接庫 (DLL),所謂動態鏈接庫就是文件系統中一個擴展名為 .dll 的文件。其他程序可以通過引 用這些 DLL 來使用其中包含的代碼。Java 語言還允許您將多個類文件打包成稱為 Java 檔 案包(JAR)的文件,以便易於重用。具有 .jar 擴展名的文件是一種標准的壓縮文件,可以 使用 WinZip 或其他壓縮工具進行維護。然而,為了方便起見,Java SDK 包含了一個名為 jar.exe 的工具(在 Windows 平台上),您可以使用這個工具將多個類打包到一個 .jar 文 件中。
在我們向您介紹一個使用 jar.exe 工具的例子之前,重要的一點是您需要理 解包名與 Java 平台用來構建類並在運行時裝入類時所使用的目錄結構有關。考慮一個名為 Test 的類,其源代碼文件名為 Test.java。如果您將 Test.java 定義成包 com.mycompany.test 的一部分,那麼編譯器就為生成的 .class 模塊創建一個目錄樹。這個 目錄樹是根據包名生成的,在本例中這個目錄樹是 com\mycompany\test,其中包名中的小數 點被轉換為一級級的目錄。
現在,請打開一個命令提示符,並創建一個目錄(例如 c:\javapack)。然後將當前路徑切換到該目錄中( cd javapack ),並使用您喜歡的文本 編輯器將清單 9 中的代碼添加到一個名為 Test.java 的新文件中。
清單 9. 使用包 的例子
package com.mycompany.test;
public class Test
{
public static void main(String[] args) {
System.out.println("In test");
}
}
現在,使用下面的命 令編譯 Test.java( -d 選項應該指向您剛才為本例創建的目錄):
java -d c:\javapack Test.java
現在在 c:\javapack 目錄中應該已經有了一個名為 com 的子目錄。實際上,您可以看到 comTest.class 文件的完整名,該文件是在對 Test.class 編譯時產生的。注意包名( com.mycompany.test )如何被轉換成相應的目錄結構(com\mycompany\test),該目錄結構 相對於您剛才使用 -d 選項指定的目錄。
現在,我們將向您展示 Test.class 如何才 能更易於其他類重用。在 c:\javapack 目錄中運行這個命令:
jar -cvf Test.jar com
這個命令會創建一個文件,文件名為 Test.jar,其中包含了 com 子目錄中的 所有類。
運行下面這個命令,使用 Test.jar 文件中的類:
java - classpath Test.jar com.mycompany.test.Test
注意您只能使用全名才能 在命令行中運行這個命令,還要注意使用 -classpath 選項指向 Test.jar 的方法。另外, 您可以將 Test.jar 文件加入 CLASSPATH 環境變量中, CLASSPATH 環境變量是一個使用冒 號分割的列表,每一項的內容是 JAR 文件或目錄,Java 編譯器和 JVM 都會使用這個環境變 量來查找要裝載的類。
其他區別
我們已經了解了 Java 語言 與 Visual Basic 之間主要的一些語法區別, 它們之間還有以下一些區別:
全局變量:與 Visual Basic 不同,Java 語言並不提 供聲明全局變量(或方法)的方法。
GoTo : 雖然 Java 語言保留了 goto 作為一個 關鍵字,但是它並沒有類似於一個 Visual Basic 用法的 Goto 語句。
自由放置變量 :您根據需要可以在任何地方聲明 Java 變量。您並不需要集中聲明變量,但是在 Visual Basic 中必須如此。
繼承:Visual Basic 並不會讓您定義對其他類的功能進行擴展 的類。Java 語言可以讓您定義一個繼承除超類私有成員之外的部分的類。這些新類可以對所 繼承的類進行擴展,也可以重載所繼承的成員的一些行為。(在下一節中您將了解更多有關 繼承的內容。)