1、總結
在某些情況下,一個類的對象是有限而且固定的。例如季節類,只能有 4 個對象
手動實現枚舉類:
- private 修飾構造器
- 屬性使用 private final 修飾
- 把該類的所有實例都使用 public static final 來修飾
枚舉類和普通類的區別:
- 使用 enum 定義的枚舉類默認繼承了 java.lang.Enum 類
- 枚舉類的構造器只能使用 private 訪問控制符
- 枚舉類的所有實例必須在枚舉類中顯式列出(, 分隔 ; 結尾). 列出的實例系統會自動添加 public static final 修飾
- 所有的枚舉類都提供了一個 values 方法, 該方法可以很方便地遍歷所有的枚舉值
2、代碼
public class Test3 {
public static void main(String[] args) {
Season spring = Season.SPRING;//Season.SPRING這段執行就是獲取一個Season對象
spring.showInfo();
// System.out.println(Season.values());
Season spring1 = Season.SPRING;
spring1.showInfo();
//每次執行Season.SPRING獲取的是相同的對象,枚舉類中的每個枚舉都是單例模式
System.out.println(spring.equals(spring1));//true
}
}
enum Season implements Itest{
SPRING("春天","春暖花開"),//此處相當於在調用有參的所有構造private Season(String name,String desc)
SUMMER("夏天","炎炎夏日"),
AUTUMN("秋天","秋高氣爽"),
WINTER("冬天","冬風凜冽");
private final String name;
private final String desc;
private Season(String name,String desc) {
this.name = name;
this.desc = desc;
}
public void showInfo() {
System.out.println(this.name+":"+this.desc);
}
@Override
public void test() {
System.out.println("這是實現Itest接口的test方法");
}
}
//實現接口的枚舉類
interface Itest{
void test();
}
注解
從 JDK 5.0 開始, Java 增加了對元數據(MetaData) 的支持, 也就是 Annotation(注釋)
Annotation 其實就是代碼里的特殊標記, 這些標記可以在編譯, 類加載, 運行時被讀取, 並執行相應的處理. 通過使用 Annotation, 程序員可以在不改變原有邏輯的情況下, 在源文件中嵌入一些補充信息.
三個基本的 Annotation:
- @Override: 限定重寫父類方法, 該注釋只能用於方法
- @Deprecated: 用於表示某個程序元素(類, 方法等)已過時
- @SuppressWarnings: 抑制編譯器警告.
public class Test4 {
public static void main(String[] args) {
new testInfo().test1();//@Deprecated用於表示某個程序元素(類, 方法等)已過時
@SuppressWarnings({ "unused", "rawtypes" })
List list = new ArrayList();//@SuppressWarnings: 抑制編譯器警告.
}
}
class testInfo{
void test() {}
@Deprecated
void test1() {}
}