java包 和 物理目錄 解惑(轉載)

來源:互聯網
上載者:User

標籤:

原文:http://www.cnblogs.com/moveofgod/p/3809653.html

今天做 JUnit 實驗, 發現在物理實際不同的目錄(src, testsrc)下可以使用相同的包名, 並且在這兩個目錄下, 都有個子目錄 coolUnit (這個子目錄是配合 package 使用的) 問題:

1. 那麼包名和實際實體路徑有什麼關係?

答: 包名必須出現在實際路徑中的一部分, 只是一段, 不可能是絕對路徑. 而這個段的起點, 就是包含了classpath目錄的一個.

可以看到如下代碼, 是eclipse 自動產生的 .classpath檔案, 其中classpath就包含了testsrc, src, 而這兩個目錄下都有個子目錄 coolUnit, 這個就是包名的開始.

<?xml version="1.0" encoding="UTF-8"?><classpath>    <classpathentry kind="src" path="src"/>    <classpathentry kind="src" path="testsrc"/>    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>    <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>    <classpathentry kind="output" path="bin"/></classpath>

2. 相同包名 如果可以儲存在不同實體路徑下, java 編譯器如何找到對應的類 ?

答: 當然可以儲存在不同的實體路徑下, 只不過這兩個路徑中, 有一部分必須相同, 即包名包括的部分. 置於java編譯器如何找到, 簡單, 就是把從包名的起點的上層目錄添加到classpath中了, 這樣就可以找到對應了類了. 類似上邊的testsrc, src, 這兩個目錄都被添加進了classpath(當然這個工作是eclipse替我們完成的, 如果是我們自己編譯, 不藉助eclipse, 就需要指定 javac –classpath 把這兩個目錄加進去)

3. 這裡肯定跟classpath 有關, 不可能你隨便寫個java類, java 編譯器都能找到, 那麼如何引入自己寫的類呢?

如何引用自己的類的, 就是將自己的類的包名的起點的上層目錄作為 javac –classpath參數傳入, 這樣的目的是讓java編譯器找到你的類所在的位置.

綜上: 包名是抽象出來的類的空間, 雖然在物理上儲存需要檔案夾配合層次, 但是關鍵, 這個層次不是絕對路徑, 只是路徑中的一部分, 所以, 我們完全可以將代碼放在不同路徑下, 只要路徑中對應包名的部分相同就可以了.

為了更好地組織類,Java提供了包機制。包是類的容器,用於分隔類名空間。如果沒有指定包名,所有的樣本都屬於一個預設的無名包.

Java中的包一般均包含相關的類,例如,所有關於交通工具的類都可以放到名為Transportation的包中.

包語句格式:

package pkg1[.pkg2[.pkg3…]];

程式中如果有package語句,該語句一定是源檔案中的第一條可執行語句,它的前面只能有注釋或空行。另外,一個檔案中最多隻能有一條package語句.

包的名字有層次關係,各層之間以點分隔。包層次必須與Java開發系統的檔案系統結構相同(並非絕對路徑)。通常包名中全部用小寫字母,這與類名以大寫字母開頭,且各字的首字母亦大寫的命名規範有所不同。

當使用包說明時,程式中無需再引用(import)同一個包或該包的任何元素。import語句只用來將其他包中的類引入當前名字空間中。而當前包總是處於當前名字空間中.

如果檔案聲明如下:

package java.awt.image

則此檔案必須存放在Windows的java\awt\image目錄下或unix的java/awt/image目錄下。

問題出現了: 因為路徑不可能是絕對的, 即從根目錄開始一直向下, 所以目錄的開始位置, 只需要是classpath包含的位置就可以了.

這才是問題解決的關鍵. 從這點說, 包名是抽象的

java包 和 物理目錄 解惑(轉載)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.