xiaohan

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            1 Posts :: 22 Stories :: 0 Comments :: 0 Trackbacks
          包含包層次的HelloWorld.java

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

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


            編譯時(shí)有兩種方法

            1. 直接編譯

            E:\java\src>javac HelloWorld.java

            此時(shí)在當(dāng)前目錄下輸出HelloWorld.class。此時(shí),運(yùn)行不能使用上面相同的方法,使用:

            E:\java\src>java HelloWorld

            運(yùn)行時(shí),出現(xiàn)如下錯(cuò)誤:

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

             從上述錯(cuò)誤信息你也可以看到,系統(tǒng)可以找到HelloWorld類(因?yàn)楫?dāng)前路徑包含在CLASSPATH中,具體為什么會(huì)提示wrong name,有興趣的朋友參見Java語言規(guī)范),但這個(gè)類屬于org.javaresearch包。所以,你要做的就是按照上述包層次,相應(yīng)的創(chuàng)建目錄層 次,把上面生成的HelloWorld.class放到E:\java\src\org\javaresearch\目錄下。運(yùn)行(這時(shí)候是在包層次的最高層目錄下運(yùn)行的):

            E:\java\src >java org.javaresearch.HelloWorld

            系統(tǒng)打印出:

            Hello World!

            這兒要注意的是,不能使用java org\javaresearch\HelloWorld來運(yùn)行,此時(shí)同樣會(huì)出現(xiàn)如下錯(cuò)誤:

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

            因?yàn)轭惷臅鴮懯怯镁潼c(diǎn)來分割包名的層次的,引用java類庫里面的類也可以這樣寫:java.util.List 類的全名就是這樣的,我們?nèi)绻?import 語句里寫上 import java.util.List;
          那么,就不用寫全名了,直接寫 List list = new ...;java 編譯器就可以知道是 List 什么類.但是,由于,java.util 這個(gè)包 和 java.sql 這個(gè)包都有一個(gè) Date 類,所以,如果 同時(shí)導(dǎo)入這兩個(gè)包,那么會(huì)
          導(dǎo)致java 編譯器不知道引用那個(gè)類,有兩種解決辦法:
          a. 用全名來引用類:java.util.Date date1 = ...;java.sql.Date date2 = ...;
          b. 不要導(dǎo)入整個(gè)包,只導(dǎo)入所需要的類,如果你同時(shí)需要這兩個(gè) Date 類,那么只能寫全名了,如果
          你不是同時(shí)需要這兩個(gè)類,你可以只導(dǎo)入需要的包:
          比如:import java.util.List; import java.sql.Date;這樣就不會(huì)沖突,因?yàn)榫幾g器可以十分清楚的區(qū)分
          這個(gè) Date 類是 java.sql 包中的, java.util 包中的 Date 類根本就沒有導(dǎo)入進(jìn)來。
          這一點(diǎn),可以按照常理來理解,還是比較好理解的。
            2. 使用 -d <directory>編譯選項(xiàng)

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

            E:\java\src >javac
          (其中的點(diǎn)表示當(dāng)前目錄。d 和 . 之間有空格, .和后面的java文件名之間也有空格)

            此時(shí),在當(dāng)前目錄下就生成了一個(gè)org\javaresearch目錄,并且輸出的.class文件也在里面。運(yùn)行:

            E:\java\src >java org.javaresearch.HelloWorld

            系統(tǒng)打?。篐ello World!

            如果你想把生成的類文件集中存放在一個(gè)目錄中,比如:E:\java\classes下,那么你首先創(chuàng)建這個(gè)目錄,然后編譯時(shí):

            E:\java\src >javac -d E:\java\classes HelloWorld.java

             就可以把生成的類文件放到E:\java\classes目錄下,并且按照包層次相應(yīng)的創(chuàng)建目錄路徑。你可以在E:\java\classes\org \ javaresearch下找到HelloWorld.class文件。此時(shí)使用如下命令可以正確運(yùn)行(注意如果要用到其它類,請?jiān)贑LASSPATH中 設(shè)好):

            E:\java\classes >java org.javaresearch.HelloWorld
          posted on 2012-10-30 22:02 曉寒 閱讀(198) 評論(0)  編輯  收藏 所屬分類: eclipse
          主站蜘蛛池模板: 江城| 贡觉县| 阿图什市| 河间市| 洪洞县| 黄平县| 棋牌| 石首市| 彭泽县| 德庆县| 伊宁县| 喀什市| 察哈| 满洲里市| 阜康市| 元朗区| 特克斯县| 白河县| 临颍县| 河南省| 锦屏县| 中江县| 洪泽县| 祥云县| 陵水| 湖口县| 家居| 克东县| 轮台县| 宜昌市| 保亭| 旌德县| 张北县| 邓州市| 吉木萨尔县| 马龙县| 沿河| 固镇县| 浠水县| 崇阳县| 沈丘县|