如果你是Spring Boot用戶的話,一定有這樣的開發體驗,當我們要引入某個功能的時候,只需要在maven或gradle的配置中直接引入對應的Starter,馬上就可以使用了,而不需要像傳統Spring應用那樣寫個xml或java配置類來初始化各種Bean。 如果你有探索過這些Starter的原理 ...
轉發:
http://www.java265.com/JavaCourse/202204/3129.html
下文筆者講述Java內部類的簡介說明,如下所示:
內部類的簡介
我們將在其他類中的類稱之為“內部類”
內部類的定義位置:
定義在類中方法外的類
成員內部類可以使用不同的修飾關鍵字進行修飾,不同的修飾關鍵字會生成不同的訪問方式
內部類的定義方法
class 外部類 { // 外部類的成員位置 class 內部類{ // 內部類的成員位置 } }
例:內部類定義
class Person { //外部類 String name; class Heart { //內部類 // 成員 } }
創建內部類對象的方法
外部類 外部類對象名 = new 外部類(); 外部類.內部類 內部類對象名 = 外部類對象名.new 內部類(); 簡寫方式: 外部類名.內部類名 對象名 = new 外部類型().new 內部類型();
//外部類 class Outer { // 外部類成員變數 private String outer_filed = "我是外部類成員變數"; //成員內部類 class Inner { // 內部類成員變數 private String inner_filed = "我是內部類成員變數"; //內部類的成員方法 public void inner_method() { System.out.println("inner_method....run... " + inner_filed ); } } // 外部類成員方法 public void outer_method(){ System.out.println("outer_method....run... " + outer_filed ); } } // 測試類 public class InnerDemo { public static void main(String[] args) { // 創建外部類對象 Outer o = new Outer(); // 創建內部類對象 Outer.Inner i = p.new Inner();//表示通過外部類對象創建內部類對象 // 調用外部類方法 i.outer_method(); // 調用內部類方法 i.inner_method(); } }
註意事項:
內部類是一個獨立的類
編譯之後的內部類會被編譯成獨立的.class文件,類的名稱會使用“類名和$符號”組成
例:Outer$Inner.class
註意事項:
1.當一個內部類被私有化後,這個內部類就無法在外部進行訪問
2.私有成員的內部類也是外部類的成員
3.外部類可以訪問私有成員方法,本類之外無法訪問
4.私有成員內部類,只能在外部類中其他成員方法中創建成員內部類對象,通過對象的方法訪問"私有成員內部類"的成員
//外部類 class Outer { // 外部類成員變數 private String outer_filed = "我是外部類成員變數"; //被私有的成員內部類 private class Inner { // 內部類成員變數 private String inner_filed = "我是內部類成員變數"; //內部類的成員方法 public void inner_method() { System.out.println("inner_method....run... " + inner_filed ); } } // 外部類成員方法 public void outer_method(){ System.out.println("outer_method....run... " + outer_filed ); } /* 被私有的外部類成員方法: 當前外部類的成員方法被私有了,因此此方法外界無法訪問。但是本類中是可以正常訪問的。 我們可以在本類中定義一個公開的方法來調用私有的方法,然後創建對象調用公開的方法即可訪問。 */ // 外部類公開的方法 public void pub_method(){ // 此公開方法可以訪問本類私有的成員 Inner inner = new Inner(); inner.inner_method(); // 可以在此方法內訪問創建私有內部類的對象,然後調用內部類方法,最後通過外部類對象調用此 // 方法即可完成私有成員內部類方法的間接調用 } } // 測試類 public class InnerDemo { public static void main(String[] args) { // 創建外部類對象 Outer o = new Outer(); // 調用外部類訪問私有內部類的公開方法 , 間接調用私有成員內部類 o.pub_method(); } }
被靜態的成員內部類
外部類.內部類 變數名 = new 外部類.內部類();
//外部類 class Outer { // 外部類成員變數 private String outer_filed = "我是外部類成員變數"; //被靜態的成員內部類 static class Inner { // 內部類成員變數 private String inner_filed = "我是內部類成員變數"; //內部類的成員方法 public void inner_method() { System.out.println("inner_method....run... " + inner_filed ); } } // 外部類成員方法 public void outer_method(){ System.out.println("outer_method....run... " + outer_filed ); } } // 測試類 public class InnerDemo { public static void main(String[] args) { // 創建內部類對象 Outer.Inner oi = new Outer.Inner(); // 調用內部類方法 oi.inner_method(); } }
靜態成員內部類的靜態方法
//外部類 class Outer { // 外部類成員變數 private String outer_filed = "我是外部類成員變數"; //被靜態的成員內部類 static class Inner { // 內部類成員變數 private String inner_filed = "我是內部類成員變數"; //內部類的成員方法 public static void static_inner_method() { System.out.println("靜態內部類的靜態成員方法static_inner_method....run... " ); } } } // 測試類 public class InnerDemo { public static void main(String[] args) { // 直接使用內部類名訪問 Outer.Inner.static_inner_method(); } }