1. 程式人生 > 實用技巧 >Java面向物件程式設計-第一個Java程式

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類或者介面都位於同一個包內。
  1. 包的作用:
  • 能夠區分名字相同的類
  • 有助於實施訪問許可權控制。
  • 有助於劃分和組織Java應用中的各個類。
  1. 包的命名規範,包的名字通常採用小寫,包名含有以下資訊:
  • 類的建立者或擁有者的資訊
  • 類所屬的軟體專案的資訊
  • 類在具體軟體專案中的位置

包的命名規範實際上採用類Internet網上的URL命名規範的反轉形式

  1. 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
    • doc
    • classes
      • com\abc\dollapp
        • doll
          • Doll.class
        • main
          • AppMain.class
    • deploy
      • dollapp.jar
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檔案中的二進位制資料載入到記憶體中
  • 對類的二進位制資料進行驗證
  • 解析並執行指令