Java 中內部類、靜態內部類、枚舉類的知識


1、內部類

       內部類是指在一個外部類的內部再定義一個類。內部類作為外部類的一個成員,並且依附於外部類而存在的。內部類可為靜態,可用protected和private修飾(而外部類只能使用public和缺省的包訪問權限)。內部類主要有以下幾類:內部、局部內部、靜內部、匿名內部


例如:

public class Test2 {
    public static void main(String[] args) {
        //實例化的方法一
        Cls box=new Cls();
        box.data=300;
        Cls.Incls inbox=box.new Incls();
        inbox.show();

        //實例化的方法二
        Cls.Incls box2=new Cls().new Incls();
        box2.show();
    }

}

//外部類
class Cls
{
    //外部類的成員變量
    public int data=200;

    //成員內部類
    class Incls{
        //內部類的成員
        public void show(){
            System.out.println("內部類數據:"+data);
        }
    }
}

結果:

2、靜態內部類

 

如果你不需要內部類對象與其外圍類對象之間有聯系,那你可以將內部類聲明為static。這通常稱為嵌套類(nested class)。想要理解static應用於內部類時的含義,你就必須記住,普通的內部類對象隱含地保存了一個引用,指向創建它的外圍類對象。然而,當內部類是static的時,就不是這樣了。嵌套類意味着:

  1. 要創建嵌套類的對象,並不需要其外圍類的對象。

  2. 不能從嵌套類的對象中訪問非靜態的外圍類對象。

例如:

public class Outer {
    private static int i = 1;
    private int j = 10;

    public static void outer_f1() {}

    public void outer_f2() {}

    // 靜態內部類可以用public,protected,private修飾
    // 靜態內部類中可以定義靜態或者非靜態的成員
    private static class Inner {
        static int inner_i = 100;
        int inner_j = 200;

        static void inner_f1() {
            // 靜態內部類只能訪問外部類的靜態成員(包括靜態變量和靜態方法)
            System.out.println("Outer.i" + i);
            outer_f1();
        }

        void inner_f2() {
            // 靜態內部類不能訪問外部類的非靜態成員(包括非靜態變量和非靜態方法)
            // System.out.println("Outer.i"+j);
            // outer_f2();
        }
    }

    public void outer_f3() {
        // 外部類訪問內部類的靜態成員:內部類.靜態成員
        System.out.println(Inner.inner_i);
        Inner.inner_f1();
        // 外部類訪問內部類的非靜態成員:實例化內部類即可
        Inner inner = new Inner();
        inner.inner_f2();
    }

    public static void main(String[] args) {
        new Outer().outer_f3();
    }
}

3、枚舉類

這種方式是Effective Java作者Josh Bloch 提倡的方式,它不僅能避免多線程同步問題,而且還能防止反序列化重新創建新的對象,可謂是很堅強的壁壘。

例如:

public enum Singleton {  
    INSTANCE;  
    public void whateverMethod() {  
    }  
}  

 

此文章轉載於:https://www.cnblogs.com/best/p/6736771.htmlhttp://cantellow.iteye.com/blog/838473


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM