亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java 的 Class Path 和 Package(1)

2019-11-18 14:18:45
字體:
來源:轉載
供稿:網友

  一, 類路徑 (class path)

當你滿懷著希望安裝好了 java, 然后興沖沖地寫了個 hello world,然后編譯, 運行, 就等著那兩個美好的單詞出現在眼前, 可是不幸的是, 只看到了 Can′t find class HelloWorld 或者 Exception in thread "main" java.lang.NoSUChMethodError: main.
為什么呢? 編譯好的 class 明明在呀. 我們一起來看一看 java 程序的運行過程. 我們已經知道 java 是通過 java 虛擬機來解釋運行的, 也就是通過 java 命令, javac 編譯生成的 .class 文件就是虛擬機要執行的代碼, 稱之為字節碼(bytecode), 虛擬機通過 classloader 來裝載這些字節碼, 也就是通常意義上的類. 這里就有一個問題, classloader 從 哪里知道 java 本身的類庫及用戶自己的類在什么地方呢? 或者有著缺省值(當前路徑). 或者要有一個用戶指定的變量來表明, 這個變量就是類路徑(classpath), 或者在運行 的時候傳參數給虛擬機. 這也就是指明 classpath 的三個方法. 編譯的過程和運行的過程大同小異, 只是一個是找出來編譯, 另一個是找出來裝載. 實際上 java 虛擬機是由 java luncher 初始化的, 也就是 java (或 java.exe) 這個程序來做的. 虛擬機按以下順序搜索并裝載所有需要的類:
1, 引導類: 組成 java 平臺的類, 包含 rt.jar 和 i18n.jar 中的類.
2, 擴展類: 使用 java 擴展機制的類, 都是位于擴展目錄($JAVA_HOME/jre/lib/ext) 中的 .jar 檔案包.
3, 用戶類: 開發者定義的類或者沒有使用 java 擴展機制的第三方產品. 你必須在命令行中使用 -classpath 選項或者使用 CLASSPATH 環境變量來確定這些類的位置. 我們在上面所說的用戶自己的類就是特指這些類.
這樣, 一般來說, 用戶只需指定用戶類的位置, 引導類和擴展類是"自動"尋找的.那么到底該怎么做呢? 用戶類路徑就是一些包含類文件的目錄, .jar, .zip 文件的列表, 至于類具體怎么找, 因為牽扯到 package 的問題, 下面將會說到, 暫時可認為只要包含了這個類就算找到了這個類. 根據平臺的不同分隔符略有不同, 類 unix 的系統基本上都是 ":", windows 多是 ";". 其可能的來源是:

* ".", 即當前目錄, 這個是缺省值.
* CLASSPATH 環境變量, 一旦設置, 將缺省值覆蓋.
* 命令行參數 -cp 或者 -classpath, 一旦指定, 將上兩者覆蓋.
* 由 -jar 參數指定的 .jar 檔案包, 就把所有其他的值覆蓋, 所有的類都來自這個指定的檔案包中. 由于生成可執行的 .jar 文件, 還需要其他一些知識, 比如 package, 還有特定的配置文件, 本文的最后會提到. 可先看看 jdk 自帶的一些例子.

我們舉個 HelloWorld 的例子來說明. 先做以下假設:
* 當前目錄是 /HelloWorld (或 c:HelloWorld, 以后都使用前一個)
* jdk 版本為 1.2.2 (linux 下的)
* PATH 環境變量設置正確. (這樣可以在任何目錄下都可以使用工具)
* 文件是 HelloWorld.java, 內容是:

public class HelloWorld
{
public static void main(String[] args)
{
System.out.System.exit(0);
}
}

首先這個文件一定要寫對, 假如對 c 熟悉的話, 很有可能寫成這樣:

public static void main(int argc, String[] argv)
{
....
}

這樣是不對的, 不信可以試一試. 由于手頭沒有 java 的規范, 所以作如下猜想: java 的
application 程序, 必須以 public static void main(String[]) 開始, 其他不一樣的都不行.

到現在為止, 我們設置方面只設置了 PATH.

1, 當前路徑就是指你的 .class 文件在當前目錄下,

[HelloWorld]$ javac HelloWorld.java //這一步不會有多大問題,
[HelloWorld]$ java HelloWorld // 這一步可能就會有問題.

假如出了象開頭那樣的問題, 首先確定不是由于敲錯命令而出錯. 假如沒有敲錯命令, 那么接著做:

[HelloWorld]$ echo $CLASSPATH
或者
c:HelloWorld>echo %CLASSPATH%

看看 CLASSPATH 環境變量是否設置了, 假如設置了, 那么用以下命令:

[HelloWorld]$ CLASSPATH=
或者
c:HelloWorld> set CLASSPATH=

來使它為空, 然后重新運行. 這次用戶類路徑缺省的是 ".", 所以應該不會有相同的問題了. 還有一個方法就是把 "." 加入到 CLASSPATH 中.

