1. 程式人生 > >黑馬程式設計師----Java基礎之面向物件(最終篇)

黑馬程式設計師----Java基礎之面向物件(最終篇)

------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a>、期待與您交流! ---------

object類

Object:是所有物件的直接或者間接父類,傳說中的上帝

該類中定義的肯定是所有物件都具備的功能

equals方法:比較的是地址值

任何物件都具有比較性

class Demo
{
}
class  BroadTest
{

public static void main(String[] args) 
{
Demo d1 = new Demo();
Demo d2 = new Demo();


boolean b = d1.equals(d2);
System.out.println("b="+b);
}
}

執行結果為b=false;

equals比較的是d1和d2的地址值

如果想要自定義比較方法,可以複寫Object類中的equals方法

內部類

將一個類定義在另一個內的裡面,對裡面那個內就稱之為內部類(內建類,巢狀類).

訪問特點:

內部類可以直接訪問外部類中的成員,包括私有成員.

而外部類要訪問內部類中的成員必須要建立內部類的物件

內部類練習


訪問格式:

當內部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中.可以直接建立內部類物件

格式:外部類名.內部類名  變數名 = 外部類物件.內部類物件;

但內部類在成員位置上,就可以被成員修飾符修飾

比如:private:將內部類在外部內中進行封裝.

static:內部類就具備static的特性

當內部類被static修飾後,只能訪問外部類中static成員,出現了訪問許可權

注意:當內部類定義了靜態成員,該內部類必須是靜態的,當外部類中的靜態方法訪問內部類時,內部類也必須是靜態的

當描述事物時,事物內部還有事物,該事物用內部類來描述,因為內部事務在使用外部事物的內容

內部類定義在區域性時

不可以被成員修飾符修飾

可以直接訪問外部類中的成員,因為還持有外部類中的引用,但是不可以訪問他所在的區域性中的變數,只能訪問被final修飾的區域性變數

區域性內部類不能定義靜態成員,因為靜態不能修飾區域性成員

匿名內部類:

匿名內部類其實就是內部類的簡寫格式

定義匿名內部類的前提:內部類必須是繼承一個類或者實現介面

匿名內部類的格式:new 父類或者介面(){定義子類內容}

其實匿名內部類就是一個匿名子類物件.而這個物件有點胖.可以理解為帶內容的物件.

匿名內部類中定義的方法最好不要超過三個

內部類的示例:


匿名內部類的擴充套件應用


異常:

是什麼?是對問題的描述.將問題進行物件的封裝.

異常體系:

Throwable分為Error和Exception(RunnableException)

異常體系的特點:異常體系中的所有類以及建立的物件都具備可拋性,也就是收,可以被throw和throws關鍵字所操作,只有異常體系具備這個特點

throw和throws的用法

throw的那個一在函式內,用於丟擲異常

throws定義在函式上,用於丟擲異常類,可以丟擲多個,用逗號隔開

當函式內容有throw丟擲的異常物件,並未進行try處理,必須要在函式上宣告,否則編譯失敗

注意:RuntimeException除外,也就是說,函式內如果丟擲的是RuntimeException異常,函式上可以不用宣告;

如果聲明瞭異常,呼叫者需要進行處理.處理方法可以throw可以try

異常有兩種

編譯時檢測異常

該異常在編譯時,如果沒有處理(沒有丟擲也沒有try),編譯失敗

該異常被標識,代表可以被處理

執行時異常(編譯時不檢測)

在編譯時,不需要處理,編譯器不檢查

該異常的發生,建議不處理,讓程式停止,需要對程式碼進行修正

異常的處理語句

try
{
需要被檢測程式碼
}
catch ()
{
處理異常程式碼
}
finally
{
一定會執行的程式碼
}

try
{

}
catch ()
{
}

try
{

}
finally
{
}

注意:finally中定義的通常是 關閉資原始碼.因為資源必須釋放

finally只有一種情況不會執行.當執行到System.exit(0);finally不會執行

自定義異常

定義類繼承Exception或者RuntimeException

為了讓該自定義類具備可拋性

讓該類具備操作異常的共性方法.

當要定義自定義異常的資訊時,可以使用父類已經定義好的功能

異常資訊傳遞給父類的建構函式.

class MyException extends Exception

{

MyException(String msg)

{

super(msg);

}

}

自定義異常是按照Java的面向物件思想,將程式中出現的特有問題進行封裝.

異常的好處

將問題進行封裝

將正常程式碼和問題程式碼相分離,方便於閱讀

異常的處理原則:

處理方式有兩種,try或者throws

呼叫到丟擲異常的功能時,丟擲幾個,就處理幾個,一個try對應多個catch

多個catch,父類的catch放到最下面

catch內,需要定義針對性的處理方式,不要簡單的定義printStackTrace,輸出語句,也不要不寫

當捕獲到的異常,處理不了時,可以繼續在catch中丟擲

try 

{

throw new AException();

}

catch(AException e)

{

throw e;

}

如果該異常處理不了,但並不屬於該功能出現的異常, 可以將異常轉換後,再丟擲和該功能相關的異常

或者異常可以處理,當需要將異常產生的和本功能相關的問題提供出去,當呼叫者知道.並處理,也可以將捕獲異常處理後,轉換新的異常

try
{
throw new AException();
}
catch (AException e)
{
throw new BException();
}

異常的注意事項:

在子父類覆蓋時:

子類丟擲的異常必須是父類異常的子類或者子集

如果父類或者介面沒有異常丟擲時,子類覆蓋出現異常,只能try,不能拋