天天看點

iGEM賽前準備06——JAVA淺嘗

面向對象語言的三大特性:封裝、繼承、多态

确切地說,那些沒有聲明成static的部分,才是對象的原型。

(static的被稱為類變量和類方法,由屬于該類的所有對象共享)

對象中的變量,稱為“屬性”或"執行個體變量"。

實作各種行為的過程和函數,稱為"方法"。

建立對象執行個體

如果不使用new的話,隻有對象的引用(也就是指針)而沒有配置設定記憶體空間。

Student jolin = new Student();
Student jolin = new Student("Jolin","female",160,21);//構造函數
           

類的繼承

class 子類名稱 extends 父類名稱
           

Java子類不能繼承父類的構造函數。

重寫(或覆寫):即子類中的同名函數會取代父類的執行個體方法。

不過,對于父類中的類方法,子類想要覆寫它必須也将該同名函數定義為類方法來取代它,稱為“隐藏”。

隐藏父類的成員變量

隻要變量名稱相同,就算資料類型不同,也一樣可以隐藏父類的成員變量。

如何在子類中,使用父類的構造函數、被重寫的方法、被隐藏的成員變量?

super.xxx(父類中的函數名)
           

接口

隻有常量和抽象方法(隻有聲明,沒有實作)。

寫法:

IArea是一個接口,類使用implements實作接口。

接口也可以不止一個,用逗号分隔。

常量類型:

final

interface IArea{
	final double PI = 301415926;
	void area();
}

class Circle implements IArea{
	public void area(){
		//計算圓面積
	}
}
           

接口也可以繼承。

在Java中,類不允許多重繼承(表示父類不止一個),但卻允許接口的多重繼承。

接口一定是抽象類。

抽象類

除了有抽象方法,也可以有屬性(變量)和操作。

寫法:

abstract class Account{
	private string id;
	private double amount;
	public abstract void calInterest();//抽象方法
	double getBalance(){...};//抽象類中也可以有操作
}
           

抽象類可以用來作為資料類型,聲明引用子類的對象變量。

因為父類的對象變量可以引用子類的對象。(也就是父類的指針可以指向子類吧。)

比如:

Java可以同時繼承抽象類且實作接口

常量類

避免繼承,防止子類通路和重寫

嵌套類

嵌套類的特點

  • 成品和零件的關系
  • 嵌套類也是外層類的成員
  • 擁有相同的通路權限

    在Java程式檔案中隻允許有一個public的類,而且程式檔案名需與此類名相同。

匿名嵌套類,通常用于Java的Swing開發和Android接口元件的事件處理。

使用類繼承來實作多态

動态綁定

多個子類實作同一抽象方法,在調用時根據對象的類型決定實際調用的方法。

即namespace,在Java中稱作packages。

packages是一組相關類和接口的集合,簡單來說,包是面向對象程式設計的零件庫,程式開發者可以直接選用包中現成的各種類零件,組合零件來建立對象集合,完成Java應用程式的開發。

建立包

package xxx.myShape;
           

導入包和類

import xxx.myShape.Circle;//導入Circle類
import xxx.myShape.* //導入整個包(含包中的所有類)
           

異常處理

在Java程式執行時産生的異常是一個對象,屬于Thorwable類或其子類的執行個體對象。兩種子類如下:

  • Error類:嚴重錯誤,會導緻程式終止運作,無法使用異常處理
  • Exception類:可以進行補救
try{
	//檢查是否産生異常對象,抛出
	...
}
catch(ExceptionType e){
	//(抛出異常後才執行的)異常處理
	...
}
finally{
	//可有可無,主要是進行程式善後
	//不論異常是否産生都會執行
	...
}
           

可以用多個catch同時處理多種類型的異常。

集合對象

舊版Java中主要指 Vector和Hashtable對象。

JDK 1.2後的版本提供Java Collections Framework(集合架構),這是儲存和處理集合對象的統一軟體架構。

泛型

類似C++的templates

提供編譯階段的集合對象類型檢查功能,可以減少程式代碼中取出集合對象所需的大量類型轉換。

寫法

使用泛型

HashSet<Byte> hset0 = new HashSet<Byte>();
HashSet<Float> hset0 = new HashSet<Float>();
HashSet<String> hset0 = new HashSet<String>();
           

Java SE7 支援下,可以簡寫為