寫完一個 java 程式後, 我想知道如何編譯它、如何執行它。哥是正統 unix 軟體開發人員, 沒在用 eclipse 這種按下去就編好的東西, 只用會讓自己難過的 command line 編譯方式。不過 java 的編譯還真不是普通的複雜, 如何執行它更是混亂。
看來好像沒什麼難的是吧? list 2 L6 看起來好像是把 HelloWorld.class 執行起來, 但 java HelloWorld 的 HelloWorld 並不是 HelloWorld.class 這個檔案, 實際上是 ...
先賣個關子, 加上 package namespace 試試。
啊哈, 可以用 javac 編譯出 HelloWorld.class
但用 java 這個指令竟然無法執行成功, 亂試 ...
果然還是不行,
疑, 可以執行了。但要在上一層才能執行覺得很不爽, 我就想在 DescentPackage/ 目錄中執行, 難道不可以嗎?
這樣應該有點感覺了吧! java 後面接的不是編譯出來的檔名, 而是 main class, 而在 package 裡頭的 main class 自然要加上 namespace, 也就是 DescentPackage.HelloWorld。這是第一個條件。
第二個條件就是 classpath, 要從哪裡開始找到這個 DescentPackage.HelloWorld main class,
java DescentPackage.HelloWorld
會從目前目錄開始找 HelloWorld.class 這個檔案, 如果目前目錄是 cc, 會從這裡往 DescentPackage/ (也就是 cc/DescentPackage/) 找 HelloWorld.class 這個檔案, 自然找不到, 建立一個 DescentPackage, 把 HelloWorld.class move 到 DescentPackage, java DescentPackage.HelloWorld 又成功執行了。
|
Java 編程語言 (The Java Programming Language, 4/e)
Ken Arnold、James Gosling、David Holmes 著
侯捷、柯向上 譯 |
那如果我就是要在 DescentPackage 目錄執行呢? 行! 告訴 java, 從上一層開始找 HelloWorld.class 就可以了。這是為什麼加上 -cp .. 的原因。
必須要知道 package name 和 classpath 才能正確執行 java 程式, 這是一個比較複雜的地方。
Java 編程語言 (The Java Programming Language, 4/e) 這本書完全沒寫到這個, 我覺得很不舒服, 如果連寫出來的程式都不知道怎麼編譯與執行, 還怎麼學這個程式語言呢?
ref:
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。