package&import

 


 

一、包

1、作用:

         對類文件進行分類管理;

         給類提供多層命名空間;

         也爲了避免類重名;

2、包的定義:

         package,要放在源文件的第一條語句;

         包名所有的字母都小寫;

         注意:有包名後,編譯運行時要把包名帶上;類的全名是必須要帶包的;否則就是錯誤的類名;如果不帶報名,編譯時不會出錯,但是運行時會拋出錯誤NoClassDefFoundError,即錯誤的類名;

         包的目錄和文件夾目錄是一樣的;

         編譯運行格式:包名.文件名.java

        

         如果沒有包,在編譯時加一些參數可以自動生成包文件;

         javac–d 指定包的目錄,或者新建目錄;如javac –d c:\......

         javac  –d  源文件名,不帶包,它就會自動把包生成出來;

         點表示當前目錄裏,在創建包時,可以簡寫

         編譯時,或者指定classpath時,只需指向包的父目錄即可;

         當制定包文件後,運行後就無法運行,因爲類文件不在當前目錄;所以就需要指定classpath路徑(包的父目錄),即可。

 

1、源文件中帶上包後,類名就必須要把包加上,否則時錯誤的類名,會報錯NoClassDefFoundError不是例外;(正確的類名格式是:父包與子包之間用點號分隔)

2、編譯時,必須要指定到源文件,在當前目錄編譯或者通過斜槓指定都可;(所有的地方都用斜槓分開,到最後源文件也是,特別發現在指定目錄時,斜槓和反斜槓沒有區別),

D:\>javac  e:/equip/practice/package_import.java

E:\>javac  e:/equip/practice/package_import.java

至於現在在什麼目錄不重要,只需要保證源文件名稱和指定地址正確即可;

3、運行時,只能在帶包的類名的父目錄下進行,其他地方找不到文件,如果沒包,就默認當前目錄;如果在別的地方,可以通過設置classpath也可以;(注意類名的正確性)

編譯時,設不設classpath沒有任何影響,那是對類文件而言的;

(記住,運行只有兩種途徑,要麼在當前目錄,要麼在classpath指定的目錄;別無他法;)

4、通過命令行javac  -d命令創建目錄,只需要指定源文件的目錄位置即可按照源文件的包目錄創建目錄;

E:\ >javac -d  d:\ e:/equip/practice/package_import.java

D:\>javac –d  d:\ e:/equip/practice/package_import.java

或者在當前目錄下直接創建也可以,就不需要指定前面的包目錄了

 

3、不同包之間的類,該如何進行訪問呢?

        

         在源文件中加了包之後,範圍變大,一個包中的類要被訪問,就必須要有足夠大的權限,所以被訪問的類要被public修飾;

         類公有後,被訪問的成員也要公有,纔可以被訪問;

         即不同包的文件,默認的權限時不夠的;默認權限只限同包;

         包也是一個封裝形式,如果一個包中有十個文件,只有一個公有,其他九個文件,其他的包也訪問不了,只設置一個公有包提供訪問;

         不同包之間的文件要進行繼承時要注意,繼承的類要帶上包名,或者構建對象等都要帶上包名;也就是不同的包之間的文件,只要時公有的,都是可以訪問的,構建實例等都可行;

 

總結:包與包之間進行訪問,被訪問的保重的類以及類中的成員,需要public修飾;

           不同包中的子類,還可以直接訪問父類中,被protected權限修飾的成員;

 

 

權限問題:

包與包之間可以使用的權限:public  protected;

                       public                 protected                            default               private

同一個類中              ok                               ok                          ok                              ok

同一個包中              ok             ok            ok

子類             ok             ok

不同包中         ok

注意:在繼承的覆蓋中,子類的活動權限一定要大於等於父類的活動權限才行;因爲要保證父類調用的屬性,子類能調用到才行,否則無法覆蓋;

 

一個源文件裏面,不可以出現兩個以上的公有類或者公有接口,因爲要和源文件名字相同;

 

二、import

爲了簡化帶包名的類名的書寫,就使用import關鍵字導入包中的類文件;再寫類名的時候就不需要再帶包名寫類了;

格式:import  aa.bb.cc.dd.Demo;導入指定的類文件;(都用點作爲分隔符;)

或者使用一個通配符*;導入該包中的所有的類文件;

格式:import  aa.bb.cc.dd.*;只表示導入該包中的類,不包括子包中的類文件;

建議:

一般情況下,不要寫通配符*,需要用到包中的哪個類,直接就導入哪個類即可;因爲只用一個類,而把所有的類都導入了,比較佔用內存空間,不高效;

注意:當導入不同類出現重名時,這個類必須要加包名;

 

建議定義包名不要重複,可以使用url來完成定義;因爲url時唯一的;

一個程序裏面可以不寫import的,可以按照全名類書寫,寫import只爲簡化書寫;

 

 

 

 

        

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章