程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Hello World常見問題

Hello World常見問題

編輯:關於JAVA

不含包層次的HelloWorld.java

public class HelloWorld
{
   public static void main(String[] args) {
     System.out.println("Hello World!");
   }
}

保存在E:javasrc下,使用javac命令編譯:

E:javasrc>javac HelloWorld.java

運行:

E:javasrc>java HelloWorld

屏幕打印出:

Hello World!

初學者常犯的錯誤

1. 運行時,帶了.class後綴

如果你試圖使用如下命令:

E:javasrc>java HelloWorld.class

系統會誤認為你運行的是HelloWorld包下的名為class的類文件,會到系統的CLASSPATH下(一般都包括當前目錄)企圖尋找HelloWorld.class.class這樣的類,這樣的類當然不存在了;並且也不可能存在,因為class是關鍵字,不能作為一個類的名字。所以會報如下錯誤信息:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class

2. 文件名大小寫錯誤

對於像Windows這樣的系統,編譯時可以不關心大小寫。比如編譯HelloWorld.java時,也可以使用:

E:javasrc>javac helloworld.java

也可以編譯通過,但產生的類文件仍然是和源文件相符的:HelloWorld.class。

但在運行時一定要注意大小寫,比如試圖使用如下命令運行:

E:javasrc>java helloworld

將報類似於1中的錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)

包含包層次的HelloWorld.java

比如上面的HelloWorld.java修改如下:

package org.javaresearch;

public class HelloWorld
{
   public static void main(String[] args) {
     System.out.println("Hello World!");
   }
}

編譯時有兩種方法

1. 直接編譯

E:javasrc>javac HelloWorld.java

此時在當前目錄下輸出HelloWorld.class。此時,運行不能使用上面相同的方法,使用:

E:javasrc>java HelloWorld

運行時,出現如下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)

從上述錯誤信息你也可以看到,系統可以找到HelloWorld類(因為當前路徑包含在CLASSPATH中,具體為什麼會提示wrong name,有興趣的朋友參見Java語言規范),但這個類屬於org.javaresearch包。所以,你要做的就是按照上述包層次,相應的創建目錄層次,把上面生成的HelloWorld.class放到E:javasrcorgjavaresearch目錄下。運行:

E:javasrc >java org.javaresearch.HelloWorld

系統打印出:

Hello World!

這兒要注意的是,不能使用java orgjavaresearchHelloWorld來運行,此時同樣會出現如下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError:orgjavaresearchHelloWorld (wrong name: org/javaresearch/HelloWorld)

哈哈,是不是有點怪怪的,那沒辦法。以後對Java的包有更深的認識時,就會明白了。

2. 使用 -d <directory>編譯選項

是不是覺得上面的編譯方法有點麻煩,能不能自動在當前路徑(或任意指定的路徑)下生成包層次呢?有!使用-d <directory>編譯選項就能做到。

E:javasrc >javac -d . HelloWorld.java

此時,在當前目錄下就生成了一個orgjavaresearch目錄,並且輸出的.class文件也在裡面。運行:

E:javasrc >java org.javaresearch.HelloWorld

系統打印:Hello World!

如果你想把生成的類文件集中存放在一個目錄中,比如:E:javaclasses下,那麼你首先創建這個目錄,然後編譯時:

E:javasrc >javac -d E:javaclasses HelloWorld.java

就可以把生成的類文件放到E:javaclasses目錄下,並且按照包層次相應的創建目錄路徑。你可以在E:javaclassesorgjavaresearch下找到HelloWorld.class文件。此時使用如下命令可以正確運行(注意如果要用到其它類,請在CLASSPATH中設好):

E:javaclasses >java org.javaresearch.HelloWorld

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved