前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义Annotation & Enum 原

自定义Annotation & Enum 原

作者头像
wuweixiang
发布2018-08-14 11:12:51
4500
发布2018-08-14 11:12:51
举报
文章被收录于专栏:吴伟祥

   JDK 5.0开始,Java增加了对MetaData(元数据)的支持,即Annotation    1.JDK内置的基本注解类型(3个)        @Override:限定重写父类的方法,该注释只能用于方法        @Deprecated:用于表示某个程序元素(类,方法等)已过时        @SuppressWarnings:抑制编译器警告    2.自定义注解:    @interface    3.元注解:    指注解的注解,用于修饰其他Annotation定义        >@Retention  定义注解的保留策略        >@Target 定义注解的作用目标        >@Documented        说明该注解将被包含在javadoc中(必须设置Retention的值为RUNTIME)        >@Inherited                说明子类可以继承父类中的该注解(使用较少)

   1.@Retention:包含一个RetentionPolicy类型的成员变量

            使用@Retention时必须为该value成员变量指定值:

            @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含

            @Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,

            @Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

   2.@Target 也包含一个名为 value的成员变量

            @Target(ElementType.TYPE)   //接口、类、枚举、注解

            @Target(ElementType.FIELD) //字段、枚举的常量

            @Target(ElementType.METHOD) //方法

            @Target(ElementType.PARAMETER) //方法参数

            @Target(ElementType.CONSTRUCTOR)  //构造函数

            @Target(ElementType.LOCAL_VARIABLE)//局部变量

            @Target(ElementType.ANNOTATION_TYPE)//注解

            @Target(ElementType.PACKAGE) ///包   

  Enum          JDK1.5新增的 enum关键字 用于定义枚举类          若枚举只有一个成员(对象),则可以作为一种单例模式的实现方式          

 1.如何自定义枚举类 (    JDK1.5之前    )

代码语言:javascript
复制
package com.step.j2enum;

public class TestSeason1 {
	public static void main(String[] args) {
		Season spring=Season.SPRING;
		System.out.println(spring);
		spring.show();
		System.out.println(spring.getSeasonDesc());
	}
}
//枚举类
class Season{
	//1.提供类的属性,声明为 private final 
	private final String seasonName;
	private final String seasonDesc;
	//2.声明为final属性,在构造器中初始化。
	public Season(String seasonName, String seasonDesc) {
		super();
		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("fall","秋高气爽");
	public static final Season WINTER=new Season("winter","白雪皑皑");
	
	@Override
	public String toString() {
		return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
	}
	public void show(){
		System.out.println("THIS IS A SEASON");
	}
	
	
	
}

 2.如何使用enum关键字定义枚举类          >常用的方法:values(),valueOf(String name)          >实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同。(相当于让每个对象重写抽象方法)

代码语言:javascript
复制
package com.step.j2enum;


public class TestSeason2 {
	public static void main(String[] args) {
		Season1 spring=Season1.SUMMER;
		System.out.println(spring);
		spring.show();
		System.out.println(spring.getSeasonDesc());
		
//		1.values()
		Season1[] seasons=Season1.values();
		for (int i = 0; i < seasons.length; i++) {
			System.out.print(seasons[i]+"	");
		}
//		2.valueOf(String name)
		String str ="SPRING";
		Season1 sea=Season1.valueOf(str);
		System.out.println();
		System.out.println(sea);
		
		Thread.State[] states =Thread.State.values();
		for (int i = 0; i < states.length; i++) {
			System.out.println(states[i]);
		}
		
		sea.show();
		
	}
}

 interface Info {
	
	  void show();
	}

enum Season1 implements Info{
	//4.创建枚举类的对象; 将类的对象声明 public static final 
//	SPRING("spring","春暖花开"),
//	SUMMER("summer","夏日炎炎"),
//	AUTUMN("fall","秋高气爽"),
//	WINTER("winter","白雪皑皑");
	
	SPRING("spring","春暖花开"){
		public void show(){
			System.out.println("1");
		}
	},
	SUMMER("summer","夏日炎炎"){
		public void show(){
			System.out.println("2");
		}
	},
	AUTUMN("fall","秋高气爽") {
		public void show(){
			System.out.println("3");
		}
	},
	WINTER("winter","白雪皑皑"){
		public void show(){
			System.out.println("4");
		}
	};

	//1.提供类的属性,声明为 private final 
	private final String seasonName;
	private final String seasonDesc;
	//2.声明为final属性,在构造器中初始化。
	private Season1(String seasonName, String seasonDesc) {
		this.seasonName = seasonName;
		this.seasonDesc = seasonDesc;
	}
	//3.通过公共的方法来调用属性
	public String getSeasonName() {
		return seasonName;
	}
	public String getSeasonDesc() {
		return seasonDesc;
	}
 
//	public void show(){
//		System.out.println("THIS IS A SEASON");
//	}
	
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/01/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档