[/]$ CLASSPATH=$CLASSPATH:.
或者
c:HelloWorld> set CLASSPATH=%CLASSPATH%;.

同樣也可以成功. Good Luck.

2, 當你的程序需要第三方的類庫支持, 而且比較常用, 就可以采用此種方法.比如常用的數據庫驅動程序, 寫 servlet 需要的 servlet 包等等. 設置方法就是在環境變量中加入 CLASSPATH. 然后就可以直接編譯運行了. 還是以 HelloWorld 為例, 比如你想在根目錄中運行它, 那么你直接在根目錄下執行

$ java HelloWorld
或者
c:>java HelloWorld

這樣肯定會出錯, 假如你的 CLASSPATH 沒有改動的話. 我想大家應該知道為什么錯了吧, 那么怎么改呢? 前面說過, 用戶類路徑就是一些包含你所需要的類的目錄, .jar 檔案包, .zip 包. 現在沒有生成包, 所以只好把 HelloWorld.class 所在的目錄加到 CLASSPATH 了, 根據前面的做法, 再運行一次, 看看, 呵呵, 成功了, 換個路徑, 又成功了!! 不僅僅可以直接運行其中的類, 當你要 import 其中的某些類時, 同樣處理.不知道你想到沒有, 隨著你的系統的不斷的擴充, (當然了, 都是一些需要 java 的東西) 假如都加到這個環境變量里, 那這個變量會越來越臃腫, 雖然環境變量空間可以開很大, 總覺得有些不舒適. 看看下面一個方法.

3, 在命令行參數中指明 classpath.

還是和上面相同的目標, 在任何目錄下執行 HelloWorld, 用這個方法怎么實現呢?

[/]$ java -cp /HelloWorld HelloWorld
或者
c:>java -cp c:HelloWorld HelloWorld

就可以了. 這是這種方法的最簡單的應用了. 當你使用了另外的包的時候, 還可以采用這種方法. 例如:

$ javac -classpath aPath/aPackage.jar:. myJava.java
$ java -cp aPath/aPackage.jar:. myJava
或者
c:> javac -classpath aPathaPackage.jar;. myJava.java
c:> java -cp aPathaPackage.jar;. myJava

這種方法也有一個不方便的的地方就是當第三方包所在的路徑較長或者需要兩個以上包的時候, 每次編譯運行都要寫很長, 非常不方便, 這時候可以寫腳本來解決. 比如一個例子:

compile (文件, 權限改為可執行, 當前目錄)

$ cat compile
---------------------------
#!/bin/bash

javac -classpath aPathaPackage.jar:anotherPathanotherPackage.jar:. myJava.java
---------------------------

run (文件, 權限改為可執行, 當前目錄)

$cat run
---------------------------
#!/bin/bash

java -cp aPathaPackage.jar:anotherPathanotherPackage.jar:. myJava
---------------------------

或者:

compile.bat

c:HelloWorld> type compile.bat
-------------------------
javac -classpath aPathaPackage.jar:anotherPathanotherPackage.jar:. myJava.java
-------------------------

run.bat

c:HelloWorld> type run.bat
------------------------
java -cp aPathaPackage.jar:anotherPathanotherPackage.jar:. myJava
------------------------
就可以了. 試試看.
前面提到了擴展類, 擴展類是什么呢? java 的擴展類就是應用程序開發者用來擴展核心平臺功能的 java 類的包(或者是 native code). 虛擬機能像使用系統類一樣使用這些擴展類. 有人建議可以把包放入擴展目錄里, 這樣, CLASSPATH 也不用設了, 也不用指定了, 豈不是很方便? 確實可以正確運行, 但是個人認為這樣不好, 不能什么東西都往里擱, 一些標準的擴展包可以, 比如, JavaServlet, Java3D 等等. 可以提個建議, 加一個環境變量, 比如叫 JARPATH, 指定一個目錄, 專門存放用戶的 jar zip 等包, 這個要等 SUN 公司來做了.


