比亞迪 F5 DM-i 內飾諜照曝光,採用懸浮式液晶儀表和中控屏設計,告別迷你屏
內部類
內部類在編譯後也會生成一個class檔案,檔名為:
外部類名$內部類名.class
內部類與外部類的關係只在編譯時有效,編譯結束後內部類和外部類不再有包含關係。
成員內部類:
定義在外部類的成員(屬性、方法)位置
可以使用四種訪問許可權修飾符修飾內部類
可以在內部類的內部定義屬性和方法
\
內部類可以有和外部類重名的屬性和方法,內部類物件優先訪問自己的屬性和方法。
內部類物件訪問外部類物件的屬性和方法,可以使用:
外部類名.this.外部類屬性
外部類名.this.外部類方法(引數)
System.out.println( Outer.this.a );
成員內部類能不能定義靜態屬性?
成員內部類屬於外部類物件
類的靜態屬性先於物件被建立
內部類靜態屬性被建立時還沒有外部類物件
因此成員內部類不能有靜態屬性或方法。
靜態內部類:
使用static修飾符修飾的成員內部類
建立靜態內部類的物件不需要建立外部類物件
只能訪問外部類靜態的屬性或方法
class Outer { private int a = 10; private static int b = 20; public static class Inner { public void print( ) { System.out.println(a);//編譯出錯 System.out.println(b); } } } //只能訪問靜態屬性
區域性內部類:
方法內部定義的內部類
作用範圍等同於區域性變數
不能在作用範圍以外建立物件
可以訪問外部類的屬性和方法
class Outer { private int a = 10; public void m1( final int b ) { class Inner{ public void m1( ) { System.out.println(a); System.out.println(b); } } } }
區域性內部類、方法的形參和區域性變數在方法結束後都會消失,但是區域性內部類的物件不會消失,所以如果區域性內部類的物件訪問的形參和區域性變數必須使用final修飾符修飾。
JDK1.8取消了此限制。
、
使用類、抽象類和介面可以建立匿名內部類,匿名內部類相當於在方法中宣告的區域性內部類,只是沒有名字,只知道它的父類或實現的介面的名字。
如果父類或實現的介面中有抽象方法,則匿名內部類必須實現所有的抽象方法。
使用匿名內部類的條件:
特殊的區域性內部類,所有區域性內部類的特徵匿名內部類全有
必須知道它的父類或實現的介面
只建立該類的一個物件
匿名內部類能不能定義構造方法?
匿名內部類不知道類名,所以不能定義構造方法,只能使用預設無參的構造方法。
Lambda表示式
匿名內部類新寫法(JDK8)-Lambda表示式
思考:為什麼使用Lambda表示式
Lambda表示式是一個匿名函式,我們可以把Lambda表示式理解為一段可以傳遞的程式碼(將程式碼像資料一樣傳遞)。使用它可以寫出更簡潔、更靈活的程式碼。作為一種更緊湊的程式碼風格,使Java的語言表達能力得到了提升。
Lambda表示式的使用
1.舉例 如上
2.格式 -> :Lambda表示式操作符 或箭頭操作符 ->左邊 :形參列表(介面中抽象方法的形參列表) ->右邊:Lambda體(重寫抽象方法的方法體)
3.Lambda實質:作為介面的例項
4.Lambda使用如下情況:
例項1: