枚举类(enum)

适用场景

1、当类的对象是有限个并且是确定的时建议使用

2、当需要定义一组常量(如:四季和星期)

3、如果枚举只有一个对象可以当做单例模式的实现方式

定义枚举类

jdk5以前

自定义枚举

 

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解

1、私有的常量属性private+final

2、私有的构造器(可以有参数赋值)

3、内部new对象private+static+final

4、get和toString方法用于获取对象的属

jdk5以后

java 获取 字段上的注解 java通过注解获取枚举值_枚举类_02

用enum关键字定义

1、属性默认都是private+final,所以不能显示的添加修饰符了,各个属性之间是用逗号隔开,最后一个用分号

2、构造器和get方法相同,但是不用重写tostring方法,tostring获取到的不是地址值 原因见3

3、因为父类不是Object,用类名.class.getSuperclass可以查看父类

enum枚举类的方法

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_03

 

 

java 获取 字段上的注解 java通过注解获取枚举值_赋值_04

 

 

java 获取 字段上的注解 java通过注解获取枚举值_自定义注解_05

 

 

java 获取 字段上的注解 java通过注解获取枚举值_赋值_06

tostring返回枚举对象的名称,value遍历类中的所有枚举对象用数组返回,valueof可以根据传入的枚举对象名获取相应的枚举对象然后可以考虑用对象的属性或方法 见其他方法。

其他用法

java 获取 字段上的注解 java通过注解获取枚举值_赋值_07

 

 

继承接口,实现接口的时候可以在对象后面直接重写接口的方法,来达到不同对象有不同效果。

java 获取 字段上的注解 java通过注解获取枚举值_枚举类_08

像上图valueof获取对象后可以调用对象特有的方法。

注解(Annotation)

概述

java 获取 字段上的注解 java通过注解获取枚举值_赋值_09

 

 

java 获取 字段上的注解 java通过注解获取枚举值_自定义注解_10

可以用注解代替以前用配置文件来做的连接。

常见示例

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_11

 

 

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_12

 

 

java 获取 字段上的注解 java通过注解获取枚举值_枚举类_13

以前用xml写配置文件当有login时需要调用com.servlet。。。,现在通过注解就知道需要调用那个方法,那个方法在继承的类中实现了。

使用

@Override,用于方法,在编译的时候会校验是否重写了方法

@Deprecated,用于类、属性、方法、构造器,会在API中标识已经过时的方法,虽然过时但是因为以前开发的软件可能还在用,为了向下兼容依然支持这些方法,但是建议开发时用推荐的新的方法,因为一是过时的方法可能存在危险(像stop结束线程,可能使得需要关闭连接的资源一直处于连接状态,不安全)二是有更好的选择。

java 获取 字段上的注解 java通过注解获取枚举值_自定义注解_14

 

 

java 获取 字段上的注解 java通过注解获取枚举值_赋值_15

变量如果没有使用的话会警告,抑制警告信息,suppresswarning定义为数组所以可以有多个属性值。

自定义注解

用的不多大概

java 获取 字段上的注解 java通过注解获取枚举值_自定义注解_16

这种方式定义的话一定要赋值

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_17

赋值

java 获取 字段上的注解 java通过注解获取枚举值_赋值_18

如果是这种就可以不赋值用默认的,当然也可在用的地方赋值,当然可以去掉value=。

java 获取 字段上的注解 java通过注解获取枚举值_赋值_19

如果注解没有成员起到表示作用如override

四种元注解

作用:用来修饰注解的注解,位置如下

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_20

Retention

java 获取 字段上的注解 java通过注解获取枚举值_枚举类_21

 

 

java 获取 字段上的注解 java通过注解获取枚举值_自定义注解_22

surce只在源文件中编译时不加载,默认是class,编译时有运行时不加载,rnutime运行时被加载到内存。

只有声明为runtime的才可以被反射获取

Target

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_23

 

 

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_24

 

 

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_25

 

 

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_26

自定义通常指明上述俩

Documented和Inherited

不常用

java 获取 字段上的注解 java通过注解获取枚举值_枚举类_27

JDK8新特性 可重复注解Repeatable

就是用自定义注解作为另外一个自定义注解的属性,不过另外一个是数组类型

java 获取 字段上的注解 java通过注解获取枚举值_枚举类_28


 

java 获取 字段上的注解 java通过注解获取枚举值_赋值_29


 

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_30


java 获取 字段上的注解 java通过注解获取枚举值_枚举类_31

2要求的应该是等注解都一样,不然继承的那个注解在my中有在mys中没有运行会报错

java 获取 字段上的注解 java通过注解获取枚举值_java 获取 字段上的注解_32

传入自定义的注解的名字,而且必须保证注解的生命周期一样

JDK8新特性 类型注解

java 获取 字段上的注解 java通过注解获取枚举值_自定义注解_33


 

java 获取 字段上的注解 java通过注解获取枚举值_枚举类_34


java 获取 字段上的注解 java通过注解获取枚举值_枚举类_35


java 获取 字段上的注解 java通过注解获取枚举值_枚举类_36