閱讀391 返回首頁    go 阿裏雲 go 技術社區[雲棲]


JAVA的helloworld

java環境設置
-------------

在環境變量中設置以下三個變量:
JAVA_HOME=C:\j2sdk1.4.1 //可以改為相應的目錄
CLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
PATH=%JAVA_HOME%\bin;%PATH%

然後在命令行輸入java -version命令,如果出現
java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)
則說明已經配置成功!

HelloWorld.java源程序如下:
public class HelloWorld{
public static void main(String[] args) { 
  System.out.println("Hello World!");
  }
}

在命令行執行javac HelloWorld.java
如果沒有輸出任何信息則說明編譯成功。

在命令行運行java HelloWorld,輸出:
Hello World!
代表成功執行了java程序。

-----------------
初學者常犯的錯誤
-----------------

1. 運行時,帶了.class後綴
如果你試圖使用如下命令:E:\java\src>java HelloWorld.class
係統會誤認為你運行的是HelloWorld包下的名為class的類文件,會到係統的CLASSPATH下(一般都包括當前目錄)企圖尋找 HelloWorld.class.class這樣的類,這樣的類當然不存在了;並且也不可能存在,因為class是關鍵字,不能作為一個類的名字。所以會報如下錯誤信息:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class

2. 文件名大小寫錯誤
對於像Windows這樣的係統,編譯時可以不關心大小寫。比如編譯HelloWorld.java時,也可以使用:
E:\java\src>javac helloworld.java
也可以編譯通過,但產生的類文件仍然是和源文件相符的:HelloWorld.class。
但在運行時一定要注意大小寫,比如試圖使用如下命令運行:
E:\java\src>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:\java\src>javac HelloWorld.java
此時在當前目錄下輸出HelloWorld.class。此時,運行不能使用上麵相同的方法,使用:
E:\java\src>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:\java\src\org\javaresearch\目錄下。運行:
E:\java\src >java org.javaresearch.HelloWorld
係統打印出:
Hello World!
這兒要注意的是,不能使用java org\javaresearch\HelloWorld來運行,此時同樣會出現如下錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError:org\javaresearch\HelloWorld (wrong name: org/javaresearch/HelloWorld)

2. 使用 -d <directory>編譯選項
是不是覺得上麵的編譯方法有點麻煩,能不能自動在當前路徑(或任意指定的路徑)下生成包層次呢?有!使用-d <directory>編譯選項就能做到。
E:\java\src >javac -d . HelloWorld.java
此時,在當前目錄下就生成了一個org\javaresearch目錄,並且輸出的.class文件也在裏麵。運行:
E:\java\src >java org.javaresearch.HelloWorld
係統打印:Hello World!
如果你想把生成的類文件集中存放在一個目錄中,比如:E:\java\classes下,那麼你首先創建這個目錄,然後編譯時:
E:\java\src >javac -d E:\java\classes HelloWorld.java
就可以把生成的類文件放到E:\java\classes目錄下,並且按照包層次相應的創建目錄路徑。你可以在E:\java\classes\org \javaresearch下找到HelloWorld.class文件。此時使用如下命令可以正確運行(注意如果要用到其它類,請在CLASSPATH 中設好):
E:\java\classes >java org.javaresearch.HelloWorld

或者你可以在E:\java目錄下麵運行以下命令來執行
E:\java >java -classpath .\classes org.javaresearch.HelloWorld
使用java的-classpath參數可以將一些目錄加入類路徑

-------------------
打包jar文件
-------------------
可以把一個包內的所有class文件打包為一個jar文件,便於存放和運行。以上文的org.javaresearch包為例,其打包命令如下:
E:\java\classes >jar cvf wxb.jar org
會生成一個wxb.jar文件,將其中META-INF\MANIFEST.MF文件中添加如下一行:
Main-Class: org.javaresearch.HelloWorld
保存jar文件。

或者首先創建並編輯一個MANIFEST.MF文件,其內容如下:
Manifest-Version: 1.0
Created-By: 1.4.1 (Sun Microsystems Inc.)
Main-Class: org.javaresearch.HelloWorld
將其保存到classes目錄中
然後將其一起打包到jar文件中,打包命令如下:
E:\java\classes >jar cvfm wxb.jar MANIFEST.MF org

-------------
運行jar文件
-------------
在命令行中輸入如下命令即可:
E:\java\classes >java -jar wxb.jar
輸出為:
Hello World!

 

-------------
jar,war,ear區別

-------------

這三種文件都可以看作是java的壓縮格式,其實質是實現了不同的封裝:

jar--封裝類
war--封裝web站點
ear--封裝ejb。
它們的關係具體為:
jar:      是java Achieve--按java格式壓縮的類包,包含內容 class、properties文件,    是文件封裝的最小單元 級別:小
war:     是file web Achieve--包含Servlet、JSP頁麵、JSP標記庫、JAR庫文件HTML/XML文檔和其他公用資源文件,如圖片、音頻文件等 級別:中
ear:    是 file Enterprise Achieve--除了包含JAR、WAR以外,還包括EJB組件   部署文件 application-client.xml web.xml application.xml    級別:大

 

完!

感謝,Thanks!

最後更新:2017-04-03 16:48:42

  上一篇:go 【轉載】Ubuntu Android開發環境搭配
  下一篇:go Ubuntu 11.04 NFS 配置