009如何自定义枚举类 +如何使用enum关键字定义枚举类+注解Annotation

一.如何自定义枚举类 

public class TestSeason {
        Season spring = Season.SPRING;
}

class Season {
	// 1.提供类的属性,声明为private final 
	private final String seasonName;
	private final String seasonDesc;      

	// 2.声明final的属性,在构造器中初始化
	private Season(String seasonName,String seasonDesc) {
           this.seasonName = seasonName;
           this.seasonDesc = seasonDesc;
        }      

	// 3.通过公共的方法来调用属性
	public String getSeasonName() {
            return seasonName;
        }

	public String getSeasonDesc() {
            return seasonDesc;
        }      
	// 4.创建枚举类的对象:将类的对象声明为public static final

	public static final Season SPRING = new Season("spring", "春暖花开");
	public static final Season SUMMER = new Season("summer", "夏日炎炎");
	public static final Season AUTUMN = new Season("autumn", "秋高气爽");
	public static final Season WINTER = new Season("winter", "白雪皑皑");

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

二.如何使用enum关键字定义枚举类

常用的方法


public class TestSeason {
    Season spring = Season.SPRING;
    //1.valus()方法
    Season[] seasons = Season.values();
    //2.valueOf(String name):要求传入的形参name是枚举类对象的名字
    //否则,报java.lang.IllegalArgumentException异常
    String str = "SPRING";
    Season season = Season.valueOf(str);
    Thread.State[] states = Thread.State.values();
}

enum Season {
	SPRING("spring", "春暖花开"),    
	SUMMER("summer", "夏日炎炎"),    
	AUTUMN("autumn", "秋高气爽"),    
	WINTER("winter","白雪皑皑");   
	private final String seasonName;   
	private final String seasonDesc;   

	private Season(String seasonName,String seasonDesc) {
       this.seasonName = seasonName;
       this.seasonDesc = seasonDesc;
    }   

	public String getSeasonName() {
       return seasonName;
    }   

	public String getSeasonDesc() {
       return seasonDesc;
    }   

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

 

如何让枚举类实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同。(相当于让每个对象重写抽象方法)

    interface Infomation{

    public abstract void show();

}

enum Season implements Infomation{

    SPRING("spring","春暖花开"){

       public void show(){

           System.out.println("春天");

       }

    },

    SUMMER("summer","夏日炎炎"){

       public void show(){

           System.out.println("夏天");

       }

    },

    AUTUMN("autumn","秋高气爽"){

       public void show(){

           System.out.println("秋天");

       }

    },

    WINTER("winter","白雪皑皑"){

       public void show(){

           System.out.println("冬天");

       }

    };

   

    private final String seasonName;

    private final String seasonDesc;

   

    private Season(String seasonName,String seasonDesc) {

       this.seasonName = seasonName;

       this.seasonDesc = seasonDesc;

    }

    public String getSeasonName() {

       return seasonName;

    }

    public String getSeasonDesc() {

       return seasonDesc;

    }

    @Override

    public String toString() {

return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";

        }

}

三.注解Annotation

注解(Annotation)概述

JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)。Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的“name=value”对中。Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据

使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素。三个基本的Annotation:@Override:限定重写父类方法,该注释只能用于方法;@Deprecated:用于表示某个程序元素(类,方法等)已过时;@SuppressWarnings:抑制编译器警告。

如何自定义一个注解             

public @interface MyAnnotation {
    String value() default "hello";
}

元注解

JDK的元Annotation用于修饰其他Annotation的定义。JDK5.0提供了专门在主街上的注解类型,分别是Retention、Target、Documented、Inherited。

 

 

发布了23 篇原创文章 · 获赞 7 · 访问量 1777

猜你喜欢

转载自blog.csdn.net/weixin_44145972/article/details/88926536