专栏首页吴伟祥自定义Annotation & Enum 原

自定义Annotation & Enum 原

   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之前    )

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)          >实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同。(相当于让每个对象重写抽象方法)

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");
//	}
	
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java中的4种内部类 原

    1. 成员内部类:作为类的成员,存在于某个类的内部。   成员内部类可以调用外部类的所有成员,但只有在创建了外部类的对象后,才能调用外部的成员。

    wuweixiang
  • 自定义template(Settings-->Live Templates)

    psvm=public static void main(String[] args) {}

    wuweixiang
  • java解析任意层的json数据(递归解析) 原

    wuweixiang
  • Spring5.0源码深度解析之SpringBean的Aop通知调用链源码分析

    这里就是那五个通知后面还有个TransactionInterceptor,后面会分析它

    须臾之余
  • 构造方法、封装、关键字(this、static)和代码块的介绍

    构造方法在初始化一个类的对象时进行调用,它没有返回值,方法名与类名相同,而成员方法是则是由对象主动调用,它有返回值,表现为对象的操作行为。

    java架构师
  • Eclipse连接SQL2008与连接SQL2000代码的不同及连接2008过程中遇到的问题

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/artic...

    魏晓蕾
  • 11.JAVA-Object类之finalize(),clone(),toString()等方法覆写

    Object类是一个特殊的类,是所有类(包括数组,接口 )的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类,所以可以通过...

    张诺谦
  • 呆呆的io流输入输出的一些基础

              关于io流的File类,下面来码一些基础属性:              文件的属性: 1 /* 2 public String...

    Gxjun
  • SpringBoot整合shiro从初恋到失恋

    另外三个跳转页面就不贴出来了,panpan账号登录可以查看和删除,用xiaoli账号登录则只有查看而没有删除的权限,代码见下面,sql文件在resources包...

    道可道非常道
  • java8 Lambda尝尝鲜

    转载:猿天地 链接:http://cxytiandi.com/blog/detail/2196 java8都已经发布这么久了,一直没来得及使用,线上环境基本...

    猿天地

扫码关注云+社区

领取腾讯云代金券