<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### [創建獨一無二的包名](https://lingcoder.gitee.io/onjava8/#/book/07-Implementation-Hiding?id=%e5%88%9b%e5%bb%ba%e7%8b%ac%e4%b8%80%e6%97%a0%e4%ba%8c%e7%9a%84%e5%8c%85%e5%90%8d) 你可能注意到,一個包從未真正被打包成單一的文件,它可以由很多**.class**文件構成,因而事情就變得有點復雜了。為了避免這種情況,一種合乎邏輯的做法是將特定包下的所有**.class**文件都放在一個目錄下。也就是說,利用操作系統的文件結構的層次性。這是 Java 解決混亂問題的一種方式;稍后你還會在我們介紹**jar**工具時看到另一種方式。 將所有的文件放在一個子目錄還解決了其他的兩個問題:創建獨一無二的包名和查找可能隱藏于目錄結構某處的類。這是通過將**.class**文件所在的路徑位置編碼成**package**名稱來實現的。按照慣例,**package**名稱是類的創建者的反順序的 Internet 域名。如果你遵循慣例,因為 Internet 域名是獨一無二的,所以你的**package**名稱也應該是獨一無二的,不會發生名稱沖突。如果你沒有自己的域名,你就得構造一組不大可能與他人重復的組合(比如你的姓名),來創建獨一無二的 package 名稱。如果你打算發布 Java 程序代碼,那么花些力氣去獲取一個域名是值得的。 此技巧的第二部分是把**package**名稱分解成你機器上的一個目錄,所以當 Java 解釋器必須要加載一個 .class 文件時,它能定位到**.class**文件所在的位置。首先,它找出環境變量**CLASSPATH**(通過操作系統設置,有時也能通過 Java 的安裝程序或基于 Java 的工具設置)。**CLASSPATH**包含一個或多個目錄,用作查找 .**class**文件的根目錄。從根目錄開始,Java 解釋器獲取包名并將每個句點替換成反斜杠,生成一個基于根目錄的路徑名(取決于你的操作系統,包名**foo.bar.baz**變成**foo\\bar\\baz**或**foo/bar/baz**或其它)。然后這個路徑與**CLASSPATH**的不同項連接,解釋器就在這些目錄中查找與你所創建的類名稱相關的**.class**文件(解釋器還會查找某些涉及 Java 解釋器所在位置的標準目錄)。 為了理解這點,比如說我的域名**MindviewInc.com**,將之反轉并全部改為小寫后就是**com.mindviewinc**,這將作為我創建的類的獨一無二的全局名稱。(com、edu、org等擴展名之前在 Java 包中都是大寫,但是 Java 2 之后都統一用小寫。)我決定再創建一個名為**simple**的類庫,從而細分名稱: ~~~ package com.mindviewinc.simple; ~~~ 這個包名可以用作下面兩個文件的命名空間保護傘: ~~~ // com/mindviewinc/simple/Vector.java // Creating a package package com.mindviewinc.simple; public class Vector { public Vector() { System.out.println("com.mindviewinc.simple.Vector"); } } ~~~ 如前所述,**package**語句必須是文件的第一行非注釋代碼。第二個文件看上去差不多: ~~~ // com/mindviewinc/simple/List.java // Creating a package package com.mindviewinc.simple; public class List { System.out.println("com.mindview.simple.List"); } ~~~ 這兩個文件都位于我機器上的子目錄中,如下: ~~~ C:\DOC\Java\com\mindviewinc\simple ~~~ (注意,本書的每個文件的第一行注釋都指明了文件在源代碼目錄樹中的位置——供本書的自動代碼提取工具使用。) 如果你回頭看這個路徑,會看到包名**com.mindviewinc.simple**,但是路徑的第一部分呢?CLASSPATH 環境變量會處理它。我機器上的環境變量部分如下: ~~~ CLASSPATH=.;D:\JAVA\LIB;C:\DOC\Java ~~~ CLASSPATH 可以包含多個不同的搜索路徑。 但是在使用 JAR 文件時,有點不一樣。你必須在類路徑寫清楚 JAR 文件的實際名稱,不能僅僅是 JAR 文件所在的目錄。因此,對于一個名為**grape.jar**的 JAR 文件,類路徑應包括: ~~~ CLASSPATH=.;D\JAVA\LIB;C:\flavors\grape.jar ~~~ 一旦設置好類路徑,下面的文件就可以放在任意目錄: ~~~ // hiding/LibTest.java // Uses the library import com.mindviewinc.simple.*; public class LibTest { public static void main(String[] args) { Vector v = new Vector(); List l = new List(); } } ~~~ 輸出: ~~~ com.mindviewinc.simple.Vector com.mindviewinc.simple.List ~~~ 當編譯器遇到導入**simple**庫的**import**語句時,它首先會在 CLASSPATH 指定的目錄中查找子目錄**com/mindviewinc/simple**,然后從已編譯的文件中找出名稱相符者(對**Vector**而言是**Vector.class**,對**List**而言是**List.class**)。注意,這兩個類和其中要訪問的方法都必須是**public**修飾的。 對于 Java 新手而言,設置 CLASSPATH 是一件麻煩的事(我最初使用時是這么覺得的),后面版本的 JDK 更加智能。你會發現當你安裝好 JDK 時,即使不設置 CLASSPATH,也能夠編譯和運行基本的 Java 程序。但是,為了編譯和運行本書的代碼示例(從[https://github.com/BruceEckel/OnJava8-examples](https://github.com/BruceEckel/OnJava8-examples)取得),你必須將本書程序代碼樹的基本目錄加入到 CLASSPATH 中( gradlew 命令管理自身的 CLASSPATH,所以如果你想直接使用 javac 和 java,不用 Gradle 的話,就需要設置 CLASSPATH)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看