Day69.註解&列舉類的複習 -Java註解&列舉類
列舉類和註解
.
列舉類的使用
1. 列舉類的說明:
* 1. 列舉類的理解: 類的物件只有有限個、確定的。我們稱此類為列舉類
* 2. 當需要定義一組常量時,強烈建議使用列舉類
* 3. 如果列舉類中只有一個物件,則可以作為單例模式的實現方式。
2. 如何自定義列舉類?步驟:
* 方式一: jdk5.0之前,自定義列舉類
* 方式二: jdk5.0時,可以使用enum關鍵詞定義列舉類
自定義列舉類
//自定義列舉類
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
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. 其他訴求1: 獲取列舉類物件的屬性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//4. 其他訴求2: 提供toString()
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
3. jdk5.0 新增使用enum定義列舉類。步驟:
使用enum關鍵字定義列舉類
//方式二:使用enum關鍵字定義列舉類
enum Season1{
//1. 提供當前列舉類的物件,多個物件之間用 "," 隔開,末尾的物件用 ";" 結束
SPRING("春天","春暖花開"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高氣爽"),
WINTER("冬天","凌冽寒風");
//2. 宣告Season物件的屬性: private final修飾
private final String seasonName;
private final String seasonDesc;
Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4. 其他訴求1: 獲取列舉類物件的屬性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
4. 使用enum定義列舉類之後,列舉類常用方法:(繼承於java.lang.Enum類)
Enum類中的常用方法:
* values(): 返回列舉型別的物件陣列。該方法可以很方便地遍歷所有的列舉值。
* valueOf(String str): 可以把一個字串轉換為對應的列舉類物件。要求字串必須是列舉類物件的“名字”。如果不是,會執行時異常;
* toString(): 返回當前列舉類物件常量的名稱
public static void main(String[] args) {
Season1 autumn = Season1.AUTUMN;
// System.out.println(Season1.class.getSuperclass());
//toString(): 返回列舉類物件的名稱
System.out.println(autumn.toString());
System.out.println("======================================");
//values(): 返回所有列舉類物件構成的陣列
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
}
Thread.State[] values1 = Thread.State.values();
for (int i = 0; i < values1.length; i++) {
System.out.println(values1[i]);
}
//valueOf(String Object): 返回列舉類中物件名是objName的物件。
//如果沒有objName的列舉類物件,則拋異常: IllegalArgumentException
Season1 spring = Season1.valueOf("SPRING");
System.out.println(spring);
System.out.println("====================");
}
5. 使用enum定義列舉類之後,如何讓列舉類物件分別實現介面:
* 情況1: 實現介面,在enum類中實現抽象方法
* 情況2: 讓列舉類的物件分別去實現介面中的抽象方法,每個物件的方法體都可以不一樣
enum Season1 implements Info{
//1. 提供當前列舉類的物件,多個物件之間用 "," 隔開,末尾的物件用 ";" 結束
SPRING("春天","春暖花開"){
@Override
public void show() {
System.out.println("這是一個春天");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("這是一個夏天");
}
},
AUTUMN("秋天","秋高氣爽"){
@Override
public void show() {
System.out.println("這是一個秋天");
}
},
WINTER("冬天","凌冽寒風"){
@Override
public void show() {
System.out.println("這是一個冬天");
}
};
}
.
註解的使用
1. 註解的理解
* ① jdk5.0 新增功能
* ② Annotation其實就是程式碼的特殊標記,這些標記可以在編譯,類載入,執行時被讀取,並執行相應的處理。
* 通過使用Annotation,程式設計師可以在不改變原有邏輯的情況下,在原始檔中嵌入一些補充資訊。
* ③ 在JavaSE中,註解的使用目的比較簡單,例如標記過時的功能,忽略警告等。在JavaEE/Android中註解佔據了更重要的角色,
* 例如用來配置應用程式的任何切面,代替JavaEE舊版中所遺留的繁冗程式碼和XML配置等。
框架 = 註解 + 反射 + 設計模式
2. 註解的使用示例
* 示例一: 生成文件相關的註解
* 示例二: 在編譯時進行格式檢查(JDK內建的三個基本註解)
* @Override: 限定重寫父類方法,該註解只能用於方法
* @Deprecated: 用於表示所修飾的元素(類,方法等)已過時。通常是因為所修飾的結構危險或存在更好的選擇
* @SuppressWarnings: 抑制編譯器報錯
* 例項三: 跟蹤程式碼依賴性,實習替代配置檔案功能
3. 如何自定義註解
如何自定義註解: 參照@SuppressWarnings定義
* ① 註解宣告為: @interface
* ② 內部定義成員,通常使用value表示
* ③ 可以指定成員的預設值,使用default定義
* ④ 如果自定義註解沒有成員,表明是一個標識作用
說明:
* 如果註解有成員,在使用註解時,需要指明成員的值。
* 自定義註解必須配上註解的資訊處理流程(使用反射)才有意義
* 自定義註解通常都會指明兩個元註解: Retention、Target
程式碼舉例:
@Repeatable(MyAnnotations.class)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.
FIELD,ElementType.
METHOD,ElementType.
PARAMETER,ElementType.
CONSTRUCTOR, ElementType.
TYPE_PARAMETER,ElementType.TYPE_USE})
public @interface MyAnnotation {
String value()default "hello";//default 預設值:
}
4. 元註解:
* 元註解: 對現有的註解進行解釋說明的註解
* Retention: 指定所修飾的 Annotation 的生命週期: SOURCE/CLASS(預設行為)/RUNTIME
* 只有宣告為RUNTIME宣告週期的註解,才能通過反射獲取。
* Target: 用於指定被修飾的 Annotation 能用於修飾哪些程式元素
* ----↓出現的頻率較低------
* Documented: 表示所修飾的註解在被javadoc解析式,儲存下來。 (預設情況下:javadoc解析不保留註解)
* Inherited: 被修飾的 Annotation 將具有繼承性。
後設資料的概念:
String name = "Tom"; //String 和 name 都是解釋說明"Tom";String和name都是"Tom"的後設資料
5. 如何獲取註解資訊: 通過反射來獲取、呼叫。
前提:
要求此註解的元註解Retention中宣告的生命週期狀態為: RUNTIME
6. JDK8中註解的新特性:
* ① 可重複註解
* 1) 在MyAnnotation上宣告@Repeatable,成員值為MyAnnotations.class
* 2) MyAnnotation的@Target,@Retention等元註解與MyAnnotations相同
* ② 型別註解
* 1) ElementType.TYPE_PARAMETER 表示該註解能寫在型別變數的宣告語 句中(如:泛型宣告)。
* 2) ElementType.TYPE_USE 表示該註解能寫在使用型別的任何語句中
相關文章
- Java列舉類、註解和反射Java反射
- Java列舉類與註解詳解——一篇文章讀懂列舉類與註解詳Java
- 03-Java核心類庫_列舉、註解與反射Java反射
- 基於註解的 PHP 列舉類實現PHP
- Java enum列舉類詳解 列舉的常見用法Java
- Java基礎(十)——列舉與註解Java
- java列舉類Java
- Java —— 列舉類(enum 類)Java
- Java(4)列舉類Java
- 列舉類
- java_06列舉類Java
- Java列舉類學習到進階Java
- 列舉工具類
- 8.集合、泛型、列舉、註解、反射泛型反射
- Java列舉解讀Java
- 【python】Enum 列舉類Python
- Python元類與列舉類Python
- Java 列舉 enum 詳解Java
- iOS開發 列舉註釋iOS
- springboot mybatis列舉配置(每次只需新增一個列舉類即可)Spring BootMyBatis
- Java列舉類,你們用對了嗎?Java
- Java列舉類,這樣使用優雅、易懂Java
- Python 列舉類原始碼解析Python原始碼
- Rust 列舉類是什麼Rust
- Partial類、列舉、結構體結構體
- Java 列舉、JPA 和 PostgreSQL 列舉JavaSQL
- 你可能不瞭解的java列舉Java
- TS — 列舉(詳解)
- Java列舉類在生產環境中的使用方式Java
- 註解類
- Java列舉Java
- Java第七天-常用類及列舉Java
- Java註解-後設資料、註解分類、內建註解和自定義註解Java
- java中的列舉Java
- 位元組碼層面深入分析Java列舉類Java
- 列舉一下常見的final類?
- Java 列舉(enum)Java
- Java列舉型別enum的詳解及使用Java型別