package的用法


1.package定義:

  package是一個為了方便管理組織java文件的目錄結構,並防止不同java文件之間發生命名沖突而存在的一個java特性。不同package中的類的名字可以相同,只是在使用時要帶上  package的名稱加以區分。

2.用法:  在使用package的時候,如果java文件中使用了package,那么該java文件必須放在命名與package名稱相同的目錄下,比如:

1 package test;
2  
3 public class Test {}

 

  又如:

1 package com.micheal.test
2  
3 public class Test {}

  java解釋器會將package中的.解釋為目錄分隔符/,也就是說該文件的目錄結構為:...com/micheal/test/Test.java

  那么package中的類的訪問權限是怎么樣的呢?在同一package中的類是可以互相訪問的,比如:

 

 1 //Test1.java
 2  
 3 package test;
 4  
 5 class Test1 {}
 6  
 7 //Test2.java
 8  
 9 package test;
10  
11 public class Test2 {
12       public static void main(String[] args) {
13             Test1 t;
14       }
15 }

 

  由於Test2與Test1在同一個package——test中,所以Test2能夠直接調用Test1生成Test1的引用變量t;在命令行進行編譯時,直接編譯Test2.java即可:javac Test2.java(若沒有進入Test1和Test2的目錄,需在Test2前加上絕對路徑)

  若類在不同的package中,那么在一個類中要調用另一個package中的類(必須是public類,非public類不支持不同包間訪問),需要在類名前明確加上package名稱;不過,java中存在一個讓java程序員偷懶的特性,叫做import關鍵字。

  

1 package p1;
2  
3 //import p2.Test2
4  
5 public class Test1 {
6       public static void main(String[] args) {         
7           p2.Test2 t;//Test2 t if we import p2.Test2 before;
8       }
9 }

 

使用import就可以在一個package中導入另一個package中的類,不過import和C語言和C++中的#include是不同的,import並不會在當前java文件中嵌入另一個package中的類的代碼,只是告訴java文件,不屬於該包的類能夠到哪里去那么問題來了,java文件在編譯時如何知道p2這個package在哪?這里要提到一個重要的變量:classpath。classpath是java在編譯程序時查找類文件的路徑,java編譯器會在classpath中包含有的路徑中查找java的類文件。


  舉個例子,比如說classpath的值(Windows下)是.(當前目錄);C:/,那么編譯器在查找類的時候,就只會在當前目錄和C:/中查找。所以如果p2這個目錄與p1在同一目錄層次下,那么p2就能直接被查找到了,查找也就結束了;如果不在的話,比如說p1的目錄結構是C:/document/java/project/p1,p2的目錄結構是C:/document/java/test/p2,那么如果C:/document/java/test不在classpath中,java解釋器是找不到p2這個package的位置的,那么就會提示錯誤,因此需要將C:/document/java/test加入到classpath中。

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

參考資料:https://blog.csdn.net/fenggla/article/details/54869858

 


免責聲明!

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



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