1. 程式人生 > 其它 >java進階(四)_列舉類與註解

java進階(四)_列舉類與註解

列舉類與註解

1.1列舉類的使用

  • 列舉類理解:類的物件只有有限個的,確定的。我們稱此類為列舉類
  • 當需要定義一組常量時,建議使用列舉類。
  • 如果列舉類只有一個物件,則可以作為單列模式的實現方式。

1.2如何定義列舉類

  • 方式一:jdk5.0之前,自定義列舉類
  • 方式二:jdk5,可以使用enum關鍵字定義列舉類
public class SeasonTest {
    public static void main(String[] args) {
        Season1 autumn = Season1.AUTUMN;
        System.out.println(autumn);
    }
}
//自定義列舉類,這個是繼承於Object類
class Season{
    //1.宣告Season物件的屬性:private final修飾,因為列舉類物件的		屬性不應被允許改動
        private final String seasonName;
        private final String seasonDesc;

    //2.私有化類的構造器,並給物件的屬性賦值
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //3. 提供當前列舉類的多個物件
    public static final Season SPRING=new Season("春天","春暖花開");
    public static final Season SUMMER=new Season("夏天","夏日炎炎");
    public static final Season AUTUMN=new Season("秋天","秋高氣爽");
    public static final Season WINTER=new Season("冬天","冰天雪地");
    //4.其他訴求:獲取列舉類物件的屬性

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
    //4.其他訴求1:提供toString()

    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

//使用enum關鍵字定義列舉類,
// 定義的列舉類預設繼承於java.lang.Enum類
enum Season1{
    //1. 提供當前列舉類的多個物件,多個物件之間用逗號隔開,末尾物件用;結束
     SPRING("春天","春暖花開"),
     SUMMER("夏天","夏日炎炎"),
     AUTUMN("秋天","秋高氣爽"),
     WINTER("冬天","冰天雪地");

    //2.宣告Season物件的屬性:private final修飾
    private final String seasonName;
    private final String seasonDesc;

    //2.私有化類的構造器,並給物件的屬性賦值
    private Season1(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    //4.其他訴求:獲取列舉類物件的屬性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
}

1.3 Enum類的常用方法

  • values()方法:返回列舉型別的物件陣列。該方法可以很方便的遍歷所有的列舉值;
  • valueOf(String str):可以把一個字串轉為對應的列舉類物件。返回列舉類中物件名是objname的物件,要求字串必須是列舉類物件的”名字“。如不是,會有執行時異常: lllegalArgumentException.
  • toString():返回當前列舉類物件常量的名稱。

1.4使用enum關鍵字定義的列舉類實現介面的情況

  • 情況一:實現介面,在enum類中實現抽象方法
  • 情況二:讓列舉類的物件分別實現介面中的抽象方法

2.註解(Annotation)的使用

2.1概述

  • 從JDK5.0開始,java增加了對元資料的支援,也就是註解;
  • Annotation其實就是程式碼裡的特殊標記,這些標記可以在編譯,類載入i,執行時被讀取,並執行相應的處理;
  • Annotation可以像修飾符一樣被使用,可用於修飾包,類,構造器,方法,成員變數,引數,區域性變數的宣告,這些資訊被儲存在Annotation的”name=value“中;
  • 註解是一種趨勢,在一定程度上可以說:框架=註解+反射+設計模式

2.2 常見的Annotation示例

使用Annotation時要在其前面增加@符號,並把該Annotation當成一個修飾符使用。用來修飾它支援的程式元素。

  • 示例一:生成文件相關的註解

    • @author
    • @version
    • @see
    • @param
    • ……
  • 示例二:在編譯時進行格式檢查JDK內建的三個基本註解

    • @Override:限定重寫父類方法,該註解只能用於方法;
    • @Deprecated:用於表示所修飾的元素(類,方法等)已過時,通常是因為所修飾的結構危險或者存在更好的選擇;
    • @SuppressWarnings:抑制編譯器警告
  • 示例三:跟蹤程式碼依賴性,實現替代配置檔案功能

    • @Servlet提供了註解,使得不再需要在web.xml檔案中進行Servlet的部署
    • spring框架中關於”事務“的管理

2.3 jdk中四個基本元註解

  • JDK中的元Annotation用於修飾其他Annotation的定義,也就是對現有註解進行解釋說明;

  • JDK5.0中提供了4個標準的meta-annotation型別,分別是:

    • Retention:指定所修飾的Annotation的生命週期:SOURCE\CLASS(預設行為)\RUNTIME

      只有宣告為RUNTIME生命週期的註解,才能通過反射獲取

    • Target:用於指定被修飾的Annotation能用於修飾哪些程式元素

    • Documented:表示所修飾的註解在被javadoc解析時,保留下來

    • Inherited:被它修飾的Annotation將具有繼承性

2.4 jdk8.0中註解的新特性

  • 可重複註解
  • 型別註解