一、枚举类
类的对象只有有限个,确定的。当需要定义一组常量时,强烈建议使用枚举类。
当需要使用一组常量时,推荐使用枚举类。
1.定义
类的对象只有有限个,确定的。若枚举类只有一个对象,则可以作为一种单例模式的实现方式。
2.定义枚举类
JDK5.0之前,自定义枚举类;
JDK5.0之后,使用enum关键字定义枚举类。
2.1自定义枚举类
1.私有化构造器
2.类中属性私有化,且为final即用private final 定义属性
3.在构造器对属性初始化
4.提供当前枚举类的多个对象
5.其他诉求:①获取枚举类对象的属性。②toString()方法
2.2使用enum关键字定义枚举类
权限修饰符enum 类名{
1.提供当前枚举类对象,多个对象之间用","隔开,末尾对象";"结束。并放在最前面。
2.toString不提供,默认用父类java.lang.Enum打印枚举类对象的名字不是地址值。
}
二、Enum中常用方法
Enum为enum定义的枚举类的父类。
三个主要方法:
1.values():枚举类[] names = 枚举类.values();返回一个数据。
数组中存放着枚举类中的所有对象。
2.valueOf(String str):可以把一个字符串转为对应的枚举类对象。其中str为枚举类中对象的名字。
即根据str返回与str同名的枚举类的对象,没有报异常。
3.tostring():返回当前枚举类对象常量的名称
三、枚举类实现接口
情况1:实习接口,在enum中重写抽象方法。
情况2:在每个对象内部,重写抽象方法。
enum season1 implements Info{
SPRING("春天","春暖花开"){
@Override
public void show(){
....
}
},
SUMMER("夏天","..."){
@Override
public void show(){
....
}
};
}
SPRING中参数为season1中的属性。
四、注解Annotation
JDK5.0新增的
1.注解的使用
①@Override重写的方法。编译的时候校验。
②@Deprecated 编译期检查。表示已经过时,但仍可以使用。(向下兼容)
③@SuppressWarnings:抑制编译器警告。编译期检查。@SuppressWarnings("Unused")。
2.自定义注解 Annotation类
①形式:
public @interface MyAnnotation{
String value();//属性
}
注解类中无属性的为标识,有属性的在使用时要赋值。内部定义成员,通常使用value表示;可以指定成员的默认值,使用default定义。自定义注解必须配上注解的信息处理流程(使用反射才有意义)。
3.JDK中的元注解
①元注解用于修饰其他注解的注解
一共有四个元注解:Retention、Target、Documented、Inherited
②Retention:
用于指定该Annotation的生命周期:SOURCE/CLASS/RUNTIME
形式:
@Retention(RetentionPolicy.元素){
其他注解{
}
}
只有声明为RUNTIME生命周期的注解,才能通过反射获取。
③Target:
用于指定被修饰的Annotation能用于修饰哪些程序元素。
@Target(TYPE,FIELD,等):指明修饰的参数。
以上两个常用于自定义的注解,后两个了解就好了。
④Documented
用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档。默认情况下,javadoc是不包括注解的。即修饰的注解在被javadoc解析时,保留下来。
⑤Inherited
被它修饰的Annotation将具有继承性
4、JDK8中注解新特性
①可重复注解
了解内容
①在自定义注解类MyAnnotation上声明@Repeatable,成员值为注解类.class
②MyAnnotation的Target和Retention等元注解与A一致。
②类型注解
TYPE_PARAMETER在Target枚举类中新增的,可以修饰泛型。
TYPE_USE也新增在Target的枚举类中,可以修饰任何使用类型的任何语句中。