包實際上就是一個文件夾,在程序中使用package進行定義,語法如下:
package 包名 ; |
例如:把以下的程序放在一個包中:
package demo.test ;
public class Demo33{
public static void main(String args[]){
System.out.println("Hello World!!!") ;
}
}; |
如果要想成功的使用以上包中的類,則必須在編譯的時候建立好相應的文件夾。
可以使用如下的命令編譯程序:
javac -d . Demo33.java
· “-d”:表示建立一個新的文件夾,文件夾的名字爲package定義的名字
· “.”:表示在當前所在的目錄中建立此文件夾
如果現在已經成功的編譯完之後,則在運行的時候就必須寫上完整的包.類名稱,如上面程序:
java demo.test.Demo33,而不能說進入到目錄中執行。
那麼也可以定義很多的包,例如,現在在test.demo1下建立一個Demo類,此Demo中有一個打印“Hello World”的方法。
package test.demo1 ;
class Demo{
public void print(){
System.out.println("Hello World!!!") ;
}
}; |
那麼此時,要對包進行編譯。
下面再建立一個Demo34.java的類,在此類中要使用Demo類。那麼也就是說要在Demo34.java中導入所需要的包.類。假設:Demo34.java定義在test.demo2中。
package test.demo2 ;
// 導入所需要的包
import test.demo1.Demo ; à 在此處導入了所需要的包
public class Demo34{
public static void main(String args[]){
new Demo().print() ;
}
}; |
下面執行程序,觀察效果:出現了以下錯誤:
Demo34.java:3: test.demo1.Demo 在 test.demo1 中不是公共的;無法從外部軟件包中對
其進行訪問
import test.demo1.Demo ;
^
Demo34.java:6: 找不到符號
符號: 類 Demo
位置: 類 test.demo2.Demo34
new Demo().print() ;
^
2 錯誤 |
注意:
如果一個類想被包外的類所訪問,則此類必須聲明爲public類型。
修改Demo.java,聲明爲public class
package test.demo1 ;
public class Demo{
public void print(){
System.out.println("Hello World!!!") ;
}
}; |
那麼一般情況下導包的語句要使用import,那麼以上的代碼是分別導入的。如果要導入一個包中的類很多,則可以直接使用“*”代替,那麼實際上導入“*”與分別導入是一樣的,因爲,它只會導入自己所需要的類,不需要的類根本不會導入。
但是一般情況下,如果做好了一系列的類,肯定要放在一個包中,而且不能把全部的*.class文件給用戶,因爲會很麻煩,所以在JAVA一般可以把所有的*.class打成*.jar的包,使用*.jar包就可以保存全部要使用的*.class文件了。
建立Hello.java類
package org.lxh.demo ;
public class Hello{
public String sayHello(String name){
return "你好," + name ;
}
}; |
編譯完成之後,使用JAR命令打包:
jar -cvf my.jar org
· “c”:創建新的文件
· “v”:顯示詳細的信息
· “f”:指定文件的名子
· org:要打成*.jar的包名稱
建立測試類:
package demo ;
import org.lxh.demo.* ;
public class TestHello{
public static void main(String args[]){
Hello h = new Hello() ;
System.out.println(h.sayHello("張三")) ;
}
}; |
打包編譯出現了以下的錯誤:
TestHello.java:2: 軟件包 org.lxh.demo 不存在
import org.lxh.demo.* ;
^
TestHello.java:5: 找不到符號
符號: 類 Hello
位置: 類 demo.TestHello
Hello h = new Hello() ;
^
TestHello.java:5: 找不到符號
符號: 類 Hello
位置: 類 demo.TestHello
Hello h = new Hello() ;
^
3 錯誤 |
雖然此時TestHello與my.jar在同一個文件夾之中,但是如果要想正確的使用*.jar的文件,則必須設置classpath:set classpath=e:\testjava\my.jar;.