




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、學好 JA V A 最關鍵幾點 ( 包含 jar 命令詳解 第一個是 path 和 CLASSPATH的問題第二個是 package 和 import 問題第三個是 public , protected , private , static ,什 么時候用,為什么要用, 怎么用第四個是制作 jar 文件第一個 ,path 和 CLASSPATH的問題什么是 path是你的 JDK 的工作路徑例如 你的 jdk 安裝在 C:/jdk/ 此時的你的 path (如果原來沒有 PATH 設置 為 PATH ;C:/jdk/ bin什么是 ClasspathClasspath 是 Java 中的重要概
2、念, 它描述了 Java 虛擬機在運行一個 Class 時在 哪些路徑中加載要運行的類以及運行的類要用到的類。 簡單的說, 當一個程序找 不到他所需的其他類文件時, 系統會自動到 CLASSPATH 環境變量所指明的路徑中 去查找第三方提供的類和用戶定義的類,Classpath和 Java 包的關系Java 的包(Package 和 classpath 關系密切。包是以 "." 分割的, SUN 建議使用 域名的逆向排列來區分不同的包,以避免沖突,如 pany.util 。在一個 包里的類在存儲的時候需要存儲在和包名相同的目錄里,如上述 pany.util 包中的 Samp
3、le.class , 要存儲在 comcompanyutil目錄中。 Classpath 有兩種表達方式, 一種是指向目錄的 classpath , 如 C:workclasses, 表示 C:workclasses目錄是一個 classpath 條目; 另一種方式是指向壓縮文件 的 classpath ,如 C:workutil.jar ,表示 C:workutil.jar 文件是一個 classpath 條目,任何一個包含 Java 類的 zip 格式的壓縮文件都可以作為 classpath 的條目。那么 classpath 和包到底是什么關系呢?簡單的說,就是 Java 虛擬機在加載類
4、的時候以這樣一種方式查找具體的類文件:classpath +包存儲的目錄+具體的 類文件。如 classpath 中有一個 c:workclasses條目,需要加載的類是 pany.util.Sample.class ,那么在加載這個類的時候,虛擬機會查找 c:workclassescomcompanyutil目錄,如果 Sample.class 在這個目錄中, 虛擬機就可以找到,如果這個類不在這個目錄中,同時也不在任何一個其它 classpath 中,那么虛擬機會拋出一個 ClassNotFoundException 。Classpath 的順序和類版本沖突Java 虛擬機在加載類的時候查找
5、 classpath 是有順序的,如果在 classpath 中 有多個條目都有同一個名稱的類, 那么在較前位置的類會被加載, 后面的會被忽 略。這種按照順序的類加載可能會導致類的版本沖突。例如 classpath = c:servlet2.2servlet.jar ; c:servlet2.3servlet.jar , 那么在實際應用的 過程中,你使用的是 servlet2.2,而不是 servlet2.3。很多時候如果不注意這 一點,可能會導致奇怪的異常。命令行狀態下的 classpath 設置命令行狀態下的 classpath 可以通過兩種方式設置。一種是直接設置環境變量,例如在 win
6、dows 環境下,我們使用 set 命令: set classpath=c:workclasses; c:workutil.jar另一種方式是在執行 javac 、 java 或者其它 Java 命令時直接指定 classpath : java -classpath c:workclasses;c:workutil.jar pany.util.Sam ple二 package 和 import 問題Java 中的包 (Package其實指的就是目錄, 它是為了更好地管理 Java 類 (Class和接口 (Interface。 Java 語言的包可以被另一個 Java 開發包所使用。如果我 們
7、要引用某個包中的類,用 import 關鍵字來標明即可 ,Package 行要在 import 行之前 ,Package打包后將生成在 Classpath 指明的路徑下例如 Classpath 為 C:/testPackage com.dir結果為 將在 C:/test目錄下生成 com 子目錄 , 目錄 com 包含 dir 目錄 所有的文 件將放在 dir 目錄在 Java 中對象的體現在包的定義和應用中 , 對于已經編好的類 , 如果在新類中要 使用 , 應將已經定義的類包含近來 ,Java 中用 import 語句實現 .使用 import 語句的加入所有類 (以上面 Package
8、打包為例 import com.dir.*;使用 import 語句的加入特指類 (以上面 Package 打包為例 , 假如目錄中存在 hello.classimport com.dir.hello;第三 ,public , protected , private , static ,什 么時候用,為什么要用,怎 么用每個類都創造了有自己的名字空間, 指方法和變量可以知道彼此的存在, 可以使 用。public類不但可以被同一程序包中的其它類使用, 別的程序包中的類也可以使用;變量和方法的修飾字 public 、 protected 、 private :public:任何其他類、 對象只要可
9、以看到這個類的話, 那么它就可以存取變 量的數據,或使用方法。class ABCpublic int pub_i=5;public void show(System.out.println("pub_i"+pub_i;class Demopublic static void main(String argsABC abc=new ABC(;System.out.println("abc.pub_i"+abc.pub_i;abc.pub_i=10;abc.show(;protected變量和方法:如果一個類中變量或方法有修飾字 protected ,同一類
10、、同一包可以使用。 不同包的類要使用,必須是該類的子類,可以存取變量或調用。public class ABCprotected int pro_i=5;protected void show(System.out.println("pro_i=" +pro_i; 同包的類:class DEFpublic static void main(String argsABC abc=new ABC(;System.out.println("_i="+_i;abc.pub_i=10;abc.show(;不同包但是是子類:import m
11、ytest.pack.ABC;class DEF extends ABCpublic static void main(String agrsDEF def=new DEF(;System.out.println(def.i;def.i=10;def.show(;private不允許任何其他類存取和調用;當子類中的變量名與父類的相同,原來的變量被遮蓋。方法的覆蓋 (overriding和重載 (overloading。子孫類中定義的方法和祖 先類中某個方法同名、 同參數行, 則祖先類中的該方法被覆蓋; 方法的重載是指 一個對象的多態性,即多個方法用相同的名稱,但參數行不同。final:fina
12、l在方法之前 , 防止該方法被覆蓋;final在類之前 , 標是該類不能被繼承;final在變量之前 , 定義一個常量。static:在變量或方法之前 , 表明它們是屬于類的;靜態變量在各實例間共享, 如果是 public 靜態變量 , 則其它類可以不通過實 例化訪問它們;靜態方法稱為類的方法,因此不用實例化即可調用 (面向過程 一個對象的方法可以訪問對象的數據成員 , 盡管不屬于方法的局部變量;一 個類的方法只能訪問自己的局部變量。例 :不正確的引用class StaticErrorString mystring="hello"public static void mai
13、n(String argsSystem.out.println(mystring;錯誤信息:can't make a static reference to nonstatic variable. 為什么不正確?只有對象的方法可以訪問對象的變量。解決的辦法:1 將變量改稱類變量class StaticErrorstatic String mystring="hello"public static void main(String argsSystem.out.println(mystring;2 先創建一個類的實例class NoStaticErrorpublic
14、static void main(String argsString mystring="hello"System.out.println(mystring;第四個 , 制作 jar 文件JAR 文件就是 Java Archive File, 顧名思意, 它的應用是與 Java 息息相關的, 是 Java 的一種文檔格式。 JAR 文件非常類似 ZIP 文件準確的說,它就 是 ZIP 文件, 所以叫它文件包。 JAR 文件與 ZIP 文件唯一的區別就是在 JAR 文件的內容中,包含了一個 META-INF/MANIFEST.MF 文件,這個文件是在生成 JAR 文件的時候自
15、動創建的1. JAR 文件包JAR 文件就是 Java Archive File, 顧名思意, 它的應用是與 Java 息息相關的, 是 Java 的一種文檔格式。 JAR 文件非常類似 ZIP 文件準確的說,它就 是 ZIP 文件, 所以叫它文件包。 JAR 文件與 ZIP 文件唯一的區別就是在 JAR 文 件的內容中,包含了一個 META-INF/MANIFEST.MF 文件,這個文件是在生成 JAR 文件的時候自動創建的。舉個例子,如果我們具有如下目錄結構的一些 文件:=- test- Test.class把它壓縮成 ZIP 文件 test.zip,則這個 ZIP 文件的內部目錄結構為:
16、test.zip- test- Test.class如果我們使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,則這個 JAR 文件的內部目錄結構為:test.jar|- META-INF| - MANIFEST.MF- test-Test.class2. 創建可執行的 JAR 文件包制作一個可執行的 JAR 文件包來發布你的程序是 JAR 文件包最典型的用法。 Java 程序是由若干個 .class 文件組成的。這些 .class 文件必須根據它們所屬的包不同而分級分目錄存放;運行前需要把所有用到的包的根目錄指定 給 CLASSPATH 環境變量或者 java 命令的
17、-cp 參數; 運行時還要到控制臺下去 使用 java 命令來運行,如果需要直接雙擊運行必須寫 Windows 的批處理文 件 (.bat 或者 Linux 的 Shell 程序。因此,許多人說, Java 是一種方便開 發者苦了用戶的程序設計語言。其實不然,如果開發者能夠制作一個可執行的 JAR 文件包交給用戶,那么用戶 使用起來就方便了。在 Windows 下安裝 JRE (Java Runtime Environment 的 時候,安裝文件會將 .jar 文件映射給 javaw.exe 打開。那么,對于一個可執 行的 JAR 文件包,用戶只需要雙擊它就可以運行程序了,和閱讀 .chm 文
18、檔一 樣方便 (.chm 文檔默認是由 hh.exe 打開的 。 那么, 現在的關鍵, 就是如何來 創建這個可執行的 JAR 文件包。創建可執行的 JAR 文件包,需要使用帶 cvfm 參數的 jar 命令,同樣以上 述 test 目錄為例,命令如下:jar cvfm test.jar manifest.mf test這里 test.jar 和 manifest.mf 兩個文件, 分別是對應的參數 f 和 m, 其重頭 戲在 manifest.mf。因為要創建可執行的 JAR 文件包,光靠指定一個 manifest.mf 文件是不夠的, 因為 MANIFEST 是 JAR 文件包的特征, 可執
19、行 的 JAR 文件包和不可執行的 JAR 文件包都包含 MANIFEST。關鍵在于可執 行 JAR 文件包的 MANIFEST,其內容包含了 Main-Class 一項。這在 MANIFEST 中書寫格式如下:Main-Class: 可執行主類全名 (包含包名 例如, 假設上例中的 Test.class 是屬于 test 包的, 而且是可執行的類 (定義 了 public static void main(String 方法 ,那么這個 manifest.mf 可以 編輯如下:Main-Class: test.Test <回車 >這個 manifest.mf 可以放在任何位置,也
20、可以是其它的文件名,只需要有 Main-Class: test.Test 一行,且該行以一個回車符結束即可。創建了 manifest.mf 文件之后,我們的目錄結構變為:=|- test| - Test.class- manifest.mf這時候,需要到 test 目錄的上級目錄中去使用 jar 命令來創建 JAR 文件包。 也就是在目錄樹中使用“=”表示的那個目錄中,使用如下命令:jar cvfm test.jar manifest.mf test之后在“=”目錄中創建了 test.jar,這個 test.jar 就是執行的 JAR 文件 包。運行時只需要使用 java -jar test.
21、jar 命令即可。需要注意的是,創建的 JAR 文件包中需要包含完整的、與 Java 程序的包結構 對應的目錄結構,就像上例一樣。而 Main-Class 指定的類,也必須是完整的、 包含包路徑的類名,如上例的 test.Test;而且在沒有打成 JAR 文件包之前可 以使用 java <類名 > 來運行這個類, 即在上例中 java test.Test 是可以正確 運行的 (當然要在 CLASSPATH 正確的情況下 。jar 命令詳解jar 是隨 JDK 安裝的,在 JDK 安裝目錄下的 bin 目錄中, Windows 下文件名 為 jar .exe , Linux 下文件名
22、為 jar 。它的運行需要用到 JDK 安裝目錄下 lib 目錄中的 tools.jar 文件。不過我們除了安裝 JDK 什么也不需要做, 因為 SUN 已經幫我們做好了。我們甚至不需要將 tools.jar 放到 CLASSPATH 中。使用不帶任何的 jar 命令我們可以看到 jar 命令的用法如下:jar ctxuvfm0M jar -文件 manifest-文件 -C 目錄 文件名 .其中 ctxu 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一個, 它們分別表示:-c 創建新的 JAR 文件包-t 列出 JAR 文件包的內容列表-x 展開 JAR 文件包的指定
23、文件或者所有文件-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中 vfm0M 中的選項可以任選,也可以不選,它們是 jar 命令的選項參數-v 生成詳細報告并打印到標準輸出-f 指定 JAR 文件名,通常這個參數是必須的-m 指定需要包含的 MANIFEST 清單文件-0 只存儲,不壓縮,這樣產生的 JAR 文件包會比不用該參數產生的體積大, 但速度更快-M 不產生所有項的清單(MANIFEST 文件,此參數會忽略 -m 參數jar -文件 即需要生成、 查看、 更新或者 解開 的 JAR 文件包, 它是 -f 參數的 附屬參數manifest-文件 即 MANIFEST 清
24、單文件,它是 -m 參數的附屬參數-C 目錄 表示轉到指定目錄下去執行這個 jar 命令的操作。它相當于先使 用 cd 命令轉該目錄下再執行不帶 -C 參數的 jar 命令,它只能在創建和更 新 JAR 文件包的時候可用。文件名 . 指定一個文件 /目錄列表, 這些文件 /目錄就是要添加到 JAR 文件包 中的文件 /目錄。 如果指定了目錄, 那么 jar 命令打包的時候會自動把該目錄中 的所有文件和子目錄打入包中。下面舉一些例子來說明 jar 命令的用法:1 jar cf test.jar test該命令沒有執行過程的顯示, 執行結果是在當前目錄生成了 test.jar 文件。 如 果當前目
25、錄已經存在 test.jar ,那么該文件將被覆蓋。2 jar cvf test.jar test該命令與上例中的結果相同,但是由于 v 參數的作用,顯示出了打包過程,如 下:標明清單 (manifest增加:test/(讀入 = 0 (寫出 = 0(存儲了 0%增加:test/Test.class(讀入 = 7 (寫出 = 6(壓縮了 14%3 jar cvfM test.jar test該命令與 2 結果類似,但在生成的 test.jar 中沒有包含 META-INF/MANIFEST 文件,打包過程的信息也略有差別:增加:test/(讀入 = 0 (寫出 = 0(存儲了 0%增加:tes
26、t/Test.class(讀入 = 7 (寫出 = 6(壓縮了 14%4 jar cvfm test.jar manifest.mf test運行結果與 2 相似,顯示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 內容不同,是包含了 manifest.mf 的內容5 jar tf test.jar在 test.jar 已經存在的情況下,可以查看 test.jar 中的內容,如對于 2 和 3 生成的 test.jar 分別應該此命令,結果如下;對于 2META-INF/META-INF/MANIFEST.MFtest/test/Test.class對于 3test/
27、test/Test.class6 jar tvf test.jar除顯示 5 中顯示的內容外,還包括包內文件的詳細信息,如:0 Wed Jun 19 15:39:06 GMT 2002 META-INF/86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF0 Wed Jun 19 15:33:04 GMT 2002 test/7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class7 jar xf test.jar解開 test.jar 到當前目錄,不顯示任何信息,對于 2 生成的 test.jar , 解
28、 開 后的目錄結構如下:=|- META-INF| - MANIFEST- test-Test.class8 jar xvf test.jar運行結果與 7 相同,對于解壓過程有詳細信息顯示,如:創建:META-INF/展開:META-INF/MANIFEST.MF創建:test/展開:test/Test.class9 jar uf test.jar manifest.mf在 test.jar 中添加了文件 manifest.mf, 此使用 jar tf 來查看 test.jar 可 以發現 test.jar 中比原來多了一個 manifest。這里順便提一下,如果使 用 -m 參數并指定 manifest.mf 文件,那么 manifest.mf 是作為清單文件 MANIFEST 來使用的, 它的內容會被添加到 MANIFEST 中; 但是, 如果作為一 般文件添加到 JAR 文件包中,它跟一般文件無異。10 jar uvf test.jar manifest.mf與 9 結果相同,同時有詳細信息顯示,如:增加:manif
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論