一、內部類訪問規則
1、內部類定義:
A、內部類可以直接存取外部類中的成員,包括私人。之所以可以直接存取外部類中的成員,是因為內部類中持有了一個外部類的引用,格式:外部類名.this。
B、外部類要訪問內部類,必須建立內部類對象。格式:
外部類名.內部類名 變數名 = 外部類對象.內部類對象;
Outer.Inner in = new Outer().new Inner();
2、當內部類在成員變數上,就可以被成員變數修飾符所修飾。
比如:private,將內部類在外部類中進行封裝。
static,內部類就具備static的特性。當內部類被static修飾後,只能直接存取外部類中的static成員,出現了訪問局限。
在外部其他類中,直接存取static內部類的非靜態成員:new Outer.new Inner().function();
在外部其他類中,直接存取static內部類的靜態成員:Outer.Inner.function();
3、當內部類中定義了靜態成員,該內部類必須是靜態類。
當外部類中的靜態成員要訪問內部類時,該內部類必須為靜態類。
class Outer{ private int x = 3; class Inner{ int x = 4; void function(){ int x =6; System.out.println("inner:"+Outer.this.x); } } void method(){ Inner in = new Inner(); in.function(); }}public class InnerClassDemo01{ public static void main(String[] args){ Outer out = new Outer(); out.method(); //直接存取內部類中的成員 Outer.Inner in = new Outer().new Inner(); in.function(); } }
二、匿名內部類
1、匿名內部類其實就是內部類的簡寫格式。
2、定義匿名內部類的前提:內部類必須是繼承一個類或者實現介面。
3、匿名內部類的格式:new 父類或者介面(){定義子類的內容}
4、匿名內部類就是一個匿名子類對象,而且這個對象有點胖。
5、匿名內部類中定義的方法最好不要超過3個。
使用匿名內部類時,要記住以下幾個原則:
·匿名內部類不能有構造方法。??
·匿名內部類不能定義任何靜態成員、方法和類。??
·匿名內部類不能是public,protected,private,static。??
·只能建立匿名內部類的一個執行個體。
·一個匿名內部類一定是在new的後面,用其隱含實現一個介面或實現一個類。??
·因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效。
·內部類只能訪問外部類的靜態變數或靜態方法。
interface Inter{ void method();}class InterImpl implements Inter{ public void method(){ System.out.println("hello world!!"); }}public class InnerDemo{ public static void main(String[] args){ InterImpl impl = new InterImpl(); show(impl); } public static void show(Inter abc){ abc.method(); }}
三、異常
1、異常定義:異常就是程式在運行時出現不正常情況。
異常由來:問題也是現實生活中一個具體的事物,也可以通過java的類的形式進行描述,並封裝成對象。其實就是java對不正常情況進行描述後的對象體現。
對於問題的劃分:一種是嚴重的問題,一種是非嚴重的問題。
對於嚴重的:java通過Error進行描述。對於Error一般不編寫針對性的代碼對其進行處理。
對於非嚴重的:java通過Exception類進行描述。對於Exception可以使用針對性的處理方式進行處理。
無論Error或者Exception都具有一些共性內容,比如:不正常情況的資訊,引發原因等。
Throwable
|---Error
|---Exception
|---RuntimeException
|---非RuntimeException
2、異常的處理
java提供了特有的語句進行處理。
try{
需要被檢測的代碼;
}catch(異常類 變數名){
處理過程;
}finall{
一定會啟動並執行語句;
}
對多異常的處理:
聲明異常時,建議聲明更為具體的異常,這樣處理的可以更具體。
對於聲明幾個異常就對應幾個catch塊,不要定義多餘的catch塊。如果多個catch塊中的異常出現繼承關係,父類異常catch塊放在最下面。
在進行catch處理時,catch處理語句中一定要定義具體處理方式,不要簡單定義一句e.printStackTrace(),也不要簡單的就書寫一條輸出語句。可以將異常寫入日誌異常檔案。
3、異常的拋出:throws在方法體後面拋出。
4、自訂異常類
自訂異常類:因為項目中會出現特有的問題,而這些問題並未被java所描述並封裝成對象,所以對於這些特有的問題可以按照java的對問題的封裝的思想將特有的問題進行自訂的異常封裝。
當在函數內部出現了throw拋出異常對象,那麼就必須要給對應的處理動作,要麼在內部try catch處理,要麼在函數上聲明讓調用者處理。一般在函數內出現異常,函數上需要聲明.
繼承Exception原因:
異常體系有一個特點,因為異常類和異常對象都被拋出。這個可拋性是Throwable這個體系中專屬特點。
只有這個體系中的類和對象蔡可以被throws和throw操作。
5、throws和throw的區別
throws使用在函數上;throw使用在函數內。
throws後面跟的異常類,可以跟多個,用逗號隔開;throw後面跟的是異常對象。
6、繼承Exception、RuntimeException。
5、finally
一定會執行的代碼塊。
四、包
包的四種存取權限。
總結:
1、內部類、匿名內部類(直接聲明方法、定義對象);
2、異常體系,注意RuntimeException。