Day11 JavaSE 枚舉和註解

JavaSE 枚舉和註解

一、枚舉

1 定義

在某些情況下,一個類的對象是有限而且固定的,例如季節類,只有4個對象。如果一個一個單例模式,代碼量太大,編譯成本高,故使用枚舉。

實現枚舉類語句注意:

  • private修飾有參構造器
  • 屬性使用private final修飾
  • 把該類的所有實例都使用public static final來修飾

2 自實現枚舉類+實現接口

案例展示:(注意其中枚舉類的實現語句)

package com.enumdemo;

public class Demo01 {
    public static void main(String[] args) {
        Season spring = Season.SPRING; //此處返回一個Season對象
        spring.showInfo();

        Season spring1 = Season.SPRING;

        //此處證明每次執行Season.SPRING獲得相同對象,也就意味着枚舉類中每個枚舉都是單例的
        System.out.println(spring.equals(spring1));

        spring.test();
    }
}

enum Season implements ITest{
    SPRING("春天","春暖花開"), //此處調用有參私有構造,並傳入參數
    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();
}

二、Annotation(註解)

1 Annotation概述

  • Annotation就是代碼裏的特殊標記,這些標記可以在編譯,類加載,運行時被讀取,並執行相應的處理。通過使用Annotation,程序員可以在不改變原有邏輯的情況下,在源文件中嵌入一些補充信息。
  • Annotation可以像修飾符一樣被使用,可用於修飾包,類,構造器,方法,成員變量,參數,局部變量的聲明,這些信息被保存在Annotation的“name=value”對中
  • Annotation能被用來爲程序元素設置元數據

2 基本的Annotation

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

  • 三個基本的Annotation:

    • @Override:限定重寫父類方法,該註釋只能用於方法
    • @Deprecated:用於表示某個程序元素(類、方法等)已過時
    • @SuppressWarnings:抑制編譯器警告

    上述註解展示:

    package com.annotation;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo01 {
        public static void main(String[] args) {
            new TestB().test1(); //方法過時
    
            @SuppressWarnings({"rawtypes","unused"}) //抑制警告,此時無泛型、未被使用均不出警告
            List list = new ArrayList();
        }
    }
    
    class TestA{
        public void test(){
    
        }
    }
    
    class TestB extends TestA{
        @Override  //註解表示方法重寫
        public void test() {
            super.test();
        }
    
        @Deprecated  //註解表示方法過時
        public void test1(){
            System.out.println("DDD");
        }
    }
    

3 自定義Annotation

  • 定義新的Annotation類型使用@interface關鍵字
  • Annotation的成員變量在Annotation定義中以無參數方法的形式來聲明。其方法名和返回值定義了該成員的名字和類型。
  • 可以在定義Annotation的成員變量時爲其指定初始值,指定成員變量的初始值可以使用default關鍵字。
  • 沒有成員定義的Annotation稱爲標記;包含成員變量的Annotation稱爲元數據Annotation。
package com.annotation;

import java.lang.annotation.*;

public class Demo02 {

}

class TestAA{
    @TestAnn(id=100,desc="姓名")
    String name;

}

//註解類
@Target(ElementType.FIELD)//這個註解類只能是給其他類的屬性做註解
@Retention(RetentionPolicy.RUNTIME)//定義註解的生命週期,此時爲整個運行週期
@Documented
@interface TestAnn{
    public int id() default 0;

    public String desc() default "";
}

寫在最後

"I am the vine; you are the branches. If you remain in me and I in you, you will bear much fruit; apart from me you can do nothing. "

To Demut!

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