教你使用Java的靜態內部類

來源:互聯網
上載者:User

12.3.4  靜態內部類

在上一小節我們討論了內部類,即在一個類中包含有另外一個或者多個類(見本書12.3.3小節)。與 內部類相似,靜態內部類指在一個類的內部包含有另外一個或者多個靜態類。例如:

public class OuterClass {
    ...
    static class StaticInnerClass1 {             //內部靜態類
        //只可以訪問OuterClass的靜態成員
         ...
    }                                            //StaticInnerClass結束
    ...                             
    static class StaticInnerClassN {            // 更多靜態內部類
       //只可以訪問OuterClass的靜態成員
       ...
    }                                           //StaticInnerClassN結束
}  //OuterClass結束

與一般內部類不同,在靜態代碼中不能夠使用this操作,所以在靜態內部類中只可以訪問外部類的靜 態變數和靜態方法。使用靜態內部類的目的和使用內部類相同。如果一個內部類不依賴於其外部類的執行個體 變數,或與執行個體變數無關,則選擇應用靜態內部類。

如下例子示範怎樣使用靜態內部類:

///完整程式存在本書配套資來源目錄Ch12名為StaticInnerClassTest.java
public class StaticInnerClassTest {
    public static void main( String args[] ) {
         OuterClass2 outer = new OuterClass2();
        OuterClass2.StaticInnerClass.innerMethod();  
                                                 //調用靜態內部類的靜態方法
        OuterClass2.outerMethod();
        //建立靜態內部類對象
        OuterClass2.StaticInnerClass staticInner = new OuterClass2.StaticInnerClass();
         int num = staticInner.innerMethod2();   //調用靜態內部類執行個體方法
    }
}
class OuterClass2 {                             //外部類
    private double x = 0.0;                     //內部靜態類不可以訪問 外部類實                                               例變數
    static private int n = 10;                  //外部類 靜態變數
    static void outerMethod() {                 //外部類靜態 方法
        System.out.println("from OuterClass...");
    }
    void outerMethod2() {
        System.out.println("from OuterClass’ instance method2 ()...");
    }
    static class StaticInnerClass {             //靜 態內部類
        static private int m = 5;               //靜態內部類靜 態變數
        static void innerMethod() {             //靜態內部類靜態 方法
            int sum;
            n = 20;                              //只可以訪問外部類靜態變數
            sum = n + m;
            System.out.println("from InnerClass sum = " + sum);
            outerMethod();                      //只可以調用外部類靜態 方法
       }
        int innerMethod2() {
            n = 100;
            outerMethod();
            System.out.println("from InnerMethod2() n = " + n);
            return n;
        }
   }        //靜態內部類結束
}           //外部類結束

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.