枚举类
枚举类的使用:
- 枚举类的理解:类的对象只有有限个,确定的
- 当需要定义一组常量时,建议使用枚举类
- 如果枚举类只有一个对象,则可以作为单例模式的实现方式
如何定义枚举类:
- 方式一:jdk1.5之前自定义枚举类
- 方式二:jdk1.5可以使用enum关键字定义枚举类
父类不是Object类
//自定义枚举类
class Sex1{
//1.声明Sex对象的属性,private final修饰
private final char sex1;
//2.私有化类的构造器,给属性赋值
private Sex1(char sex1) {
this.sex1 = sex1;
}
//3.提供当前枚举类多个对象
public static final Sex1 MAN = new Sex1('男');
public static final Sex1 WOMAN = new Sex1('女');
//4.其它需求:
public char getSex() {
return sex1;
}
@Override
public String toString() {
return "Sex1{" +
"sex1=" + sex1 +
'}';
}
}
//enum关键字定义枚举类
enum Sex2{
//1.提供当前枚举类多个对象,多个对象用逗号隔开
MAN('男'),
WOMAN('女');
//2.声明Sex对象的属性,private final修饰
private final char sex2;
//3.私有化类的构造器,给属性赋值
private Sex2(char sex2) {
this.sex2 = sex2;
}
//4.其它需求:
public char getSex() {
return sex2;
}
@Override
public String toString() {
return "Sex2{" +
"sex2=" + sex2 +
'}';
}
}
Enum类的主要方法:
- values()方法:返回枚举类型的对象数组。可以遍历所有枚举值
- valueOf(String objName):返回枚举类中名为objName的对象
使用enum关键字定义的枚举类实现接口的情况:
- 情况一:实现接口,在enum中实现抽象方法
- 情况二:让枚举类的对象分别实现接口中的抽象方法
//四:使用enum关键字定义的枚举类实现接口的情况
interface info{
void show();
}
enum Sex3 implements info{
//让枚举类的对象分别实现接口中的抽象方法
MAN('男'){
@Override
public void show() {
System.out.println("男生");
}
},
WOMAN('女'){
@Override
public void show() {
System.out.println("女生");
}
};
private final char sex3;
private Sex3(char sex3) {
this.sex3 = sex3;
}
/* //实现接口,在enum中实现抽象方法
@Override
public void show() {
System.out.println("性别");
}*/
}
注解
注解的使用:
- 生成文档相关的注解
- 在编译时进行格式检查
-
@Override,@Deprecate,@SuppressWarnings
- 跟踪代码依赖性,实现替代配饰文件功能
自定义注解:
参照@SuppressWarnings定义
- 注解声明为:@interface,内部定义成员,通常使用value表示
- 可以指定成员的默认值,使用default定义,如果自定义注解没有成员,表示是一个表示作用
jdk提供的四种元注解:
- 元注解:对现有的注解进行解释说明的注解
- Retention:指定所修饰的Annotation的生命周期:SOURCE/CLASS/RUNTIME
- 只有声明为RUNTIME生命周期的注解,才能通过反射获取
- Target:用于指定被修饰的Annotation能用于修饰指定程序元素
- Documented:表示所修饰的注解在被javadoc解析时保留下来
- Inherited:被它修饰的Annotation将具有继承性
jdk8新特性:可重复注解,类型注解:
- 可重复注解:在自定义注解上声明@Repeatable,成员值为第二个自定义注解名.class
- 自定义注解的Target和Retention和第二个自定义注解相同
- 类型注解(Target):ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中
- ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中