類的專題研究

類的專題研究

Java中有一個比較特殊的類,Object類,它是所有類的父類,所有的類默認繼承Object類,Object類中的所有方法適用於所有的類。

Object中只有一個toString()方法,此方法是在打印對象時被調用的。

內部類
在類內部也可以定義另一個類叫做內部類,而外部的類叫做外部類。
內部類可聲明public和private。對其訪問的限制與成員變量和成員方法完全相同。

內部類的定義方法如下:
標識符 class 內部類的名稱
{
//外部類的成員
標識符 class 內部類的名稱
{
//內部類的成員
}
}

內部類可以直接調用外部類的成員屬性,如果將內部類拿到外面單獨聲明,那麼這個類要使用外部類的成員屬性就得先對外部類進行實例化。
注:不建議使用內部類
外部類不能訪問內部類所聲明的屬性,但是內部類可以訪問外部類的屬性。

用static聲明內部類就將內部類變成了外部類,但是用static聲明的內部類不能訪問非static的外部類的屬性成員。

內部類也可以通過創建外部類之外被調用,只要將內部類聲明爲public即可。
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Inner.display();

內部類不僅可以在類中定義,還能再方法中定義。
在方法中定義的內部類只能訪問方法中的final類型的局部變量,因爲用final定義的局部變量相當於一個常量,它的生命週期超出方法運行的生命週期。

匿名內部類
內部類可以繼承一個抽象類和實現一個接口.

interface A
{
	public void fun1();
	get(A a) 
	{
		a.fun1();
	});
}
get(new A() )
{
	public void fun1()
	{
		System.out.println(i);	//i是類變量,這裏實現接口
	} 
}

程序實現了接口中的方法,並把整個的一個實現類傳遞到了方法get()中,這就是匿名內部類,它不用聲明實質上的類就可以使用。

匿名對象
匿名對象就是沒有明確聲明的對象,可理解爲只使用一次的對象,即沒有一個具體的對象名稱引用它。
例子:println( new Preson().talk() );
可以看出該聲明並沒有具體賦給任何一個Preson類對象的引用,所以此對象只使用了一次,之後會被java的垃圾收集器回收。

覆寫Object 類中的equals方法
Object類中存在有個equals方法,比較對象是否相等,且必須被覆蓋。對象存儲的內容放在不同的內存空間中,指向了不同的內存地址,實際上調用的是Object類中的equals方法。所以在開發過程中往往需要在類中覆寫equals方法。
if(object instanceof Person)
{
// 如果是Preson類的實例,則向下轉型,如Preson p = new Student();
Person p = (Preson)object;
// 再進行字段的比較equals;

}

接口對象的實例化
接口是無法直接實例化的,因爲接口沒有構造方法,但是可以根據對象多態性的概念,通過接口的子類對其進行實例化。

interface Preson()
{
	public void fun1();
}
class Student implements Preson
{
	public void fun1()
	{
		printf(1);	//繼承接口就得實現接口的方法
	}
}
class Test
{
	public static void main(String[] args)
	{
		Person p = new Student();	//實例化接口的子類,再賦給接口的變量,實例化接口
		p.fun1();
	}
} 

接口實際上定義了一個統一的標準。

this關鍵字的使用
this強調對象本身,是指調用類中方法或屬性的那個對象。
可以使用this()來用某一個構造方法調用另一個構造方法。

static關鍵字的使用
static關鍵字聲明靜態變量和方法。
static聲明的屬性是所有對象共享的,即所有的對象共享內存空間。
用static類型的屬性可以在構造方法中加入計數操作。

靜態方法
也可以稱爲“類方法”。
靜態方法的使用不需要實例化就可以直接使用,因爲系統爲靜態方法分配了一塊靜態存儲區域,直到程序結束纔會釋放。
static聲明的屬性可以在非static類型的方法中使用,而非static聲明的屬性不可以在static類型的方法中使用。

main()方法
由於Java虛擬機需要調用類的main()方法,所以main()方法必須是public。又因爲Java虛擬機在執行main()方法時不必創建對象,所以該方法就必須是static的,該方法接收一個String類型的數組參數,該數組中保存執行Java命令時傳遞給所運行的類的參數。

靜態代碼塊
一個類可以使用不包括在任何方法中的靜態代碼塊,當類被載入時,靜態代碼塊會首先被執行,且只執行一次。靜態代碼塊經常用來進行類屬性的初始化。

final關鍵字的使用
在Java中聲明類、屬性和方法時,可使用關鍵字final來修飾。
(1)final標記的類不能被繼承。
(2)final標記的方法不能被子類覆寫。
(3)final標記的變量(成員變量或局部變量)即爲常量,只能賦值一次。
instanceof關鍵字的使用
可以用instanceof判斷一個類是否實現了某個接口,也可以用它判斷一個實例是否屬於一個類。格式如下:
對象instanceof類(或接口),返回值爲布爾型數值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章