初學Java(九)
這一次的部落格會介紹有關內部類方面的知識點,以下是內容: 內部類:指在一個外部類內定義的類 分類: 有名內部類; 匿名內部類:匿名內部類由於沒有類名而不能單獨存在,定義匿名內部類的同時必須直接例項化該類,語法格式如下: new 父類構造器([引數列表])|介面(){ 匿名內部類類體 } 種類: 普通類:普通類匿名內部類實質為普通類的子類 抽象類:抽象類匿名內部類實質為抽象類的子類 介面:介面匿名內部類的實質為介面的實現類 特點: 1.匿名內部類一定是介面的實現類(該實現類僅能實現一個介面)或類(普通類或抽象類)的子類 2.匿名內部類不能有構造方法,但是可以通過非靜態程式碼塊初始化成員變數 3.匿名內部類一定不能是抽象類 4.可以在匿名內部類中新增新的屬性和方法,但是這些屬性和方法不能被上轉型物件所呼叫,只能被非上轉型 物件方式建立的匿名內部類物件所呼叫 靜態內部類:按照是否有static修飾分為靜態內部類和非靜態內部類,有static修飾的為靜態內部類,沒有static修飾的為非靜態內部類 靜態有名內部類 靜態匿名內部類 注: 1.如果static內部類只能直接定義在外部類中; 2.靜態內部類僅能直接訪問外部類的靜態成員變數和方法,但可以通過建立外部類的物件間接使用非靜態的成員變數和方法 3.在非外部類中定義的內部類和區域性變數一樣,其使用範圍從定義的位置開始到其所在直接語句塊結束 4.只有有名靜態內部類中才允許有靜態變數(屬性、程式碼塊、方法)
特點: 內部類特點: 內部類是一個獨立的類:編譯之後內部類會被編譯成獨立的.class檔案,如果該內部類為有名內部類,則有名內部類位元組碼檔名為外部類的類名+$+內部類類名;如果為匿名內部類,則匿名內部類位元組碼檔名為外部類的類名+$+數字; 普通外部類、抽象類和介面可以有內部類(匿名的或有名的); 內部類可以直接定義在類中,也可以定義在方法或程式碼塊中;其中直接定義在外部類中的內部類可以有public、protected、預設的和private四種訪問許可權修飾(普通外部類、介面和抽象類只能使用public和default修飾),也可以使用static修飾( static不能修飾普通外部類、介面和抽象類);但是定義在方法或程式碼塊中的內部類不能有訪問修飾符修飾,也不能有static修飾。 內部類可以訪問外部類的所有訪問許可權的成員變數
Lambda表示式: 作用:簡化了函式式匿名內部類的語法; 其表示式語法如下:([引數1], [引數2], [引數3],.... [引數n])->{程式碼塊} 應用: 1.如果方法沒有返回值且只有一行程式碼,則Lambda表示式語法可以是這種形式:([引數1], [引數2], [引數3],.... [引數n])->單行語句 2.如果方法有返回值且只有一行程式碼,則Lambda表示式語法可以是這種形式:([引數1], [引數2], [引數3],.... [引數n])->表示式