1. 程式人生 > >Java 中內部類、靜態內部類、列舉類

Java 中內部類、靜態內部類、列舉類

一、內部類
在另一個類中定義的類
內部類作用
1、內部類提供了更好的封裝。只能讓外部類直接訪問,不允許同一個包中的其他類直接訪問。
2、內部類可以直接訪問外部類的私有屬性,內部類被當成其外部類成員。當外部類不能訪問內部類的內部屬性。
內部類的使用場合:由於內部類提供了更好地封裝性,並且可以很方便的訪問外部類的屬性。所以,通常內部類只在所外部類提供服務的情況下優先使用。
內部類分類:成員內部類 匿名內部類 區域性內部類(極少使用)
二、靜態內部類
因為靜態內部類只能操作靜態成員屬性,所以無論建立幾次,雖然多個靜態類例項不是同一個,但其操作的變數是共享的(1變為了2)。!

public class StudyStatic {

    private static int staticVar;
    private static InternalStaticClass innerClass = new InternalStaticClass();
    private static InternalStaticClass innerClass2 = new InternalStaticClass();

    public static void main(String[] args) {

        System.out.println(innerClass.hashCode());
        System.out
.println(innerClass2.hashCode()); } protected static class InternalStaticClass{ public InternalStaticClass(){ staticVar++; System.out.println(staticVar); } } }

程式碼結果:

1
2
366712642
1829164700

三、列舉類
enum 列舉型別定義與類定義相似,enum型別本身就相當於類,不過比較特殊,相當於提供了幾個個該類的例項,當然enum型別不能被例項化,但可以修改已經存在的列舉值。

public class TestEnum {

    public static void main(String[] args) {

        for(int i=0;i<MyEnum.values().length;i++){
            System.out.println(MyEnum.values()[i].getKey()+":"+
                    MyEnum.values()[i].getValue());
        }
        MyEnum.Enum1.setKey(4);
        System.out.println(MyEnum.Enum1.getKey()+":"+MyEnum.Enum1.getValue());
    }

    public enum MyEnum{

        //多個個列舉值,注意名字並不是構造方法名
        Enum1(1,"One"),Enum2(2,"Two"),Enum3(3,"Three");

        //列舉值所包含的屬性
        private int key;
        private String value;

        //構造方法
        MyEnum(int key,String value){
            this.setKey(key);
            this.setValue(value);
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
    }
}

執行結果:

1:One
2:Two
3:Three
4:One