JAVA教程第一講Java語言概述1.5

字號:

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