1. 程式人生 > >初學Java(九)

初學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])->表示式