從簡單程序看java運行錯誤

字號:

問HelloWorld問題的人實在是太多了,而且經(jīng)常都以“問一個最簡單的問題”開頭。其實回想一下,自己也是從這個階段過來的,說一句“你好”,真的是一個最簡單的問題嗎?
    首先,我們要假設(shè)一下我們的平臺是Windows+JDK(Linux環(huán)境下也差不多)。這個環(huán)境是相當普遍、基礎(chǔ)和入門的。確定已經(jīng)正確安裝JDK了,下一步是小心翼翼地敲入某本教程上的HelloWorld源碼,存盤,然后編譯,javac ...問題來了:
    * 錯誤1:
    ’javac’ 不是內(nèi)部或外部命令,也不是可運行的程序或批處理文件。
    (javac: Command not found)
    產(chǎn)生的原因是沒有設(shè)置好環(huán)境變量path。
    Win98下在autoexce.bat中加入path=%path%;c:\jdk1.2\bin
    Win2000下則控制面板->系統(tǒng)->高級->環(huán)境變量->系統(tǒng)變量...看到了?雙擊Path,在后面加上c:\jdk1.2\bin。
    當然我們假設(shè)JDK安裝在了c:\jdk1.2目錄下
    好,再試試!javac HelloWorld
    * 錯誤2:
    HelloWorld is an invalid option or argument.
    拜托,給點專業(yè)精神,java的源程序是一定要存成.java文件的,而且編譯時要寫全.java呀。
    OK,javac HelloWorld.java (這回總該成了吧?)
    * 錯誤3:
    HelloWorld.java:1: Public class helloworld must be defined in a file called
    "HelloWorld.java".public class helloworld{
    這個問題嘛,是因為你的類的名字與文件的名字不一致。(誰說的,明明看到人家都有這樣寫的)OK,準確地說,一個Java源程序中可以定義多個類,但是,具有public屬性的類只能有一個,而且要與文件名相一致。還有,main方法一定要放在這個public的類之中,這樣才能java(運行)這個類。另外一點是Java語言里面是嚴格區(qū)分大小寫的,初學者要注意呀。像上例中 helloworld 與 HelloWorld 就認為是不一樣,因而...
    oh... 好,改好了,嘻嘻...
    javac HelloWorld.java
    ...(咦,怎么什么也沒有呀?)//faint 這就是編譯通過了!看看是不是多了一個HelloWorld.class?
    按書上教的 java HelloWorld(不是java HelloWorld.class喲,因為在j2ee規(guī)范中java指令中的“.”是指路徑的意思,如果是java HelloWorld.class 那么系統(tǒng)就會查找HelloWorld目錄下的class.class文件,這樣當然是不可能存在的)。
    * 錯誤4:
    Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
    呵呵,這個嘛,就是的類路徑(classpath)問題啦。實際上,類路徑是在編譯過程就涉及的Java中的概念。classpath就是指明去哪里找用到的類,就這么簡單。由于我們的HelloWorld沒用到其它的(非java.lang包中的)類,所以編譯時沒遇到這個問題。運行時呢,就要指明你的類在哪里了。解決方法嘛,可以用下面的命令運行:
    java -classpath . HelloWorld
    “.”就代表當前目錄。當然這樣做有點麻煩(是“太麻煩”?。?,我們可以在環(huán)境變量中設(shè)置默認的classpath。方法就照上述設(shè)置path那樣。將classpath設(shè)為:classpath=.;c:\jdk1.2\lib\dt.jar;c:\jdk1.2\lib\tools.jar 后面的兩個建議也設(shè)上,以后開發(fā)用的著。
    java -classpath . HelloWorld(再不出來我就不學java了)
    * 錯誤5:
    Exception in thread "main" java.lang.NoSuchMethodError: main
    (//咣當)別,堅持住??纯茨愕拇a,問題出在main方法的定義上,寫對地方了嗎,是這樣寫的嗎:
    public static void main(String args[]) { // 一個字都不要差,先別問為什么了...對,包括大小寫!
    java -classpath . HelloWorld (聽天由命了!)
    Hello World!
    (faint!終于...)
    歡迎來到Java世界!所以說,無法運行HelloWorld 真的并不是一個“最簡單的問題”。
    附:HelloWorld.java
    // HelloWorld.java
    public class HelloWorld {
     public static void main(String args[]) {
     System.out.println("Hello World!");
     }
    }