作者barry800414 (小銘)
看板b98902HW
標題[JAVA] package + HW3
時間Mon Apr 5 00:13:24 2010
請先看懂上面那一篇:[JAVA] classpath 請先搞懂再去寫hw3
package就是拿來分門別類用的! 兩個非常重要的概念是
1.程式邏輯上的分類管理
2.實體檔案上的分類管理
這樣講沒人會懂 直接舉hw3為例子
看老師給的檔案是 POOArticle.class
還故意寫這樣喔! ntu/csie/oop10spring/POOArticle.class
看doc 會寫 ntu.csie.oop10spring.POOArticle
這是什麼? 就是它是 ntu.csie.oop10spring這個package下的POOArticle.class
然後呢?
我們先抓下來 放在 c:\workspace\hw3\class 試試看!
c:\workspace\hw3\class> java POOArticle
會出現這樣的錯誤訊息:
Exception in thread "main" java.lang.NoClassDefFoundError: POOArticle (wrong
name: ntu/csie/oop10spring/POOArticle)
那該怎麼辦? 方法如下 有點麻煩 但是只有這樣才能成功執行
c:\workspace\hw3\class 下新增一個 名
ntu 的資料夾 在ntu這個資料夾裡面
再新增一個名
csie 的資料夾 在csie 這個資料夾再新增名
oop10spring 的資料夾
然後把POOArticle.class 放到
c:\workspace\hw3\class\ntu\csie\oop10spring 裡
接著先跳回 c:\workspace\hw3\class
執行的指令:
C:\workspace\hw3\class>java ntu.csie.oop10spring.POOArticle
黃色部分: 也就是類別名稱
不再是 POOArticle 變成
ntu.csie.oop10spring.POOArticle 了!
這就是:
程式邏輯上的分類管理
而建置這麼多相對應的資料夾的目的 就是要符合:
實體檔案上的分類管理
如此才能正常的運作!!!
c:\workspace\hw3\class> java ntu.csie.oop10spring.POOArticle
↑ ↑ ↑
c:\workspace\hw3\class\ntu\csie\oop10spring\
=============================================================================
最後就是hw3整個的編譯方法和執行方法了 我是這樣做的:
c:\workspace\hw3\src\ntu\csie\oop10spring\
放 POOAdvArticle.java 和 POOAdvArticleDemo.java
兩個檔案裡面最前面都要加
package ntu.csie.oop10spring
c:\workspace\hw3\class\ntu\csie\oop10spring\
放 POOArticle.class
編譯POOAdvArticle.java 和 POOAdvArticleDemo.java的指令是這樣:
C:\workspace\hw3>javac -cp .\class .\src\ntu\csie\oop10spring\*.java
注意是.java檔 不是.class檔 所以 要打POOAdvArticle.java和Demo的路徑
而不是類別名稱
也就是"不要"打這樣:
C:\workspace\hw3>javac -cp .\class .\src\ntu
.csie
.oop10spring
.*.java
如此就可以編譯了,不過這樣會有一個缺點,就是 產生的.class檔 會在同一個目錄下
所以再加一個指令來改變產生檔案的儲存位置
=============================================================================
C:\workspace\hw3>javac -cp .\class -d .\bin .\src\ntu\csie\oop10spring\*.java
=============================================================================
紅藍部分告訴compiler POOArticle.class放哪裡
紫色部分告訴compiler 產生的.class檔要放哪
黃色部分告訴compiler 想要compile 的檔放哪裡
執行Demo的話:
==============================================================================
C:\workspace\hw3>java -cp .\class;.\bin ntu.csie.oop10spring.POOAdvArticleDemo
==============================================================================
(如果有要放參數的話記得加在後面)
藍色部分是CLASSPATH 記住因為要告訴JVM
POOArticle.class 和 POOAdvArticle.class 的位置 所以要
.\class;.\bin
兩個都要放 少任何一個都會錯
大概是這樣了
大家加油吧
hw3 其實是前面這些東西難搞 本身不難寫
小小提示: 可能會用到main的參數 以及 Linked list
然後 拋棄eclipse吧
我已經對它失望了XD 試過無數種方法 不是package產生出來的時候怪怪的
就是編譯沒過 不然就是編譯過了跑了會爆掉 我已經不想再用了
多多用cmd 和 vim吧
現在只用eclipse在 edit而已 (縮排、加註解還是很好用)
HW3各位加油 有一個月的時間 不要到deadline前才寫
更詳細的看這:
http://caterpillar.onlyfun.net/Gossip/JavaEssence/Package.html
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.244.4.129
※ 編輯: barry800414 來自: 60.244.4.129 (04/05 00:37)
1F:推 Dorapika:唔,eclipse還是建的出來啦。 04/05 00:45
3F:推 s864372002:一開始也是弄到快崩潰,照我第一篇弄應可以跟樓上一樣 04/05 11:31
4F:→ tomap41017:我是直接開Vector..有差別嗎?還沒仔細研究 04/06 00:34
5F:→ sunjw:推 太感動了 XD 04/07 20:11
6F:推 zebraseven:啊不推就太對不起小銘了 !! 04/16 13:39
7F:推 tonylo2ooo:推到懸崖去!!!! 04/26 21:42