Java枚举类&注解

一、枚举类入门

  • JDK1.5之前需要自定义枚举类
  • JDK 1.5新增的enum关键字用于定义枚举类
  • 若枚举只有一个成员,则可以作为一种单例模式的实现方式

1.如何自定义枚举类

   
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","冬");
	@Overried
	public String toString(){
		return "Season[seasonName="+seasonName+",seasonDesc="+seasonDesc+"]";
	}
	public void show(){
		System.out.println("季节");
	}
}

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

常用的方法:values(),valueOf(String name)

   
enum Season1{
        SPRING("spring","春"),
        SUMMER("summer","夏"),
	AUTUMN("autumn","秋"),
	WINTER("winter","冬");
	
	private final String seasonName;
	private final String seasonDesc;
	
	private Season1(String seasonName,String seasonDesc){
		this.seasonName = seasonName;
		this.seasonDesc = seasonDesc;
	}
	
	public String getSeasonName(){
		return seasonName;
	}
	public String getSeasonDesc(){
		return seasonDesc;
	}
}

        //1.values()
	Season1[] seasons = Season1.values();
	for(int i=0;i<seasons.length;i++){
		System.out.println(seasons[i]);
	}
	//2.valueOf(String name):要求传入的形参name是枚举类对象的名字,否则,报
	//java.lang.IllegalArgumentException异常
	String str = "SPRING";
	Season1 sea = Season1.valueOf(str);
	System.out.println(sea);
如何让枚举类实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同。(相当于让每个对象重写抽象方法)

    
interface Info{
	void show();
}
enum Season1 implements Info{
	SPRING("spring","春"){
		public void show(){
			System.out.println("春天来了");
		}
	},
	SUMMER("summer","夏"){
		public void show(){
			System.out.println("夏天走了");
		}
	},
	
	private final String seasonName;
	private final String seasonDesc;
	
	private Season1(String seasonName,String seasonDesc){
		this.seasonName = seasonName;
		this.seasonDesc = seasonDesc;
	}
	
	public String getSeasonName(){
		return seasonName;
	}
	public String getSeasonDesc(){
		return seasonDesc;
	}
	
	
	@Overried
	public String toString(){
		return "Season[seasonName="+seasonName+",seasonDesc="+seasonDesc+"]";
	}
}

二、注解

1.注解(Annotation)概述

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

2.JDK提供的常用的注解

     使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素

     三个基本的Annotation:

        @Override :限定重写父类方法,该注释只能用于方法

        @Deprecated:用于表示某个程序元素(类,方法等)已过时

        @SuppressWarnings:抑制编译器警告

3.自定义注解

   
//自定义
public @interface MyAnnotation{
     String value() default "hello";
}

//调用
@MyAnnotation(value = "ecode")

4.元注解

JDK的元Annotation用于修饰其他Annotation定义。

JDK5.0提供了专门在注解上的注解类型,分别是:

-->@Retention :只能用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间,@Retention包含一个RetentionPolicy类型的成员变量,使用@Retention时必须为该alue成员变量指定值:

       -->RetentionPolicy.SOURCE:编译器直接丢弃这种策略的注释

       -->RetentionPolicy.CLASS:编译器将注释记录在class文件中,当运行Java程序时,JVM不会保留注解。这是默认值

       -->RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中。当运行Java程序时,JVM会保留注释,程序可以通过反射获取该注释

-->@Target:用于修饰Annotation定义,用于指定被修饰的Annotation能用于修饰哪些程序元素。@Target也包含一个名为value的成员变量

-->@Documented:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档。

                定义为Documented的注解必须设置Retention值为RUNTIME

-->@Inherited:被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解

               实际应用中,使用较少



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值