Java基础编程-枚举类与注解

本文全文参考 https://www.bilibili.com/video

枚举类

1. 枚举类的说明:

  • 1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类
  • 2.当需要定义一组常量时,强烈建议使用枚举类
  • 3.如果枚举类中只一个对象,则可以作为单例模式的实现方式。
    在这里插入图片描述

2. jdk 5.0 之前自定义枚举类

public class SeasonTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        String seasonName = spring.getSeasonName();
        System.out.println(seasonName); // 春天
        System.out.println(spring.toString()); // Season{seasonName='春天', seasonDesc='春天到了'}
    }
}

//  jdk 5.0 之前自定义枚举类
class Season{

    // 1.声明Season对象的属性
    private final String seasonName;
    private final String seasonDesc;

    // 2.私有化类的构造器
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    // 3.提供当前枚举类的多个对象
    public static final Season SPRING = new Season("春天","春天到了");
    public static final Season SUMMER = new Season("夏天","夏天到了");
    public static final Season AUTUMN = new Season("秋天","秋天到了");
    public static final Season WINTER = new Season("冬天","冬天到了");

    // 4.其他诉求1:获取枚举类对象的属性
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }

    // 4.其他诉求2:提供toString()方法
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

3. jdk 5.0 新增使用enum定义枚举类。

//  jdk 5.0 新增使用enum定义枚举类。
enum Season1{

    SPRING("春天","春天到了"),
    SUMMER("夏天","夏天到了"),
    AUTUMN("秋天","秋天到了"),
    WINTER("冬天","冬天到了");

    private final String seasonName;
    private final String seasonDesc;

    Season1(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
}

4. 使用enum定义枚举类之后,枚举类常用方法:(继承于java.lang.Enum类)

在这里插入图片描述

  • values() :返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。

注解

1. 注解的理解

在这里插入图片描述

2. 注解的使用示例

示例一:生成文档相关的注解

在这里插入图片描述

示例二:在编译时进行格式检查(JDK内置的三个基本注解)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200324164809605.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzNTY1MjM4,size_16,color_FFFFFF,t_70

示例三:跟踪代码依赖性,实现替代配置文件功能

在这里插入图片描述

3. 如何自定义注解

在这里插入图片描述

4. 元注解 :对现有的注解进行解释说明的注解。

  • 元注解:对现有注解进行解释说明的注解
  • 元数据:对现有数据进行修饰的数据
    在这里插入图片描述
  • 示例:Override 注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 如何获取注解信息

  • 通过发射来进行获取、调用。
  • 前提:要求此注解的元注解Retention中声明的生命周期状态为:RUNTIME.

6.JDK8中注解的新特性

6.1 可重复注解
  • 下面是JDK8中的重复注解( java.lang.annotation.Repeatable)定义的源码。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Repeatable {
    Class<? extends Annotation> value();
}
  • 重复注解,即一个注解可以在一个类、方法或者字段上同时使用多次,如Spring中可以使用多个扫描组件来扫描多个包的注解。
@ComponentScan
@ComponentScan
public class Configuration{
}
  • ComponentScan的源码。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
  • ComponentScans的源码
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
...
  • 下面来演示下重复注解的实现。
public static void main(String[] args) {
    for (Token token : UserToken.class.getAnnotationsByType(Token.class)) {
        System.out.println(token.value());
    }
}
 
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Tokens {
    Token[] value();
}
 
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Tokens.class)
public @interface Token {
    String value();
}
 
@Token("666666")
@Token("888888")
public interface UserToken {
}
  • 输出结果:

666666
888888
6.2 类型注解

在这里插入图片描述

发布了17 篇原创文章 · 获赞 0 · 访问量 162

猜你喜欢

转载自blog.csdn.net/qq_33565238/article/details/105073523