Java 中內部類、靜態內部類、列舉類
阿新 • • 發佈:2018-12-26
一、內部類
在另一個類中定義的類
內部類作用
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