电竞比分网-中国电竞赛事及体育赛事平台

分享

從零開始Java學(xué)習(xí)筆記

 xuealice 2007-09-07


發(fā)表時間: 2006-12-30 23:23    作者: phyan    來源: 悟天之路


25號從交大圖書館借了本《跨平臺程序設(shè)計語言-Java  Cross-Platform Programming Language Java》(上海市教育委員會 組編,趙毅主編,西安電子科技大學(xué)出版社),開始了我的Java學(xué)習(xí)之旅。
在這里寫下我學(xué)習(xí)過程中的點(diǎn)滴困難與解決的過程,以期對有同樣問題的朋友有所幫助。
本來打算從25號起就開始寫,但是25號剛裝好論壇,26號就臺灣地震了,中美海底光纜中斷,我的這個服務(wù)器在美國,訪問不了,直到今天才恢復(fù),雖然還有點(diǎn)慢,但是總算能上來了 趕緊補(bǔ)上前兩天的

學(xué)習(xí)一門從來都沒接觸過的語言最大的困難就在于不知從何下手,往往一開始就出現(xiàn)問題卻不知道問題在哪里。
我先認(rèn)真的看書,看完一章之后就按照書上的例子把代碼全部用記事本手工輸入。初學(xué)的往往認(rèn)為樹上的例子簡單,看懂了就過去了而不動手自己把代碼寫出來運(yùn)行一下,等到后面復(fù)雜的時候就根本應(yīng)付不過來了。這個時候也最好避孕藥用有代碼提示和自動糾錯的開發(fā)工具,我裝了Eclipse,很好用,但是這里我想練手還是手寫最好。我也是看了網(wǎng)上好多網(wǎng)友的文章、忠告之后,加上以前我學(xué)習(xí)php的經(jīng)驗教訓(xùn),這次就有意識的這么做了。
我手工輸入了HelloWorld(SUN官方網(wǎng)站上就以此為例的)最簡單演示程序的源代碼
public class HelloWorld {

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

}
保存為HelloWorld.java之后,在DOS提示符下輸入javac HelloWorld.java 回車,停頓了一下,沒有提示信息,說明沒有問題了,記得有人說過在Dos下沒有消息就是好消息(一般發(fā)生錯誤才有提示消息),檢查了一下HelloWorld.java所在的目錄下多了個HelloWorld.class文件,說明編譯成功,然后輸入java HelloWorld 回車,出現(xiàn)了如下錯誤信息:
Exception in thread "main" java.lang.NoClassDefFoundError:
我仔細(xì)檢查并重復(fù)試了幾次也沒發(fā)現(xiàn)代碼有問題,就搜索了一下“Exception in thread "main" java.lang.NoClassDefFoundError:”,發(fā)現(xiàn)這是java初學(xué)者的經(jīng)典錯誤,我也不例外 找到了解決方法:

QUOTE:

