一、列舉類的使用
-
列舉類的理解:類的物件只有有限個,確定的,我們稱此類為列舉類
-
當需要定義一組常量時,強烈建議使用列舉類
-
如果列舉類中只一個物件,則可以作為單例模式的實作方式,
1.如何自定義列舉類?
步驟:
//自定義列舉類
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=newSeason("春天","春暖花開");
public static final Season SUMMER=newSeason("夏天","夏日炎炎");
public static final Season AUTUMN=newSeason("秋天","秋高氣爽");
public static final Season WINTER=newSeason("冬天","冰天雪地");
//4.其他訴求1:獲取列舉類物件的屬性
public String getSeasonName(){
return seasonName;
}
public String getSeasonDesc(){
return seasonDesc;
}
//4.其他訴求1:提供toString()
@Override
public String toString(){
return"Season{"+
"seasonName='"+seasonName+'\''+
",seasonDesc='"+seasonDesc+'\''+
'}';
}
}
2.jdk5.0新增使用enum定義列舉類,
步驟:
//使用enum關鍵字列舉類
enum Season1{
//1.提供當前列舉類的物件,多個物件之間用","隔開,末尾物件";"結束
SPRING("春天","春暖花開"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高氣爽"),
WINTER("冬天","冰天雪地");
//2.宣告Season物件的屬性:privatefinal修飾
private final String seasonName;
private final String seasonDesc;
//2.私化類的構造器,并給物件屬性賦值
private Season1(String seasonName,String seasonDesc){
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
//4.其他訴求1:獲取列舉類物件的屬性
public String getSeasonName(){
return seasonName;
}
public String getSeasonDesc(){
return seasonDesc;
}
}
3.使用enum定義列舉類之后,列舉類常用方法:(繼承于java.lang.Enum類)
Season1 summer=Season1.SUMMER;
//toString():回傳列舉類物件的名稱
System.out.println(summer.toString());
//System.out.println(Season1.class.getSuperclass());
System.out.println("****************");
//values():回傳所的列舉類物件構成的陣列
Season1[] values=Season1.values();
for(int i=0;i<values.length;i++){
System.out.println(values[i]);
}
System.out.println("****************");
Thread.State[] values1=Thread.State.values();
for(int i=0;i<values1.length;i++){
System.out.println(values1[i]);
}
//valueOf(String objName):回傳列舉類中物件名是objName的物件,
Season1 winter=Season1.valueOf("WINTER");
//如果沒objName的列舉類物件,則拋例外:IllegalArgumentException
//Season1 winter=Season1.valueOf("WINTER1");
System.out.println(winter);
4.使用enum定義列舉類之后,如何讓列舉類物件分別實作介面
interface Info{
void show();
}
//使用enum關鍵字列舉類
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
舉例:
@Inherited
@Repeatable(MyAnnotations.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})
public @interface MyAnnotation {
String value() default "hello";
}
4. 元注解 :對現有的注解進行解釋說明的注解
JDK提供的4種元注解:
Retention:指定所修飾的 Annotation 的生命周期:SOURCE\CLASS(默認行為\RUNTIME只宣告為RUNTIME生命周期的注解,才能通過反射獲取,
Target:用于指定被修飾的 Annotation 能用于修飾哪些程式元素
出現的頻率較低:
Documented:表示所修飾的注解在被javadoc決議時,保留下來,
Inherited:被它修飾的 Annotation 將具繼承性,
類比:元資料的概念:String name = "Tom";
5. 如何獲取注解資訊:通過發射來進行獲取、呼叫
前提:要求此注解的元注解Retention中宣告的生命周期狀態為:RUNTIME,
6.JDK8中注解的新特性:可重復注解、型別注解
可重復注解:
①在MyAnnotation上宣告@Repeatable,成員值為MyAnnotations.class,
②MyAnnotation的Target和Retention等元注解與MyAnnotations相同,
型別注解:
ElementType.TYPE_PARAMETER 表示該注解能寫在型別變數的宣告陳述句中(如:泛型宣告,
ElementType.TYPE_USE 表示該注解能寫在使用型別的任何陳述句中,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434378.html
標籤:Java
