枚举类的使用:
    1、枚举类的理解:类的对象只有有限个,确定的,我们称此类为枚举类;
    2、当需要定义一组常量时,建议使用枚举类;
    3、如果枚举类中只有一个对象,则可以作为单例模式的实现方式。

    如何定义枚举类
    方式一:jdk5.0之前,自定义枚举类
    方式二:jdk5.0,可以使用enum关键字定义枚举类

    方式一:

    1. package com.SeasonTest;
    2. public class SeasonTest {
    3. public static void main(String[] args) {
    4. Season spring = Season.SPRING;
    5. System.out.println(spring);
    6. }
    7. }
    8. // 定义枚举类
    9. class Season{
    10. // 声明Season对象的属性,需要用private final来修饰
    11. private final String seasonName;
    12. private final String seasonDesc;
    13. // 1、私有化构造器
    14. private Season(String seasonName,String seasonDesc){
    15. this.seasonDesc = seasonDesc;
    16. this.seasonName = seasonName;
    17. }
    18. // 3、提供当前枚举类的多个对象,声明为public static final
    19. public static final Season SPRING = new Season("春天","春暖花开");
    20. public static final Season SUMMER = new Season("春天","夏日炎炎");
    21. public static final Season AUTUMN = new Season("春天","秋高气爽");
    22. public static final Season WINTER = new Season("春天","冰天雪地");
    23. // 4、其他诉求:获取类对象的属性
    24. public String getSeasonName() {
    25. return seasonName;
    26. }
    27. public String getSeasonDesc() {
    28. return seasonDesc;
    29. }
    30. @Override
    31. public String toString() {
    32. return "Season{" +
    33. "seasonName='" + seasonName + '\'' +
    34. ", seasonDesc='" + seasonDesc + '\'' +
    35. '}';
    36. }
    37. }

    方式二:

    1. package com.SeasonTest;
    2. public class SeasonTest {
    3. public static void main(String[] args) {
    4. Season1 summer = Season1.SUMMER;
    5. System.out.println(summer);
    6. System.out.println(Season1.class.getSuperclass());//默认继承于java.lang.Enum
    7. }
    8. }
    9. enum Season1 {
    10. // 1、提供当前枚举类的对象,多个对象之间用都好隔开,末尾用分号结束
    11. SPRING ("春天","春暖花开"),
    12. SUMMER ("春天","夏日炎炎"),
    13. AUTUMN ("春天","秋高气爽"),
    14. WINTER ("春天","冰天雪地");
    15. // 声明Season对象的属性,需要用private final来修饰
    16. private final String seasonName;
    17. private final String seasonDesc;
    18. // 1、私有化构造器
    19. private Season1(String seasonName,String seasonDesc){
    20. this.seasonDesc = seasonDesc;
    21. this.seasonName = seasonName;
    22. }
    23. // 4、其他诉求:获取类对象的属性
    24. public String getSeasonName() {
    25. return seasonName;
    26. }
    27. public String getSeasonDesc() {
    28. return seasonDesc;
    29. }
    30. }

    Enum类的常用方法:
    values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的 枚举值。
    valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符 串必须是枚举类对象的“名字”。如不是,会有运行时异常: IllegalArgumentException。
    toString():返回当前枚举类对象常量的名称。

    使用enum关键字定义的枚举类实现接口:
    情况1:实现接口,在enum类中实现抽象方法;
    情况2:让枚举类的对象分别实现接口中的抽象方法

    注解:

    • 注解的使用:

    1、理解Annotation:

    • ① jdk5.0新增、
    • ② 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理。通过使用 Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。
    • ③在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。

    2、Annotation使用示例

    • 一:生成文档相关的注解
    • 二:在编译时进行格式检查(JDK内置的三个基本注解)
    • @Override: 限定重写父类方法, 该注解只能用于方法
    • @Deprecated: 用于表示所修饰的元素(类, 方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
    • @SuppressWarnings: 抑制编译器警告
    • 三:跟踪代码依赖性,实现替代配置文件功能

    3、如何自定义注解:参照@SuppressWarnings定义

    • ①注解声明为:@interface
    • ②内部定义成员,通常用value表示
    • ③可以指定成员的默认值,使用default定义
    • ④如果自定义注解没有成员,表明是一个标识作用。

    如果注解有成员,在使用时,需要指明成员的值。自定义注解必须配上注解的信息处理流程(使用反射)才有意义。自定义注解通常会指明两个元注解:Retention、Target

    4、元注解:对注解进行注解的注解。
    JDK四种元注解:
    Retention:指定所修饰的Annotation的生命周期:SOURCE\CLASS(默认)\RUNTIME,只有声明为RUNTIME生命周期的注解,才能通过反射获取。
    Target: 用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于 修饰哪些程序元素。 @Target 也包含一个名为 value 的成员变量。
    Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档。默认情况下,javadoc是不包括注解的。
    Inherited: 被它修饰的 Annotation 将具有继承性。如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解。

    5、通过反射获取注解信息。

    6、新特性。。。。听不下去了,后面再看吧。