windows98 下, 我原來安裝的時候, 一直裝不上, 總是死機, 好不輕易裝上了, 缺省的是不能運行正確的, 然后把 tool.jar 放入 CLASSPATH 后工作正常. 現在作測試,去掉仍然是正確的. 經過多次測試, 發現假如原來曾裝過 jdk 的都很好, 沒有裝過的裝的時候會死機, 多裝幾次就可以了. 假如你發現正確安裝后, 不能正常工作, 就把tools.jar 加入 CLASSPATH, 試一下.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线精品视频视频中文字幕| 国产精品99免视看9| 国产精品成人播放| 欧美中文在线观看国产| 欧美性受xxxx黑人猛交| 麻豆乱码国产一区二区三区| 精品久久久视频| 欧美极品在线视频| 国产精品久久久久久久电影| 狠狠色噜噜狠狠狠狠97| 色伦专区97中文字幕| 色噜噜狠狠色综合网图区| 色综合伊人色综合网站| 欧美日本高清一区| 亚洲一区二区精品| 一区二区在线视频播放| 久热国产精品视频| 不卡伊人av在线播放| 91夜夜揉人人捏人人添红杏| 日韩经典一区二区三区| 国产美女久久久| 久久精品视频在线观看| 精品视频在线播放免| 亚洲美女视频网站| 国产亚洲欧美日韩美女| 中文字幕少妇一区二区三区| 亚洲成人三级在线| 国产欧美va欧美va香蕉在| 国产精品黄视频| 亚洲国产高清福利视频| www.久久撸.com| 国产黑人绿帽在线第一区| 欧美视频在线观看免费网址| 国产精品男女猛烈高潮激情| 国产免费一区视频观看免费| 国产精品九九久久久久久久| 91在线免费视频| 亚洲直播在线一区| 久久91亚洲精品中文字幕| 久久中文字幕视频| 在线看片第一页欧美| 69av成年福利视频| 国产91色在线|免| 欧美性20hd另类| 播播国产欧美激情| 国产精品电影观看| 国产欧美日韩免费| 69影院欧美专区视频| 日本精品va在线观看| 日韩高清电影免费观看完整版| 日韩av中文字幕在线免费观看| 久久人人爽人人爽人人片av高清| 成人精品一区二区三区电影黑人| 一区二区三区久久精品| 精品久久久久人成| 国产午夜精品全部视频播放| 精品人伦一区二区三区蜜桃网站| 欧美精品一区在线播放| 久久国产精品久久国产精品| 精品日本高清在线播放| 国产精品一二三视频| 久久精品中文字幕电影| 亚洲一区二区久久久久久| 久久精品视频亚洲| 疯狂蹂躏欧美一区二区精品| 91香蕉嫩草神马影院在线观看| 97视频在线免费观看| 亚洲女人天堂成人av在线| 日韩视频免费大全中文字幕| 欧美多人爱爱视频网站| 亚洲夜晚福利在线观看| 中文字幕无线精品亚洲乱码一区| 久久久久中文字幕| 中文字幕亚洲综合久久筱田步美| 97视频免费在线观看| 亚洲男人天堂网站| 日韩欧美精品网站| 萌白酱国产一区二区| 136fldh精品导航福利| 欧美疯狂性受xxxxx另类| 日韩精品欧美国产精品忘忧草| 国产一区二区三区在线免费观看| 久久香蕉国产线看观看av| 国产成人高潮免费观看精品| 免费91在线视频| 国产69久久精品成人| 精品久久久在线观看| 国产精品福利观看| 日韩精品在线观| 欧美xxxx做受欧美.88| 成人精品视频在线| 日韩视频在线免费观看| 亚洲国产成人精品久久久国产成人一区| 国产精品入口福利| 亚洲国产成人精品久久| 色偷偷91综合久久噜噜| 日本亚洲欧洲色α| 中文字幕日韩在线播放| 欧美激情中文字幕乱码免费| 欧美成人在线免费视频| 久久久久国产精品免费| 成人黄色在线免费| 尤物yw午夜国产精品视频| 亚洲三级av在线| 欧美激情综合色综合啪啪五月| 亚洲国产精品久久久久秋霞不卡| 国产成人欧美在线观看| 亚洲人成77777在线观看网| 亚洲国产精品大全| 久久久久免费视频| 成人xxxxx| 黑人极品videos精品欧美裸| 欧美一区二区三区免费观看| 久久亚洲精品一区| 亚洲午夜小视频| 精品偷拍各种wc美女嘘嘘| 国产精品美女久久久久av超清| 一区三区二区视频| 国模精品视频一区二区| 欧美富婆性猛交| 久久久久成人网| 91精品久久久久久久久中文字幕| 久久天堂av综合合色| 亚洲欧美福利视频| 国产精品777| 国产精品爽爽爽爽爽爽在线观看| 国产精品久久久久久网站| 国内精品400部情侣激情| 欧美在线影院在线视频| 91免费国产网站| 色综合91久久精品中文字幕| 孩xxxx性bbbb欧美| 日本国产高清不卡| 亚洲一区二区三区视频| 欧美一级免费视频| 91麻豆桃色免费看| 欧美成人在线免费视频| 色综久久综合桃花网| 91禁外国网站| 欧美日韩成人网| 欧美专区在线播放| 久久免费视频在线| 91精品久久久久久久久久| 国产精品福利久久久| 国产精品久久久久久久美男| 亚洲欧美精品中文字幕在线| 欧美亚洲视频一区二区| 丁香五六月婷婷久久激情| 亚洲网站在线观看| 亚洲午夜未删减在线观看| 日韩国产高清视频在线| 69国产精品成人在线播放| 精品成人69xx.xyz| 国产精品成人免费视频| 成人免费网站在线观看| 秋霞成人午夜鲁丝一区二区三区| 久久精品视频播放| 中文字幕欧美亚洲| 久久久av电影| 亚洲性日韩精品一区二区| 九九热这里只有精品免费看| 精品亚洲国产视频| 日本精品免费观看| 日韩人体视频一二区|