JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [討論] Package - 套裝類別的設計 [精華]
sungo

瘋狂口罩大盜



發文: 822
積分: 17
於 2004-03-04 17:56 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
package的主要用途:
1.一個程式隨著功能越來越多,程式碼越來越大,就有必要將個別的功能有
所分類,以利管理。

2.當程式是由多人一起撰寫時,很有可能會使用到同一個類別名稱。例如某
甲定義一個Circle類別用來計算圓體積,某乙也定義了一個Circle類別用來
表示圓面積,這時候就會產生名稱衝突(name rollision),使用package即可
避免此情形。

Java提供了package機制,可以將自行定義的名稱管理在package下,而不會
有名稱衝突發生,例如我們定義了Volume(體積)跟SquareMeasure(面積)兩
個package,在它們之下各有一個Circle類別,但由於2個類別分別屬於不同
的package,所以這兩個名稱並不會產生衝突。要定義一個屬於自己的package
是非常簡單的!只要在程式的最前面加入package敘述即可。如下:

1
2
package Volume; 
public class Circle{.........}


import的敘述: 告訴JVM應從哪一個Package去引入所需之類別。(bring in
some classes from another package),這些類別必須設定好CLASSPATH
才可以被編譯器找到。

例如:
1
import java.io.* //引入java.io這個Package內的所有類別。(星號*表示以下全部)
1
import java.io.BufferedReader //引入java.io這個Package內的BufferedReader類別。


default package:
一般我們撰寫程式時,並未對自行設計的類別用package包裝,
但是Java實際上都有幫我們作package的動作。只是這個package
動作並未被正式取名而已,我們稱之為default package(預設的
套裝類別),default package指的是目前原始檔所在的目錄。
<當我們使用javac編譯未加package的原始碼時,各位即可發現
*.class是產生在原始檔目錄下。>也因為default並沒有名稱,
所以也無法提供import敘述使用。

底下就用一個範例來作說明:
例如我在C:\底下的Default_Package目錄有2個Java原始檔,
Show.java、Test.java,原始碼分別如下:
1
2
3
4
5
6
//FileName:Show.java
public class Show{
    public void MyName(){
        System.out.println("My name is sungo");
    }
}


1
2
3
4
5
6
7
//FileName:Test.java
public class Test {
    public static void main(String[] args) {
        Show Sungo = new Show();
        Sungo.MyName();
    }
}


執行後我們可以發現,Test這個類別裡並沒有import敘述,但是在編譯後
仍然會產生Show.class跟Test.class在Test原始檔目錄下,並可以由Test
呼叫執行。即是因為Show位於Java所謂的default package中(即Test原
始檔的目錄下)。

自行設計package:

首先必須以dot(.句點)來作為不同目錄間的區隔,例如:

package dir; //將類別的定義放在dir目錄下
package dir.default; //將類別的定義放在dir\default目錄下
package dir.default.run; //將類別的定義放在dir\default\run目錄下

上述的例子中,dir目錄下的default、run都是子套裝類別。

以上面的default package範例來說明:
在原本C:\Default_Package底下新增一個dir資料夾,並將Test.java
加入import敘述,Show.java則加入package敘述,並將Show放置於dir
目錄下。修改後的原始碼如下:

1
2
3
4
5
6
7
8
//FileName:Test.java
import dir.Show ; //新增的部分
public class Test {
    public static void main(String[] args) {
        Show Sungo = new Show();
        Sungo.MyName();
    }
}


1
2
3
4
5
6
7
//FileName:Show.java
package dir; //新增的部分
public class Show{
    public void MyName(){
        System.out.println("My name is sungo");
    }
}

執行後我們可以發現與第一個例子的結果比較後發現,加入
package dir;敘述的Show.java原始檔,於編譯後,其Class檔
是位於dir資料夾底下,此時Test的import dir.* ;便可找到該
類別。

底下是自訂package的原始檔。

Default_Package.zip (1.54k)


sungo edited on 2004-08-12 20:00
reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:sungo]
sungo

瘋狂口罩大盜



發文: 822
積分: 17
於 2004-03-04 18:45 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
另外良葛格的網站裡也有對package的介紹,有興趣可以去看看。
* 米小國 * 奇想世界☆.╯


reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:sungo]
sungo

瘋狂口罩大盜



發文: 822
積分: 17
於 2004-03-04 22:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
package與access control的關係:

取用與被取用的類別分別屬於不同package時:
必需將被取用的類別設成public,否則將無法
存取。

而被取用的類別雖必須設為public才可存取,但
其類別成員仍可以被設計成public、protected、
private與不作任何設定。底下為各個狀況的說明:

◎類別成員是public時:
不管是有繼承關係或是無繼承關係的類別,
皆可順利存取。

◎類別成員是protected時:
請參考下方Duncan的說明!

◎類別成員是private時:
無法存取。

◎不設定類別成員的access control時:
無法存取。


sungo edited on 2004-03-05 00:19
reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:sungo]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2004-03-04 23:29 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
sungo wrote:
◎類別成員是protected時:
2.取用與被取用類別間要要是有繼承關係
的話,將可存取。


這個已經提到很多遍了,上述講法是不正確的。

A, B 隸屬不同的 package 且 B extends A,則 B instance 只能存取 B instance 本身從 A 沿襲而來的 protected member(透過繼承,A 的 protected member 就是 B 的 protected member,但 B object 不能無法隨意存取任一個 A object's protected member)。

請以 "protected" 搜尋站裡相關討論。


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:[討論] Package - 套裝類別的設計 [Re:sungo]
yengceng





發文: 17
積分: 0
於 2004-04-21 19:51 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
package能否跨磁碟呢?
例如我的主副程式都在C:\java\裡,然後我想執行完,透過package把結果丟至D槽我們所訂的目錄裡呢?
請問怎麼用啊,謝謝~


reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:yengceng]
sungo

瘋狂口罩大盜



發文: 822
積分: 17
於 2004-04-21 21:16 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
yengceng wrote:
package能否跨磁碟呢?
例如我的主副程式都在C:\java\裡,然後我想執行完,透過package把結果丟至D槽我們所訂的目錄裡呢?
請問怎麼用啊,謝謝~

see Duncan's instruction:
http://www.javaworld.com.tw/jute/post/view?bid=29&id=40657&sty=3&keywords=package


reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:sungo]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-07-26 12:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
原來如此阿。Smile

reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:sungo]
gs2005





發文: 2
積分: 0
於 2005-07-28 16:59 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我在一个类文件(bbsuser.class)中调用了另一个与数据库建立连接的类bbsreg.class,但是在编译时出现错误。


cannot resolve symbol
symbol :class bbsreg
location:class test.bbsuser
bbsreg dbconn;

不知道是什么原因,还请楼主回复!多谢·

Snap1.bmp (247.46k)


reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:gs2005]
tekwei

系統穩定



發文: 978
積分: 4
於 2005-07-28 17:50 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
gs2005 wrote:
我在一个类文件(bbsuser.class)中调用了另一个与数据库建立连接的类bbsreg.class,但是在编译时出现错误。


cannot resolve symbol
symbol :class bbsreg
location:class test.bbsuser
bbsreg dbconn;

不知道是什么原因,还请楼主回复!多谢·

全文搜索: cannot resolve symbol
http://www.javaworld.com.tw/jute/post/search


reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:sungo]
aa061672116





發文: 5
積分: 0
於 2009-09-13 17:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
感謝樓主美女的分享,很清楚的解說.
謝謝妳您整理的好文章.


reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:sungo]






發文: 63
積分: 0
於 2013-12-14 13:10 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
樓主你好:
上述的情況是在eclipse的環境下執行,請問我該如何
在default 目錄下的.java import下面package的類別檔 使用cmd執行呢??
package dir;
package dir.default;
package dir.default.run;


reply to postreply to post
作者 Re:[討論] Package - 套裝類別的設計 [Re:sungo]
dq042000





發文: 8
積分: 0
於 2014-11-18 14:28 user profilesend a private message to usersend email to dq042000reply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我終於搞懂了 import 跟 package 這兩個用途了!!
謝謝您Big Smile


reply to postreply to post
Small things listen to your head;big things listen to your heart.

http://dq042000.blogspot.tw/
» JWorld@TW »  Java 新手區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8