小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

java 編譯路徑以及運(yùn)行路徑

 昵稱11323155 2013-01-14
Java中的類路徑分“編譯后的存放路徑” 和 “運(yùn)行時(shí)的查找路徑”,下面分別談?wù)?br>1. java編譯后的類存放路徑,
分兩種:“源文件被直接編譯”和“源文件被間接編譯”
1-1源文件直接編譯
什么是源文件直接編譯:即通過(guò)javac直接編譯源文件
建立d:\my目錄,在其目錄下新建一個(gè)文件,如下:
Public class HelloWorld{
Public static void main(String[] args){
System.out.println(“HelloWorld”);
}
}
在命令行輸入: javac HelloWorld.java
這時(shí)在d:\my這個(gè)目錄下就產(chǎn)生了一個(gè)類文件HelloWorld.class
在命令行輸入: java HelloWorld
HelloWorld

正常輸出
改變一:
把原文件中的輸出內(nèi)容改為”changeHelloWorld”
重新編譯,運(yùn)行,可以看到在控制臺(tái)輸出了
changeHelloWorld

改變二:
恢復(fù)一的改變,并刪除之前生成的類文件, 在源文件中的頭部加入
Package com.test;

然后在命令行輸入: javac –d . HelloWorld.java
這時(shí)在d:\my這個(gè)目錄下就產(chǎn)生了一個(gè)新的目錄com\test,類文件HelloWorld.class就位于test下
注,如果不指明路徑,則javac只會(huì)把生成的類文件放在默認(rèn)包中,如同沒(méi)包

改變?nèi)?
刪除改變二中所產(chǎn)生的目錄結(jié)構(gòu)與類
然后在命令行輸入: javac –d d:\ HelloWorld.java
這時(shí)在d:\ 這個(gè)根目錄下就產(chǎn)生了一個(gè)新的目錄com\test,類文件HelloWorld.class就位于test下

總結(jié):對(duì)于源文件被直接編譯的,其規(guī)則如下:
1. 每一次執(zhí)行javac命令都會(huì)重新編譯源文件,
2. 編譯后的類文件的存放地址可以指定
3. 源文件帶package結(jié)構(gòu)的,編譯時(shí)系統(tǒng)直接產(chǎn)生類文件存放的目錄結(jié)構(gòu)(針對(duì)package所指定,注意一定要明確指定編譯后的路徑喔)


1-2源文件間接編譯
什么是源文件間接編譯:放在A類中的B類,當(dāng)A.java通過(guò)javac編譯時(shí),B也會(huì)被編譯

建立d:\my1目錄,在其目錄下新建兩個(gè)文件,如下:
A. java
public class A{
public static void main(String[] args){
B b1 = new B();
b1.print();
}
}

B. java
public class B{
public void print(){
System.out.println("package test");
}
}

接著在命令行輸入 javac A.java
這時(shí)在d:\my1這個(gè)目錄下就產(chǎn)生了兩個(gè)類文件A.class與B.class
執(zhí)行java A
Package test

改變一:
刪除以上所產(chǎn)生的類文件,修改兩個(gè)文件的源代碼,分別在頭部加上import edu.nctu.*;和package edu.nctu;即
A. java
import edu.nctu.*;
public class A{
public static void main(String[] args){
B b1 = new B();
b1.print();
}
}

B. java
package edu.nctu;
public class B{
public void print(){
System.out.println("package test");
}
}

在命令行輸入:
Javac A.java
接著會(huì)出現(xiàn)一些錯(cuò)誤提示,主要提示如下:
A. java:1:package edu.nctu does not exist

解決方式:把d:\my1目錄下的B.java移到d:\my1\edu\nctu\下就可以了

注意: 如果d:\my1下仍然存在B.java則還會(huì)報(bào)錯(cuò),因?yàn)榫幾g器總是先到A.java本身所在的路徑中尋找B.java,雖然編譯器找到了B.java,可是對(duì)比其package聲明之后,認(rèn)為它應(yīng)為位于edu\nctu目錄下,不該在此目錄,因此產(chǎn)生錯(cuò)誤信息

