當使用javac編譯源文件時,如何查找import導入的類


當編寫一個java源代碼文件時,此文件通常被稱為編譯單元(有時也被稱為轉移單元)。每個編譯單元都必須有一個后綴名.java,而在編譯單元內則可以有一個public類,該類的名稱必須與文件名稱一致。每個編譯單元只能有一個public類,否則編譯器就不會接收。如果在該編譯單元之中還有額外的類,那么在包之外無法看見這些類,這是因為它們不是public類,而且它們主要用來為主public類提供支持。

 

java解釋器的運行過程:

 

  1. 找出環境變量CLASSPATHCLASSPATH包含一個或多個目錄,用作查找.class文件的根目錄
  2. 從根目錄開始,解析器獲取包的名稱並將每個句點替換成反斜杠,以從CLASSPATH根中產生一個路徑名稱。以cn.example.simple為例,它會轉換成cn\example\simple
  3. 得到的路徑會與CLASSPATH中的各個不同的項相連接,解析器就在這些目錄中查找與你所要創建的類名稱相關的.class文件

 

例子:

 

使用包名:cn.example.simple在該名稱空間下,新建兩個類:

 

 

package cn.example.simple;

public class Vector{
    public Vector(){
        System.out.println("cn.example.simple.Vector");
    }
}

 

package cn.example.simple;

public class List{
    public List(){
        System.out.println("cn.example.simple.List");
    }
}

將這兩個文件置於目錄:C:\DOC\JavaT中,設置CLASSPATH,如下:

  CLASSPATH=.;C:\DOC\JavaT

 一旦類路徑確立,測試文件就可以放在任何目錄下:

 

 

import cn.example.simple.*;

public class LibTest{
    public static void main(String[] args){
        Vector v = new Vector();
        List l = new List();
    }
}/*output:
cn.example.simple.Vector
cn.example.simple.List
*/

 

分析:

  當編譯器碰到simple類庫的import語句時,就開始在CLASSPATH所指的目錄中查找,查找子目錄cn\example\simple,然后從已編譯的文件中找出名稱相符.class文件。

 

注意:

 

無論何時創建包,都已經在給定的包名稱的時候隱含地指定了目錄結構。這個包必須位於其名稱所指定的目錄之中,而該目錄必須是以CLASSPATH開始的目錄中可以查詢到。

 

編譯過的代碼通常放置與源代碼的不同目錄中,但是必須保證JVM使用CLASSPATH可以找到該路徑。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM