java基礎學習-枚舉

枚舉Enum

讓某個類型變量的取值只能爲若干固定值中的一個否則編譯器就會報錯, 往往存在着這樣的“數據集”,它們的數值在程序中是穩定的,而且“數據集”中的元素是有限的

Enum相關語法

1)num時,編譯器會爲你生成一個相關的類,但是不能完全作爲一個類看。這個類繼承自java.lang.Enum,無法再繼承其他類,只能實現接口,中java.lang.Enum類實現了java.lang.Serializable和java.lang.Comparable兩個接口
2)舉類的構造函數只能使用private訪問修飾符,如果省略了其構造器的訪問控制符,則默認使用private修飾;
3)舉類的所有實例必須在枚舉類中顯式列出,否則這個枚舉類將永遠都不能產生實例。列出這些實例時,系統會自動添加public static final修飾,無需程序員顯式添加。
4)switch使用enum

Enum主要方法

1)ordinal()返回int值,enum實例順序。
2)實現了Comparable接口,具有compareTo()
3)name()返回Enum實例聲明時的名稱
4)values()返回實例數組,EnumA.class.getEnumConstants()也可以
5)getDeclaringClass(),Eunm實例調用該方法可知所屬Enum類名

Enum用法

添加新方法

<span style="font-weight: normal;">public enum EnumDemo {
	RAD("rgb 255",255),YELLOW("rgb 123",123);
	private String desc ;
	private int age;
	private EnumDemo(String desc,int age){
		this.desc = desc;
		this.age=age;
	}
	public String getDesc(){
		return desc;
	}
	public int getAge(){
		return age;
	}
}</span>
<span style="font-weight: normal;">public class Test {

	public static void main(String[] args) {
		System.out.println(EnumDemo.RAD);
		System.out.println("順序" + EnumDemo.RAD.ordinal());
		System.out.println("屬性" + EnumDemo.RAD.getAge());
		System.out.println("屬性" + EnumDemo.RAD.getDesc());
		System.out.println("實例名稱" + EnumDemo.RAD.name());
		System.out.println("實例個數" + EnumDemo.values().length);
//		RAD
//		順序0
//		屬性255
//		屬性rgb 255
//		實例名稱RAD
//		實例個數2
	}
}</span>

常量方法
public enum EnumDemo {
	//實例必須在最前面
	RED("rgb 255", 255) {
		public String getInfo() {
			//實現接口
			return "test RED";
		}
	},
	YELLOW("rgb 123", 123) {
		public String getInfo() {
			return "test YELLOW";
		}
	};
	
	private String desc;
	
	private int age;

	private EnumDemo(String desc, int age) {
		this.desc = desc;
		this.age = age;
	}

	public String getDesc() {
		return desc;
	}

	public int getAge() {
		return age;
	}
	
	//實例必須實現
	<strong>abstract String getInfo();</strong>

}

public class Test {

	public static void main(String[] args) {
		System.out.println(EnumDemo.RED);
		System.out.println(EnumDemo.RED.getInfo());
		System.out.println(EnumDemo.RED.getDeclaringClass());
//		RED
//		test RED
//		class metnoh.EnumDemo
	}
}

枚舉與接口
實現接口
public interface Behaviour {
	  void print();
      String getInfo();
}

public enum Color implements Behaviour {
    RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
    // 成員變量
    private String name;
    private int index;

    // 構造方法
    private Color(String name, int index) {
        this.name = name;
        this.index = index;
    }

    // 接口方法
    @Override
    public String getInfo() {
        return this.name;
    }

    // 接口方法
    @Override
    public void print() {
        System.out.println(this.index + ":" + this.name);
    }
}


用接口管理枚舉
起到統一基類作用,並且接口可以給與對應的方法
	 enum Coffee implements EnumInf {
         BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO;
		@Override
		public void eat() {
			System.out.println("coffee");
			
		}
     }

     enum Dessert implements EnumInf {
         FRUIT, CAKE, GELATO;
		@Override
		public void eat() {
			System.out.println("Dessert");
		}
     }
     
     abstract void eat();
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章