1、你的文件名對嗎?
JAVA要求你的文件和你的類名嚴(yán)格對應(yīng)的。
比如 public class HelloWorld{ .....
那么文件名一定只能是HelloWorld.java,看仔細(xì)了!

2、你的程序中有main方法嗎?參數(shù)什么的對嗎?
main方法的聲明應(yīng)該是這樣子的:
public static void main(String[] args)
事實上如果你用開發(fā)工具來做的話,是不會錯的。如果你用UltraEdit之類的來寫程序的話,就一個字不要改的照抄吧!同時要注意大小寫不要出錯!

3、記住,javac后面跟的參數(shù)是文件名,但java 后面跟的是類名!
這是我開始學(xué)JAVA是犯的錯,java HelloWorld.class,然后就報錯。后來才弄明白,應(yīng)該是java HelloWorld。

4、設(shè)置了classpath等系統(tǒng)環(huán)境變量了嗎?

QUOTE:

JDK/java環(huán)境變量的設(shè)置

1,在Windows XP系統(tǒng)中,假如我安裝JDk到目錄:C:\Program Files\Java\j2re1.4.2_13

2,在桌面上選中“我的電腦”,在其上單擊鼠標(biāo)右鍵,選屬性,高級,環(huán)境變量(在下面)

3,在系統(tǒng)變量(S)欄點(diǎn)新建,出現(xiàn)新建系統(tǒng)變量對話框,在變量名(N)中填上JAVA_HOME

變量值:C:\Program Files\Java\j2re1.4.2_13

4,確定后在系統(tǒng)變量(S)欄再新建一個環(huán)境變量CLASSPATH
變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(開頭的dot和;不能少

5,確定后在系統(tǒng)變量(S)欄查找并選中變量為Path的選項,點(diǎn)編輯在變量值(V)的末尾添加:

JAVA_HOME%\bin    或者為值:C:\Program Files\Java\j2re1.4.2_13

如果沒有找到Path變量,自己新建一個!

如果你不想每次運(yùn)行都要CMD到class所在目錄然后執(zhí)行java命令,可以把所有的class文件放到統(tǒng)一的目錄組織下,然后將此目錄也追加到classpath下。

測試代碼如下:

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

用記事本編輯后存為Test.java(文件名與類名相同)文件,打開命令行窗口,

cd到文件所在目錄下:

javac Test.java                   //編譯命令

java Test                            //執(zhí)行程序

如果輸出為:Hello World!   OK,配置完畢,否則,重新檢查。
總結(jié)如下:

安裝路徑:C:\Program Files\Java\j2re1.4.2_13

變量名:java_home
變量值:C:\Program Files\Java\j2re1.4.2_13

變量名:classpath
變量值:
.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar;

變量名:path
變量值:%java_home%\bin
我按照上面的設(shè)置了還是不行,后來到安裝目錄下去看時發(fā)現(xiàn)不知怎么回事lib目錄下的dt.jar和tools.jar文件都不見了
這種問題可能遇到的人比較少吧,不過到現(xiàn)在我還不明白那兩個文件怎么沒有了,我沒有手動刪過。
最后總算成功了。

我也來說兩句 查看全部評論 相關(guān)評論

  • phyan (2006-12-31 01:09:08)

    我覺得對環(huán)境變量的配置還是要仔細(xì)的學(xué)深入一點(diǎn),又找了一些很好的資料貼下來:

    QUOTE:

    背景知識:環(huán)境變量介紹

    環(huán)境變量是操作系統(tǒng)、應(yīng)用程序、腳本程序等等的指明燈,能夠告訴他們需要的資源在哪里。大多數(shù)的系統(tǒng)都有一些預(yù)先設(shè)置好的環(huán)境變量,當(dāng)然,我們也可以增加自己的環(huán)境變量。為了看看當(dāng)前系統(tǒng)的環(huán)境變量,我們可以用如下的命令:
    在Linux/Unix系統(tǒng)上,在shell命令符輸入 env ,然后回車
    在Windows系統(tǒng)中,在DOS窗口提示符輸入 set ,然后回車
    這樣,我們就可以看到系統(tǒng)當(dāng)中的所有環(huán)境變量,如果我們想看看單個變量的值呢?
    在Linux/Unix系統(tǒng)上,在shell命令符輸入 echo $變量名 ,然后回車
    在Windows系統(tǒng)中,在DOS窗口提示符輸入 set 變量 或者 echo %變量%,然后回車
    如果要設(shè)置一個環(huán)境變量,可以用下面的命令:
    在Linux/Unix系統(tǒng)上,在shell命令符輸入 export 變量名="變量值" ,然后回車
    在Windows系統(tǒng)中,在DOS窗口提示符輸入 set 變量名="變量值" ,然后回車
    這樣,就設(shè)置好了。path和classpath環(huán)境變量的值都是一些有順序的目錄列表。告訴系統(tǒng)或者應(yīng)用程序到哪里去尋找它們需要的資源。這個目錄列表是由一系列的分隔符分開的,Linux/Unix系統(tǒng)下分隔符是冒號“:”,windows系統(tǒng)中是分號“;”。如果,我們想在某個已經(jīng)存在的環(huán)境變量值下加一些自己的值的話,可以這樣:
        Linux/Unix系統(tǒng)下: export CLASSPATH=$CLASSPATH:/path/to/program
        Windows系統(tǒng)下: set CLASSPATH = %CLASSPATH%;c:\path\to\program
    ===================================================
    要想方便的開發(fā)和運(yùn)行Java應(yīng)用程序,我們需要設(shè)置兩個環(huán)境變量,一個path一個classpath。
    設(shè)置好path變量,使得我們能夠在系統(tǒng)中的任何地方運(yùn)行java應(yīng)用程序,比如javac、java、javah等等;這就要找到我們安裝JDK的目錄,比如我們的JDK安裝在c:\JDK_1.4.2\目錄下,那么在c:\JDK_1.4.2\bin目錄下就是我們常用的java應(yīng)用程序,我們就需要把c:\JDK_1.4.2\bin這個目錄加到path環(huán)境變量里面。
    classpath環(huán)境變量,是當(dāng)我們在開發(fā)java程序時需要引用別人寫好的類時,要讓java解釋器知道到哪里去找這個類。通常,sun為我們提供了一些額外的豐富的類包,一個是dt.jar,一個是tools.jar,這兩個jar包都位于c:\JDK_1.4.2\lib目錄下,所以通常我們都會把這兩個jar包加到我們的classpath環(huán)境變量中set classpath=.;c:\JDK_1.4.2\lib\tools.jar;c:\JDK_1.4.2\lib\dt.jar。 注意對于jar包,在classpath中
    需要跟上完整地文件路徑,而不能僅僅跟一個目錄。第一個路徑的點(diǎn)“.”,代表當(dāng)前目錄,這樣當(dāng)我們運(yùn)行java AClass
    的時候,系統(tǒng)就會先在當(dāng)前目錄尋找AClass文件了。

    QUOTE:

    Windows下JAVA用到的環(huán)境變量主要有3個,JAVA_HOME、CLASSPATH、PATH。下面逐個分析。
    JAVA_HOME指向的是JDK的安裝路徑,如x:\JDK_1.4.2,在這路徑下你應(yīng)該能夠找到bin、lib等目錄。值得一提的是,JDK的安裝路徑可以選擇任意磁盤目錄,不過建議你放的目錄層次淺一點(diǎn),如果你放的目錄很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX\xxx……
    那么,下面的步驟和以后的應(yīng)用你都要受累了,呵呵。設(shè)置方法:
    JAVA_HOME=x:\JDK_1.4.2  (注:這里是JDK文件夾的絕對路徑)
    PATH環(huán)境變量原來Windows里面就有,你只需修改一下,使他指向JDK的bin目錄,這樣你在控制臺下面編譯、執(zhí)行程序時就不需要再鍵入一大串路徑了。設(shè)置方法是保留原來的PATH的內(nèi)容,并在其中加上%JAVA_HOME%\bin(注,如果你對DOS批處理不了解,你可能不明白%%引起來的內(nèi)容是什么意思;其實這里是引用上一步設(shè)定好的環(huán)境變量JAVA_HOME,你寫成x:\JDK_1.4.2也是可以的;你可以打開一個控制臺窗口,輸入echo %JAVA_HOME%來看一下你的設(shè)置結(jié)果) :
    PATH=%JAVA_HOME%\bin;%PATH%
    注:是增加,絕對不可刪除原有的數(shù)據(jù),并用";"隔開你所加的路徑.
    同樣,%PATH%是引用以前你設(shè)置的PATH環(huán)境變量,你照抄以前的值就行了。
    CLASSPATH環(huán)境變量我放在最后面,是因為以后你出現(xiàn)的莫名其妙的怪問題80%以上都可能是由于CLASSPATH設(shè)置不對引起的,所以要加倍小心才行。
    CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar
    首先要注意的是最前面的".\;",如果你看不清,我給你念念——句點(diǎn)反斜杠分號?!?font color="#0000ff">. ”代表 命令提示符的當(dāng)前目錄(它表示在當(dāng)前目錄里尋找class。如果沒有這個點(diǎn),那么CLASSPATH就不知道去那里尋找HelloWorld.class;把JDK中的lib子目錄,以及其下的tools.jar設(shè)置到CLASSPATH中,才可以在運(yùn)行java程序時加載),這個是告訴JDK,搜索CLASS時先查找當(dāng)前目錄的CLASS文件——為什么這樣搞,這是由于LINUX的安全機(jī)制引起的,LINUX用戶很明白,WINDOWS用戶就很難理解(因為WINDOWS默認(rèn)的搜索順序是先搜索當(dāng)前目錄的,再搜索系統(tǒng)目錄的,再搜索PATH環(huán)境變量設(shè)定的) ,所以如果喜歡盤根究底的朋友不妨研究一下LINUX。
    為什么CLASSPATH后面指定了tools.jar這個具體文件?不指定行不行?顯然不行,行的話我還能這么羅索嘛! 這個是由java語言的import機(jī)制和jar機(jī)制決定的,你可以查資料解決。

    呵呵,具體的設(shè)定方法: win2k\xp用戶右鍵點(diǎn)擊我的電腦->屬性->高級->環(huán)境變量,修改下面系統(tǒng)變量那個框里的值就行了。
    win9x用戶修改autoexec.bat文件,在其末尾加入:
    set JAVA_HOME=x:\JDK_1.4.2
    set PATH=%JAVA_HOME%\bin;%PATH%
    set CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar

    就可以了。
    真正理解上面說的環(huán)境變量設(shè)置的意義后,就可以任意設(shè)置啦:
    如果你的jdk目錄為f:\jdk,那么就新建一個變量JAVA_HOME,值為f:\jdk,classpath前面添加.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
    如果你想用自己的java包,而那些包放在d:\mypackage文件夾中,那么你可以在classpath后添加;d:\mypackage

    QUOTE:

    …………
    問題終于解決了,原因其實很簡單:最近我也在學(xué)習(xí)XML,在學(xué)習(xí)XML的過程中曾經(jīng)安裝了一個用于查看XMl的軟件,而這個軟件在安裝的過程中,自己在我的用戶變量里設(shè)置了一個CLASSPATH變量!就是因為這個小東西害我花了這么長時間:(殺掉?。ê呛?,殺掉它還有點(diǎn)不忍心,因為它是我學(xué)習(xí)XML的好工具?。?其實這可能是我的一個誤區(qū),以前設(shè)置CLASSPATH變量時只知道在系統(tǒng)變量中設(shè)置,不知道在用戶變量里設(shè)置的CLASSPATH變量也可以!于是將自己在系統(tǒng)變量中設(shè)置的CLASSPATH變量刪掉,全部設(shè)到用戶變量的CLASSPATH變量里!打開DOS測試一切通過!

    問題總結(jié):或許這是我我們在學(xué)習(xí)JAVA過程中常常碰到問題,但在這里我要提醒大家的是,以后在設(shè)置CLASSPATH變量時,千萬要注意你以前安裝的軟件是不是自動更改了你的系統(tǒng)變量,如果是那么你在設(shè)置的時候就要注意拉,不要再犯我所犯的同樣錯誤(關(guān)鍵是浪費(fèi)時間)!

    QUOTE:

    Java方面的軟件大部分是開放源碼的,而且多數(shù)是綠色軟件,只要解壓,設(shè)置一下環(huán)境變量即可使用。由于軟件本身升級比較頻繁,經(jīng)常需要重新設(shè)置使用的環(huán)境變量,而且可以同時安裝同一軟件的不同版本(甚至是相同版本)。如eclipse可分別在F, G,H三個盤上裝不同的版本,一個是中文版,一個是英文的Latest Release,一個是Stream Stable,反正是綠色安裝,也不會發(fā)生沖突,這樣通過對比便于了解和測試最新版本的先進(jìn)之處。
    但是假如把JDK版本從1.3升級到1.4,即JDK目錄名可能要從“j2sdk1.3”改為“j2sdk1.4”,如果是這樣的話,那么eclipse 可能會無法再啟動了(它要從環(huán)境變量中尋找JAVA_HOME變量,而JAVA_HOME變量值已經(jīng)從“j2sdk1.3”改為“j2sdk1.4” 了)。
    再談?wù)刯akarta-tomcat,這個軟件升級比較頻繁,如果你是結(jié)合eclipse來使用Tomcat的,那么每次Tomcat升級,可能都要在eclipse中重新設(shè)置一下Tomcat的安裝目錄,是不是有些麻煩?
    對于此類問題,解決的方法很簡單,只要把默認(rèn)的軟件安裝目錄名去掉版本號即可(如果擔(dān)心忘記版本號,只要在目錄中添加一個readme文件加以說明即可)。同樣,在環(huán)境變量設(shè)置中也不出現(xiàn)版本號,這樣,如果再需要升級軟件時,僅僅把新版軟件安裝在舊版軟件目錄即可。其它一般都不需要再改動了。
    另外,在環(huán)境變量設(shè)置中,可以用%變量%代替變量值,如Path變量值可以這樣設(shè)置:  %JAVA_HOME%\bin;%ANT_HOME%\bin;
    另外注意一點(diǎn),上邊“**的用戶變量”是當(dāng)前用戶的環(huán)境變量,只有當(dāng)前用戶可用。下邊“系統(tǒng)變量”所有用戶都可以用。
    建議從http://java.下載其Java Documentation,這是Java幫助文檔。
    以上資料大多是從http://blog.csdn.net 的博客里找到并作了合理的編輯,感謝這些朋友們。
  • phyan (2006-12-31 02:57:24)

    在編寫源代碼時,很多地方不能隨意書寫,對初學(xué)者而言,以下地方要特別注意:
    1.中文和英文。
    在源代碼中,很少使用中文,可以使用的只有兩個地方:一是在輸出語句的引號中,二是在注釋中。
    2.大小寫敏感。
    Java源程序?qū)Υ笮懯欠浅C舾械?,改變大小寫將直接引起錯誤。
    3.括號。
    在Java源代碼中有三種括號,即小括號()、中括號[]和大括號{},三種括號適用于不同情況不能隨便替換,也不能與中文的符號相混淆。
    4.class文件名和相應(yīng)類的名必須一致。如上面的HelloWorld必須使用HelloWorld.java作為文件名,而且大小寫要一致。不然運(yùn)行java Helloworld會出現(xiàn)如下錯誤的:

    QUOTE:

    Exception in thread "main" java.lang.NoClassDefFoundError: Helloworld (wrong nam
    e: HelloWorld)
            at java.lang.ClassLoader.defineClass0(Native Method)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$100(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    另外看到網(wǎng)上兩個比較好的問答:

    QUOTE:

    Q: Applet 怎樣運(yùn)行?
    A: 主要有兩種方法
        1, JDK中的applet瀏覽器。
        2, IE瀏覽器
        這兩種方法都要將Applet嵌入到 HTML 文件中,如
        <applet code="MyApplet.class",width=200 height=150>
        </applet>
        保存在和源文件同目錄下,文件名為xxx.html,如果用JDK中
        的applet瀏覽器看,就在命令提示符下運(yùn)行
        appletviewer xxx.heml
        用IE看直接雙擊 html 文件即可

    Q: 為什么用IE運(yùn)行Applet時,顯示的就是一片空白
    A: IE本身并不支持Applet 的運(yùn)行,要去 www.java. 下載一個插件(java plug_in)
    接下來開始數(shù)據(jù)類型學(xué)習(xí)了

    這個Light.java源程序是用來練習(xí)長整型(long)的整數(shù)類型的,如果把其中的一些變量由long類型改為整型(int),最后的運(yùn)算結(jié)果要出錯的,所以一定要定義合適的數(shù)據(jù)類型。
    //Computer distance light travels using long variables.
    class Light{
            public static void main(String args[]){
                    int lightspeed;
                    long days;
                    long seconds;
                    long distance;

                    //approximate speed of light in miles per second
                    lightspeed = 186000;
                    days = 1000; //specify number of days here
                    seconds = days*24*60*60; //convert to seconds
                    distance = lightspeed*seconds; //compute distance
                    System.out.print("In "+days);
                    System.out.print(" days light will travel about ");
                    System.out.print(distance+" miles.");
            }
    }
    編譯后運(yùn)行結(jié)果如下
    In 1000 days light will travel about 16070400000000 miles.
  • phyan (2007-1-01 22:22:43)

    下面的程序是用雙精度浮點(diǎn)型變量計算一個圓的面積:
    //Computer the area of a circle.
    class Area{
            public static void main(String args[]){
                    double pi,r,a;
                    r=10.8; //radius of circle
                    pi=3.1416;//pi, approxiately
                    a=pi*r*r;//compute area
                    System.out.println("Area of circle is "+a);
            }
    }
    執(zhí)行結(jié)果是:Area of circle is 366.436224
    這里做了兩點(diǎn)測試:
    1.public static void main(String args[]){語句中main和括號之間有無空格都沒問題,和行末的大括號之間有無空格也無所謂,接下來的語句中等號、乘號及句末分號前后空格有無也不影響程序執(zhí)行??偨Y(jié)如下,java對程序代碼中的空格不敏感。
    2.類的名稱把首字母大寫改為小寫也可以;編譯產(chǎn)生的擴(kuò)展名為class的文件名和程序中的類名是嚴(yán)格一致的。無論文件名是Area.java或area.java,javac area.java和javac Area.java均可以正確編譯,但是java Area.java和java area.java是不一樣的,這個一定要嚴(yán)格和xxxx.class一致,否則要出錯。如果不一致會產(chǎn)生如下錯誤信息:
    Exception in thread "main" java.lang.NoClassDefFoundError: area (wrong name: Area)
            at java.lang.ClassLoader.defineClass0(Native Method)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$100(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)
  • phyan (2007-4-11 09:30:48)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多