枚举与注解
枚举
1、枚举
枚举类型的对象是有限、固定的几个常量对象。
2、语法格式
//形式一:枚举类型中只有常量对象列表
【修饰符】 enum 枚举类型名{
常量对象列表
}
//形式二:枚举类型中只有常量对象列表
【修饰符】 enum 枚举类型名{
常量对象列表;
其他成员列表;
}
说明:常量对象列表必须在枚举类型的首行
3、在其他类中如何获取枚举的常量对象
//获取一个常量对象 枚举类型名.常量对象名 //获取一个常量对象 枚举类型名.valueOf("常量对象名") //获取所有常量对象 枚举类型名[] all = 枚举类型名.values();
4、枚举类型的特点
(1)枚举类型有一个公共的基本的父类,是java.lang.Enum类型,所以不能再继承别的类型
(2)枚举类型的构造器必须是私有的
(3)枚举类型可以实现接口
interface MyRunnable{
void run();
}
enum Gender implements MyRunnable{
NAN,NV;
public void run(){
//...
}
}
//或
enum Gender implements MyRunnable{
NAN{
public void run(){
//...
}
},NV{
public void run(){
//...
}
};
}
5、父类java.lang.Enum类型
(1)构造器
protected Enum(String name, int ordinal):由编译器自动调用
(2)String name():常量对象名
(3)int ordinal():返回常量对象的序号,第一个的序号是0
(4)String toString():返回常量对象名,如果子类想重写,需要手动
(5)int compareTo(Object obj):按照常量对象的顺序比较
注解
1、注解
它是代码级别的注释
2、标记符号:@
3、系统预定义的三个最基本的注解:
(1)@Override:表示某个方法是重写的方法
它只能用在方法上面,会让编译器对这个方法进行格式检查,是否满足重写的要求
(2)@SuppressWarnings(xx):抑制警告
(3)@Deprecated:表示xx已过时
4、和文档注释相关的注解
(1)文档注释
/**
文档注释
*/
(2)常见的文档注释
@author:作者
@since:从xx版本加入的
@see:另请参考
@param:形参
@return:返回值
@throws或@exception:异常
5、JUnit相关的几个注解
(1)@Test:表示它是一个单元测试方法
这个方法需要是:public void xxx(){}
(2)@Before:表示在每一个单元测试方法之前执行
这个方法需要是:public void xxx(){}
(3)@After:表示在每一个单元测试方法之后执行
这个方法需要是:public void xxx(){}
6、元注解
(1)@Target(xx):用它标记的注解能够用在xx位置
(xx):由ElementType枚举类型的10个常量对象指定,例如:TYPE,METHOD,FIELD等
例如:
@Target(ElementType.TYPE)
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
import static java.lang.annotation.ElementType.*;
@Target({TYPE,METHOD,FIELD})
(2)@Retention(xx):用它标记的注解可以滞留到xx阶段
(xx):由RetentionPolicy枚举类型的3个常量对象指定,分别是:SOURCE,CLASS,RUNTIME
唯有RUNTIME阶段的注解才能被反射读取到
例如:
@Retention(RetentionPolicy.RUNTIME)
(3)@Documentd:用它标记的注解可以读取到API中
(4)@Inherited:用它标记的注解可以被子类继承
7、自定义注解
@元注解 【修饰符】 @interface 注解名{ } @元注解 【修饰符】 @interface 注解名{ 配置参数列表 }
配置参数的语法格式:
数据类型 配置参数名();
或
数据类型 配置参数名() default 默认值;
关于配置参数:
(1)配置参数的类型有要求:
八种基本数据类型、String、枚举、Class类型、注解、它们的数组。
(2)如果自定义注解声明了配置参数,那么在使用这个注解时必须为配置参数赋值,除非它有默认值
@自定义注解名(配置参数名1=值,配置参数名2=值……)
//如果配置参数类型是数组,那么赋值时,可以用{}表示数组
@自定义注解名(配置参数名1={值},配置参数名2=值……)
(3)如果配置参数只有一个,并且名称是value,那么赋值时可以省略value=
(4)如果读取这个注解时,要获取配置参数的值的话,可以当成方法一样来访问
自定义注解对象.配置参数();