包實際上就是一個檔案夾,在程式中使用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(){
那麼此時,要對包進行編譯。
下面再建立一個Demo34.java的類,在此類中要使用Demo類。那麼也就是說要在Demo34.java中導入所需要的包.類。假設:Demo34.java定義在test.demo2中。
package test.demo2 ;
// 導入所需要的包
<b>import test.demo1.Demo ; </b><b>à</b><b> </b><b>在此處導入了所需要的包</b><b></b>
public class Demo34{
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 錯誤
<b>注意:</b><b></b>
如果一個類想被包外的類所通路,則此類必須聲明為<b>public</b>類型。
修改Demo.java,聲明為public class
public class Demo{
那麼一般情況下導包的語句要使用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{
Hello h = new Hello() ;
System.out.println(h.sayHello("張三")) ;
打包編譯出現了以下的錯誤:
TestHello.java:2: 軟體包 org.lxh.demo 不存在
^
TestHello.java:5: 找不到符号
符号: 類 Hello
位置: 類 demo.TestHello
Hello h = new Hello() ;
^
^
3 錯誤
雖然此時TestHello與my.jar在同一個檔案夾之中,但是如果要想正确的使用*.jar的檔案,則必須設定classpath:set classpath=e:\testjava\my.jar;.
本文轉自 李興華 51CTO部落格,原文連結:http://blog.51cto.com/lixinghua/96929,如需轉載請自行聯系原作者