<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## Java編程那些事兒72——包的概念 陳躍峰 出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb) ? ### 8.11 包的概念 隨著項目復雜度的增加,一個項目中需要實現的類和接口的數量也將快速增長,為了方便對于代碼的管理和閱讀,需要將這些類和接口按照一定的規則進行分類,這就是程序設計中命名空間(name space)概念出現的原因。 在Java語言中,為了對同一個項目中的多個類和接口進行分類和管理,專門設計了包(Package)的概念,使用包管理和類和接口。 其實出現包的概念最開始的原因是避免類名重復,現在這個作用也得到了廣泛的應用。例如各個公司會為同一個功能實現一套類,這些類名之間大量的存在重復,使用包的概念就可以很方便的解決類名重復的問題。 那么包到底是什么呢?其實包是一個邏輯的概念,就是給類名加了一個前綴,就像北京路這個路名上海和南京都有,再說這個路名時,就可以使用南京市北京路和上海市北京路進行區分,這里的北京路就相當于類,而前面的前綴,如南京市或上海市,就相當于包名。 在物理上包被轉換成一個文件夾,操作系統通過文件夾來管理各個類和接口,從而實現對類的分類,或者稱之為按照類的功能對這些類進行封裝。 下面介紹一下和包有關的兩個語法:打包和引入包。 #### 8.11.1 打包 打包的作用就是將聲明的類放入包中,也就是為類指定包名。在實際的項目中,一般根據類的功能來設定包,例如設置界面類包,邏輯類包,網絡類包等結構。 打包的語法格式為: package包名1[.包名2[.包名3……]]; 在該語法中,包名可以設置多個,包名和包名之間使用“.”進行分割,包名的個數沒有限制。其中前面的包名包含后面的包名。按照Java語言的編碼規范,包名所有字母都小寫,由于包名將轉換為文件夾的名稱,所以包名中不能包含特殊字符。 例如: ?????????????????? packagetest; ?????????????????? packagedemo.chapter8; ?????????????????? packagegame.bubble.ui; 在示例中的最后一個,package game.bubble.ui,該包名將轉換為路徑/game/bubble/ui,也就是前面的包名是后面包名的父目錄。 需要特別注意的是: 1、打包的語句必須是程序代碼中的第一行可執行代碼,也就是說打包語句的上面只能包含空行或注釋。 2、打包的語句最多只有一句。 如果在代碼中沒有書寫package語句,則該類將被打入到默認包中,默認包無法被其它的包引用。 示例代碼: ~~~ ?????????????????? //文件名:PackageClass.java ?????????????????? packagechapter8; ?????????????????? publicclass PackageClass{ ??????????????????????????? //類內部的代碼 ?????????????????? } ~~~ 通過打包語法,可以為每個類增加一個前綴,也就是說以前使用類,使用類名即可,有了包名的概念以后,類的全名就是包名.類名了,通過在類名前面加入包名,可以使不同包中存在系統的類名,但是一般不建議一個項目中的類名存在重復。 當一個類有了包名以后,在編譯和運行時將和前面的操作產生一些變化,下面介紹一下JDK和Eclipse中相關操作的變化。 a)JDK編譯和運行打包的源文件 編譯源代碼的命令:javac –d 類文件路徑源代碼名稱 例如:javac? –d? d:/?PackageClass.java 該命令的作用是將PackageClass類編譯成class,并將生成的class文件存儲到d盤根目錄下。則class文件的存儲路徑是:d:/chapter8/PackageClass.class。使用該命令編譯時自動將包名轉換為文件夾。 如果想將編譯生成的class文件生成在源代碼所在的目錄,則可以使用如下格式:javac–d . 源文件名 這里的源文件沒可以使用*.java代表當前目錄下的所有源文件。 說明:執行javac命令必須將目錄切換到源代碼所在的目錄。 運行類文件的格式: java 包名.類名 例如:java? chapter8.PackageClass 該命令的作用是運行該類,按照上面的編譯命令,運行該程序時,不應該切換到class文件所在的目錄,而是切換到最頂層的包名所在的目錄,所以執行以上命令時,在控制臺下面只需要切換到d盤根目錄即可。 b)eclipe編譯和運行打包的源代碼 在新建源代碼時,可以在新建類向導中,可以在package欄中添加包名,在eclipse編譯時會自動生成包名的結構。 運行帶包名的代碼也和以前的運行步驟一樣。 需要特別注意的是:在eclipse中,源代碼的組織也要求將包名轉換為文件夾,否則將出現語法錯誤,這點在復制代碼到eclipse項目中時需要特別小心。 #### 8.11.2 引入包 當類進行了打包操作以后,同一個包內部的類默認引入,當需要使用其它包中的類時,則必須首先引入對應的類,然后才可以使用該類。 引入包的語法格式為: import包名1.[.包名2[.包名3……]].類名|*; 在該語法中,import關鍵字后面是包名,包名和包名之間使用“.”分割,最后為類名或“*”,如果書寫類名則代表只引入該類,如果書寫星號則代表引入該包中的所有類、接口、異常和錯誤等。 例如: ?????????????????? importchapter8.*; ?????????????????? importjava.io.*; ?????????????????? importchapter8. PackageClass; 引入包的代碼書寫在類聲明語句的上面,打包語句的下面,import語句在一個代碼中可以書寫任意多句,例如: ~~~ ?????????????????? packagechapter8; ?????????????????? importjava.io.*; ?????????????????? importjava.net.*; ?????????????????? publicclass Test{ ??????????????????????????? //其它代碼 ?????????????????? } ~~~ 說明:這里的java.io包和java.net包都是JDK中提供的包名。 每引入一個類或接口,將在內存中占有幾十個字節的空間,所以使用星號引入一個包中所有的類或接口雖然編寫起來比較簡單,但是卻浪費了一些內存,而一個一個的引入類名編寫起來又比較麻煩。 小提示:使用eclipse中的source菜單下的Orgnize Imports可以將星號的引用轉換為對類名的引用。 最后需要特別注意的是,import只引入當前包下面的類,而不引入該包下面的子包里面的類。例如: ~~~ ???????? ???????? //文件名:A.java ?????????????????? packagea; ?????????????????? publicclass A{} ? ?????????????????? //文件名:B.java ?????????????????? packagea.b; ?????????????????? publicclass B{} ? ?????????????????? //文件名:Test.java ?????????????????? importa.*; ?????????????????? publicclass Test{ ??????????????????????????? publicstatic void main(String[] args){ ???????????????????????????????????? Bb = new B();?? //語法錯誤,B類未引入 ??????????????????????????? } ?????????????????? } ~~~ 說明:在該示例的Test類中,使用import a.*;引入了包a中的所有類,也就是類A,而包a的子包a.b中的類將不會被引入,所以在Test類中使用B類將出現語法錯誤。 #### 8.11.3 包的概念小結 總之,包的概念(也就是命名空間)使得類名沖突的問題獲得良好的解決,另外也可以使用包來分類管理一個項目中的多個類,使得項目中的類數量比較多時,結構顯得比較清晰。 到現在為止,綜合以前學習的所有語法知識,規范的類結構的代碼如下: ~~~ ?????????????????? /* ?????????????????? ?*? 版權信息 ?????????????????? ?*/ ?????????????????? 打包語句 ?????????????????? 引入語句 ?????????????????? /** ?????????????????? ?* 類注釋 ?????????????????? ?*/ ?????????????????? 類聲明 ~~~ JDK中的源代碼代碼(位置在JDK安裝目錄下的src.zip中)均以這樣的格式組織類,這也是規范編寫類結構代碼的基礎。 ### 8.12 總結 面向對象(OO)是一種思想,該思想通過改變數據和功能的組織方式,從而徹底改變了整個項目中代碼的結構,也使得每個類的功能單純,從而極大的降低了項目的復雜度,使得項目開發更方便的進行模塊化,從而可以為開發更復雜的項目提供了機會。 本章雖然使用了不少的篇幅來介紹面向對象的知識,但是這些還只是一些基礎,更多的知識需要在實際的編程實踐中去進行體會。 當掌握了本章的知識以后,就可以比較輕松的去閱讀更專業的面向對象知識的書籍,比如面向對象理論以及設計模式相關的書籍,從而提高對于面向對象的認識。 面向對象的知識就介紹這么多,將在下一章中介紹JDK中類文檔的使用,并結合文檔的使用介紹如何使用JDK中提供的類,從而進入Java開發技術的學習。
                  <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>

                              哎呀哎呀视频在线观看