博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义Annotation & Enum
阅读量:7217 次
发布时间:2019-06-29

本文共 3874 字,大约阅读时间需要 12 分钟。

hot3.png

   JDK 5.0开始,Java增加了对MetaData(元数据)的支持,即Annotation

  
   1.JDK内置的基本注解类型(3个)
       @Override:限定重写父类的方法,该注释只能用于方法
       @Deprecated:用于表示某个程序元素(类,方法等)已过时
       @SuppressWarnings:抑制编译器警告
   
   2.自定义注解:    
   
   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");//	}	}

 

转载于:https://my.oschina.net/wuweixiang/blog/830939

你可能感兴趣的文章
大容量分区命令parted
查看>>
从输入 URL 到页面加载完成的过程中都发生了什么事情?
查看>>
实例讲解JQuery中this和$(this)区别
查看>>
centos 7 静态ip地址模板
查看>>
影响系统性能的20个瓶颈
查看>>
shell的详细介绍和编程(上)
查看>>
软件开发性能优化经验总结
查看>>
面试题编程题05-python 有一个无序数组,如何获取第K 大的数,说下思路,实现后的时间复杂度?...
查看>>
kendo grid序号显示
查看>>
Spring 教程(二) 体系结构
查看>>
Indexes
查看>>
2.Web中使用iReport 整合----------创建html格式的
查看>>
异常备忘:java.lang.UnsupportedClassVersionError: Bad version number in .class file
查看>>
最全三大框架整合(使用映射)——applicationContext.xml里面的配置
查看>>
初步理解Java的三大特性——封装、继承和多态
查看>>
知识点积累(一)
查看>>
iphone-common-codes-ccteam源代码 CCFile.m
查看>>
python:浅析python 中__name__ = '__main__' 的作用
查看>>
修改tomcat端口后不能IP访问问题
查看>>
review board
查看>>