黑馬程式設計師----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
{
{
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,不能拋