二級(jí)Java考試輔導(dǎo)教程:1.5java程序規(guī)范[1]

字號(hào):

1.5 java程序規(guī)范
    1.5.1 java源程序結(jié)構(gòu)
    一個(gè)完整的java源程序應(yīng)該包括下列部分:
    package語句; //該部分至多只有一句,必須放在源程序的第一句
    import語句; /*該部分可以有若干import語句或者沒有,必須放在所有的
         類定義之前*/
    public classDefinition; //公共類定義部分,至多只有一個(gè)公共類的定義
      //java語言規(guī)定該java源程序的文件名必須與該公共類名完全一致
    classDefinition; //類定義部分,可以有0個(gè)或者多個(gè)類定義
    interfaceDefinition; //接口定義部分,可以有0個(gè)或者多個(gè)接口定義
    例如一個(gè)java源程序可以是如下結(jié)構(gòu),該源程序命名為HelloWorldApp.java:
    package javawork.helloworld; /*把編譯生成的所有.class文件放到包
                  javawork.helloworld中*/
    import java.awt.*;  //告訴編譯器本程序中用到系統(tǒng)的AWT包
    import javawork.newcentury; /*告訴編譯器本程序中用到用戶自定義
                 的包javawork.newcentury*/
    public class HelloWorldApp{......} /*公共類HelloWorldApp的定義,
                     名字與文件名相同*/
    class TheFirstClass{......} //第一個(gè)普通類TheFirstClass的定義
    class TheSecondClass{......} //第二個(gè)普通類TheSecondClass的定義
             ...... //其它普通類的定義
    interface TheFirstInterface{......} /*第一個(gè)接口
                     TheFirstInterface的定義*/
                ...... //其它接口定義
    package語句:由于java編譯器為每個(gè)類生成一個(gè)字節(jié)碼文件,且文件名與類名相同,因此同名的類有可能發(fā)生沖突。為了解決這一問題,java提供包來管理類名空間,包實(shí)際提供了一種命名機(jī)制和可見性限制機(jī)制。而在java的系統(tǒng)類庫中,把功能相似的類放到一個(gè)包(package)中,例如所有的圖形界面的類都放在java.awt這個(gè)包中,與網(wǎng)絡(luò)功能有關(guān)的類都放到j(luò)ava.net這個(gè)包中。用戶自己編寫的類(指.class文件)也應(yīng)該按照功能放在由程序員自己命名的相應(yīng)的包中,例如上例中的javawork.helloworld就是一個(gè)包。包在實(shí)際的實(shí)現(xiàn)過程中是與文件系統(tǒng)相對(duì)應(yīng)的,例如javawork.helloworld所對(duì)應(yīng)的目錄是path\javawork\helloworld,而path是在編譯該源程序時(shí)指定的。比如在命令行中編譯上述HelloWorldApp.java文件時(shí),可以在命令行中敲入"javac -d f:\javaproject HelloWorldApp.java",則編譯生成的HelloWorldApp.class文件將放在目錄f:\javaproject\javawork\helloworld\目錄下面,此時(shí)f:\javaprojcet相當(dāng)于path。但是如果在編譯時(shí)不指定path,則生成的.class文件將放在編譯時(shí)命令行所在的當(dāng)前目錄下面。比如在命令行目錄f:\javaproject下敲入編譯命令"javac HelloWorldApp.java",則生成的HelloWorldApp.class文件將放在目錄f:\javaproject下面,此時(shí)的package語句相當(dāng)于沒起作用。 來源:www.examda.com
    但是,如果程序中包含了package語句,則在運(yùn)行時(shí)就必須包含包名。例如,HelloWorldApp.java程序的第一行語句是:package p1.p2;編譯的時(shí)候在命令行下輸入"javac -d path HelloWorldApp.java",則HelloWorldApp.class將放在目錄path\p1\p2的下面,這時(shí)候運(yùn)行該程序時(shí)有兩種方式:
    第一種:在命令行下的path目錄下輸入字符"java p1.p2.HelloWorldApp"。
    第二種:在環(huán)境變量classpath中加入目錄path,則運(yùn)行時(shí)在任何目錄下輸入"java p1.p2.HelloWorldApp"即可。
    import語句:如果在源程序中用到了除java.lang這個(gè)包以外的類,無論是系統(tǒng)的類還是自己定義的包中的類,都必須用import語句標(biāo)識(shí),以通知編譯器在編譯時(shí)找到相應(yīng)的類文件。例如上例中的java.awt是系統(tǒng)的包,而javawork.newcentury是用戶自定義的包。比如程序中用到了類Button,而Button是屬于包java.awt的,在編譯時(shí)編譯器將從目錄classpath\java\awt中去尋找類Button,classpath是事先設(shè)定的環(huán)境變量,比如可以設(shè)為:classpath=.;d:\jdk1.3\lib\。 classpath也可以稱為類路徑,需要提醒大家注意的是,在classpath中往往包含多個(gè)路徑,用分號(hào)隔開。例如classpath=.;d:\jdk1.3\lib\中的第一個(gè)分號(hào)之前的路徑是一個(gè)點(diǎn),表示當(dāng)前目錄,分號(hào)后面的路徑是d:\jdk1.3\lib\,表示系統(tǒng)的標(biāo)準(zhǔn)類庫目錄。在編譯過程中尋找類時(shí),先從環(huán)境變量classpath的第一個(gè)目錄開始往下找,比如先從當(dāng)前目錄往下找java.awt中的類Button時(shí),編譯器找不著,然后從環(huán)境變量classpath的第二個(gè)目錄開始往下找,就是從系統(tǒng)的標(biāo)準(zhǔn)類庫目錄d:\jdk1.3\lib開始往下找java.awt的Button這個(gè)類,最后就找到了。如果要從一個(gè)包中引入多個(gè)類則在包名后加上".*"表示。