不使用編譯器建立獨一無二的包名

      在現在公司使用JAVA有幾個月了,不過今天又重新開始看Thinking in Java 3th Edition這本經典了。因爲有目標,所以看書也比較快,很快我也發現一個自己一直沒有注意到的問題。就是如何在本機上不使用IDE建立自己的包並使用。今天把這個問題解決了。下面給大家介紹下怎麼樣實現。
一、CLASSPATH的設置
      這個實驗裏CLASSPATH的設置至關重要,設置好CLASSPATH等於實驗完成一大半。不過,你知道什麼是CLASSPATH嗎?我看了好多網上很多資料,但是都沒有很好的答案。我就在這給大家複習下吧。CLASSPATH是類路徑。如果只是一般運用JAVA,只是用到JAVA的基本庫文件,練練手而已,則不需要設置CLASSPATH。但是在一般開發中,這是不可能的,所以我們要自己設置CLASSPATH。這裏就又牽扯到JAVA程序運行過程中JVM虛擬機的小知識了。
      我們已經知道JAVA是通過 java虛擬機來解釋運行的,也就是通過JAVA命令,JAVAC編譯生成的.class文件就是虛擬機要執行的代碼,稱之爲字節碼(bytecode),虛擬機通過 classloader來裝載這些字節碼,也就是通常意義上的類。這裏就有一個問題,classloader 從哪裏知道JAVA本身的類庫及用戶自己的類在什麼地方呢?或者有着缺省值(當前路徑),或者要有一個用戶指定的變量來表明,這個變量就是類路徑(classpath),或者在運行的時候傳參數給虛擬機。這也就是指明 classpath 的三個方法。編譯的過程和運行的過程大同小異,只是一個是找出來編譯,另一個是找出來裝載。實際上 java 虛擬機是由 java luncher 初始化的,也就是 java (或 java.exe)這個程序來做的。虛擬機按以下順序搜索並裝載所有需要的類:
1、引導類:組成JAVA平臺的類, 包含 rt.jar和tool.jar 中的類。
2、擴展類:使用JAVA擴展機制的類, 都是位於擴展目錄($JAVA_HOME/jre/lib/ext)
中的 .jar 檔案包。
3、用戶類:開發者定義的類或者沒有使用 java 擴展機制的第三方產品. 你必須在
命令行中使用 -CLASSPATH選項或者使用 CLASSPATH 環境變量來確定這些類的位置。
      一般來說,用戶只需指定用戶類的位置,引導類和擴展類是"自動"尋找的。一般來說,用戶只需指定用戶類的位置,引導類和擴展類是"自動"尋找的。我們關心的就是到底該怎麼去指定用戶類的位置?用戶類路徑就是一些包含類文件的目錄,比如.jar、.zip 文件的列表, 至於類具體怎麼找,因爲牽扯到 package 的問題。我們一般的CLASSPATH設置是“.”,他是指當前目錄,這個是缺省值。
      我們這裏不管那些.jar什麼的,我們計劃自己的類放在D:\test這個文件夾下。所以,我們的CLASSPATH就設置爲D:\test,就是讓他去加載D:\test下的所有類,這個就是我們的用戶類了。給大家看看我的CLASSPATH:
clip_p_w_picpath002[1]
       大家看紅線的部分,這是我們這節的重點。你在控制檯輸入set classpath,如果有D:\test那麼我們就達到目的了。我們可以繼續往下體驗這個實驗了。
二、建立獨一無二的包和用戶類
       在D:\test下我們建立文件結果如圖:
clip_p_w_picpath003[1]
在net文件夾裏我們建立一個MultiDimArray.java文件,源碼如下:
package com.si.net;
import java.util.*;
public class MultiDimArray{
static Random random = new Random();
public static void main(String args[]){
int[][] a1 = {
{1,2,3},
{4,5,6}
};
for(int i = 0; i < a1.length; i++)
for(int j = 0; j < a1[i].length; j++)
System.out.println(
"a1[" + i + "][" + j + "] = " + a1[i][j]);
int[][][] a2 = new int[2][3][4];
for(int i = 0; i < a2.length; i++)
for(int j = 0; j< a2[i].length; j++)
for(int k = 0; k < a2[i][j].length; k++)
System.out.println(
"a2[" + i + "][" + j + "][" + k + "] = " + a2[i][j][k]);
}
}
       源碼中“package com.si.net;”是需要注意的部分,這不正好和我們的文件層次結構相同嗎?對了,這就是和我們用IDE在指定包下建立類同樣的原理,文件結構也相同。好了,CLASSPATH設置好了,JAVA代碼也寫好,進入這個實驗的最後階段。
三、完成實驗
       打開控制檯,如下輸入:
clip_p_w_picpath004[1]
       其他一切和平時我們使用默認包同樣的原理,不同的地方時,最後一行:使用默認包時,我們不需要寫具體的路徑(如該例中的:com/si/net/)直接寫java MultiDimArray就可以了。因爲我們再CLASSPATH中指定了用戶類的路徑D:\test,所以要找到MultiDimArray.class就必須寫出完成的路徑。
結題:完成實驗了,歡迎各位朋友一起學習、交流。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章