結(jié)論,對(duì)于間接被編譯的.java文件,遵從如下規(guī)則
1. 該間接文件沒(méi)有包的,則被直接編譯,生成的類文件存放地址和原文件相同
2. 帶包的間接文件,要想正確編譯,必須明確手動(dòng)建立包目錄結(jié)構(gòu)并且把間接文件置于其內(nèi)
3. 。。。

2. 運(yùn)行時(shí)的查找路徑
java 是通過(guò) java虛擬機(jī)來(lái)解釋運(yùn)行的, 也就是通過(guò) java 命令。 javac 編譯生成的 .class文件就是虛擬機(jī)要執(zhí)行的代碼, 稱之為字節(jié)碼(bytecode), 虛擬機(jī)通過(guò) classloader來(lái)裝載這些字節(jié)碼, 也就是通常意義上的類. 這里就有一個(gè)問(wèn)題, classloader 從哪里知道 java 本身的類庫(kù)及用戶自己的類在什么地方呢? 或者有著缺省值(當(dāng)前路徑).
實(shí)際上 java 虛擬機(jī)是由 java luncher 初始化的, 也就是 java (或 java.exe)這個(gè)程序來(lái)做的. 虛擬機(jī)按以下順序搜索并裝載所有需要的類:
1, 系統(tǒng)類: 組成 java 平臺(tái)的類, 包含 rt.jar等類.
2, 擴(kuò)展類: 使用 java 擴(kuò)展機(jī)制的類, 都是位于擴(kuò)展目錄($JAVA_HOME/jre/lib/ext)?
中的 .jar 檔案包.
3, 用戶類: 開(kāi)發(fā)者定義的類或者沒(méi)有使用 java 擴(kuò)展機(jī)制的第三方產(chǎn)品.
以上的類,程序運(yùn)行時(shí),是如何找到的? 下面做個(gè)說(shuō)明:
當(dāng)我們?cè)诿钚休斎雑ava XXX 的時(shí)候,java.exe的工作就是找到合適的JRE來(lái)執(zhí)行類文件。Java.exe依照如下邏輯來(lái)尋找JRE:
1. 自己的目錄下有沒(méi)有JRE目錄
2. 父目錄下的JRE子目錄
3. 查詢windows Registry(HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment\).
根據(jù)以上的邏輯,java找到JRE,進(jìn)而找到系統(tǒng)類和擴(kuò)展類(因?yàn)樗鼈兌嘉挥贘RE中,且位置固定?),所以“系統(tǒng)類”和“擴(kuò)展類”的類查找問(wèn)題就解決了,下面再談?wù)動(dòng)脩纛惖牟檎遥?br>用戶類路徑就是一些包含類文件的目錄, .jar, .zip 文件的列表,我們要使用它,必須在命令行中使用 -classpath 選項(xiàng)或者使用 CLASSPATH 環(huán)境變量來(lái)確定這些類的位置或則按缺省查找,規(guī)則如下:
* ".", 指當(dāng)前目錄, 是缺省值.
* CLASSPATH 環(huán)境變量, 一旦設(shè)置, 將缺省值覆蓋
* 命令行參數(shù) -cp 或者 -classpath, 一旦指定, 將上兩者覆蓋.
* 由 -jar 參數(shù)指定的 .jar 檔案包, 就把所有其他的值覆蓋, 所有的類都來(lái)自這個(gè)指定的檔案包中. 由于生成可執(zhí)行的 .jar 文件, 還需要其他一些知識(shí), 比如 package等,對(duì)于package,import機(jī)制,下一個(gè)專題再嘗試談?wù)?
以上錯(cuò)漏之處,請(qǐng)大伙提出,先謝過(guò)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多