Java面向物件程式設計-第一個Java程式
Java面向物件程式設計-第一個Java應用
2.1 建立Java原始檔
本章例子包含兩個Java原始檔:Doll.java和AppMain.java
Doll.java
package dollapp; public class Doll { // 成員變數: 福娃的名字 private String name; // 構造方法:設定福娃的名字 public Doll(String name) { this.name = name; } // 成員方法:列印名字 public void speak() { System.out.println(name); } }
在Doll.java檔案中,定義了一個Doll類,它有一個name屬性和speak()方法。Doll.java由以下內容構成。
類的宣告語句:public class Doll{... ...}
- 指明類的名字是Doll
- public修飾符意味著這個類可以被公開訪問。
類的屬性:private String name;
- 表明Doll有一個name屬性,字串型別
- private修飾符意味著這個屬性不能被公開訪問
方法的宣告語句和方法主體:
public void speak(){ System.out.println("name"); // 列印名字 }
- 表明Doll類有一個speak() 方法,不帶引數,返回值型別為void,void表示沒有返回值,public修飾符意味著這個方法可以被公開訪問。
- speak()後面的大括號為方法主體,代表speak()方法的具體實現。
AppMain.java
package dollapp; public class AppMain { public static void main(String[] args) { // 建立五個福娃物件,並設定name屬性 Doll beibei = new Doll("beibei"); Doll jingjing = new Doll("jingjing"); Doll huanhuan = new Doll("huanhuan"); Doll yingying = new Doll("yingying"); Doll nini = new Doll("nini"); // 呼叫福娃物件的成員方法speak() beibei.speak(); jingjing.speak(); huanhuan.speak(); yingying.speak(); nini.speak(); } }
- 在AppMain.java檔案中,定義了一個main()方法,這是java應用程式的入口方法,當執行dollapp時,JVM將從AppMain類的main方法中的程式程式碼開始執行。
2.2.1 Java原始檔結構
一個Java應用包括一個或多個Java原始檔,每個Java原始檔只能包含以下內容:(空格和註釋除外)
- 零個或一個包宣告語句(Package Statement)
- 零個或多個包引入語句(Import Statement)
- 零個或多個類宣告語句(Class Declaration)
- 零個或多個介面宣告 (Interface Declaration)
每個Java原始檔可以包含多個類或介面的定義,但是至多有一個類或介面是公開的。
Java原始檔必須以其中public型別的類的名字命名
2.1.2 包宣告語句
包宣告語句用於把Java類放到特定的包中。
- 在Java原始檔中,最多隻能有一個package語句,但package語句不是必須的。
- package必須位於程式的第一行(忽略註釋行)
- 在同一個Java原始檔中定義的多個Java類或者介面都位於同一個包內。
- 包的作用:
- 能夠區分名字相同的類
- 有助於實施訪問許可權控制。
- 有助於劃分和組織Java應用中的各個類。
- 包的命名規範,包的名字通常採用小寫,包名含有以下資訊:
- 類的建立者或擁有者的資訊
- 類所屬的軟體專案的資訊
- 類在具體軟體專案中的位置
包的命名規範實際上採用類Internet網上的URL命名規範的反轉形式
- JDK提供的Java基本包
- java.lang包: 包含執行緒類(Thread), 異常類(Exception), 系統類(System), 整數類(Integer)和字串類(String)等,這個包是由JVM自動引入的
- java.awt: 抽象視窗工具箱包, AWT(Abstract Window Toolkit),包含用於建立GUI介面的類及繪圖類
- java.io包: 輸入/輸出包, 包含各種輸入流類和輸出流類
- java.util包: 提供一些實用類,如日期類(Date), 集合類(Collection)等
- java.net包: 支援TCP/IP 網路協議,包含Socket類,以及和URL相關的類
除了以上的基本包,JDK還提供了很多其它的包
另外,javax.*是對基本包的擴充套件
JDK中所有的包構成類Java類庫, 或者叫做JavaSE API
2.1.3 包引入語句
如果一個類訪問了另一個包中的類.那麼前者必須通過import語句把這個類引入
import語句不會導致類的初始化
關於包的引入,有以下幾個問題值得注意:
- 如果一個類同時引入兩個來自不同包的同名類,在程式中必須通過類的完整類名來區分這兩個類
- 儘管包名中的"." 能夠體現各個包之間的層次結構,但是每個包都是獨立的,頂層包不會包含子包中的類
- package和import語句的順序是固定的,在Java原始檔中, package語句必須位於第一行(忽略註釋行), 其次是import語句,接著是類或介面的宣告
2.1.4 方法的宣告
在Java語言中,每個方法都屬於特定的類, 方法的宣告必須位於類的宣告之中
方法名是任何合法的識別符號.返回值型別是方法的返回資料的型別,若返回值型別是void,表示沒有返回值.引數列表可以包含零個或多個引數,引數之間用", " 隔開.
如果方法的返回值型別是void, 那麼方法主體中可以沒有return語句,如果有return語句,那麼該語句不允許返回資料;如果方法的返回值不是void,那麼方法主體中必須有return語句,而且return語句必須返回相應資料型別的資料
return語句有兩個作用:
- 結束執行本方法
- 向本方法的呼叫者返回資料
2.1.5 程式入口main()方法的宣告
main()方法是Java程式的入口點,每個Java程式都是從main()方法開始執行的
作為程式入口的main()方法必須同時符合以下4個條件:
- 訪問許可權: public
- 靜態方法: static
- 引數限制: main(String[] args)
- 返回型別: void
args是main方法的引數, 它是一個String型別的陣列,把這個引數叫做其它名字也是可以的
由於static修飾的方法預設都是final型別的(不能被子類覆蓋),所以在main方法前面加上final修飾符也是可以的
2.1.6 給main方法傳遞引數
當用java命令執行Java程式時, 可以在命令列向main方法傳遞引數,格式如下
java classname [args]
2.1.7 註釋語句
在Java原始檔的任意位置, 都可以加入註釋語句,Java編譯器會忽略程式中的註釋語句
Java語言提供了三種形式的註釋:
// text 從"//"到本行結束的所以字元均作為註釋而被編譯器忽略
/* text */ 從"/*" 到"*/" 之間的所有字元會被編譯器忽略
/** text **/ 從"/**" 到"**/"之間的所有字元會被編譯器忽略,當這類註釋出現在任何宣告之前時(如類的宣告,類的成員變數的宣告或者類的成員方法的宣告),會作為JavaDoc文件的內容
2.1.8 關鍵字
Java語言的關鍵字是程式程式碼中的特殊字元
Java語言中的關鍵字包括:
- 用於類和介面的宣告: class extends implements interface enum
- 包引入和包的宣告: import package
- 資料型別: boolean byte char double float int long short
- 某些資料型別的可選值: false true null
- 流程控制: break case continue default do else for if return switch while
- 異常處理: catch finally throw throws try assert
- 修飾符: abstract final native private protected public static synchronized transient volatile
- 操作符: instanceof
- 建立物件: new
- 引用: this super
- 方法返回型別: void
Java語言的保留字是指預留的關鍵字,它們雖然現在沒有作為關鍵字, 但在以後的升級版本中可能會作為關鍵字, Java語言的保留字包括: const和goto
使用Java關鍵字時, 需要注意:
- 所有關鍵字都是小寫
- friendly sizeof不是Java語言的關鍵字
- 程式中的識別符號不能以關鍵字命名
2.1.9 識別符號
識別符號是指程式中包, 類, 介面, 變數或方法的名字
Java語言的識別符號必須符合以下命名規則
- 首字母必須是字母, 下劃線或$
- 識別符號由數字, 大寫字母, 小寫字母, 下劃線以及$等組成
- 不能把關鍵字或保留字作為識別符號
- 識別符號沒有長度的限制
- 識別符號是大小寫敏感的
2.1.10 程式設計規範
在Oracle的技術網站上公佈了Java的程式設計規範, 網址如下:Java程式設計規範
2.2 用JDK管理Java應用
管理Java應用是指建立Java應用的目錄結構, 編譯, 執行,以及釋出Java應用的操作
對於本章的dollapp應用,假定其根目錄為\dollapp,則存在一下目錄結構
- dollapp
- src
- com\abc\dollapp
- doll
- Doll.java
- main
- AppMain.java
- doll
- com\abc\dollapp
- doc
- classes
- com\abc\dollapp
- doll
- Doll.class
- main
- AppMain.class
- doll
- com\abc\dollapp
- deploy
- dollapp.jar
- src
2.2.1 JDK簡介
JDK(Java Development Kitchen),為Java應用程式提供了基本的開發和執行環境,JDK也稱為Java標準開發環境
JDK主要包含以下內容:
- Java虛擬機器:負責解析和執行Java程式, JVM可以執行在各種作業系統平臺上
- JDK類庫: 提供了基本的Java類及各種實用類
- 開發工具: 這些開發工具都是可執行程式, 主要包括:javac.exe(編譯工具), java.exe(執行工具), javadoc.exe(生成JavaDoc文件的工具)和jar.exe(打包工具)等
2.2.2 編譯Java原始檔
javac命令用於編譯Java原始檔
javac命令的格式:
javac [options] [sourcefile]
javac命令的選項
命令選項 | 說明 |
---|---|
-nowarn | 不輸出警告資訊 |
-verbose | 輸出編譯器執行中的詳細工作資訊 |
-deprecation | 輸出源程式中使用了不鼓勵使用(Deprecated) |
-classpath<路徑> | 覆蓋classpath環境變數,重新設定使用者的classpath. |
-sourcepath<路徑> | 指定java原始檔的路徑 |
-d<目錄> | 指定編譯生成的類檔案的存放目錄 |
-help | 顯示各個選項的用法 |
2.2.3 執行Java程式
java命令用於執行Java程式,它會啟動Java虛擬機器,Java虛擬機器載入相關的類,然後呼叫主程式類的main方法
java命令的用法
命令選項 | 說明 |
---|---|
-classpath<路徑> | 覆蓋classpath環境變數,重新設定使用者的classpath |
-verbose | 輸出執行中的詳細工作資訊 |
-D<屬性名=屬性值> | 設定系統屬性 |
-jar | 指定執行某個JAR檔案中的特定Java類 |
-help | 顯示各個命令選項的用法 |
2.2.4 給Java應用打包
JDK的jar命令能夠把Java應用打包成一個檔案,這個檔案的副檔名是.jar
2.3 使用和建立JavaDoc文件
2.3.1 JavaDoc文件
在構成JavaDoc文件的註釋中, 可以使用JavaDoc標記類描述作者, 版本, 方法引數和方法返回值等資訊
JavaDoc標記 | 描述 |
---|---|
@version | 指定版本資訊 |
@since | 指定最早出現在那個版本 |
@author | 指定作者 |
@see | 生成參考其它JavaDoc文件的連結 |
@link | 作用同上, 區別在於@link可以嵌入到註釋中,為註釋語句特定詞彙生成連結 |
@deprecated | 用來標明被註釋的類,變數方法已經不提倡再使用,在將來的版本中有可能會被廢棄 |
@param | 描述方法帶引數 |
@return | 描述方法的返回值 |
@throw | 描述方法丟擲的異常,指明丟擲異常的條件 |
2.4 Java虛擬機器執行Java程式的基本原理
- 把.class檔案中的二進位制資料載入到記憶體中
- 對類的二進位制資料進行驗證
- 解析並執行指令