java18-枚举类和注解

枚举类

枚举类的理解

  • 类的对象是有限个的,确定的
  • 当需要定义一组常量时,强烈建议枚举类
public class SeasonTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}
class Season{
    // 声明season对象属性 private final 修饰
    private final String seasonName;
    private final String seasonDesc;
    // 私有化类的构造器
    private Season(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }
    //提供当前枚举类的多个对象
    public static final Season SPRING=new Season("春天","春暖花开");
    public static final Season SUMMER=new Season("夏天","夏日炎炎");
    // 获取属性
    public String getSeasonName() {
        return seasonName;
    }
    
    public String getSeasonDesc() {
        return seasonDesc;
    }
    // 提供toString

    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}
  • jdk5.0新增定义方式
public class SeasonTest1 {
    public static void main(String[] args) {
        Season1 summer = Season1.SUMMER;
        // 继承于Enum类
        System.out.println(summer);
    }
}

enum Season1{

    //1.提供当前枚举类的多个对象,多个对象之间用逗号隔开
    SPRING("春天","春暖花开"),
    SUMMER("夏天","夏日炎炎");
    // 声明season对象属性 private final 修饰
    private final String seasonName;
    private final String seasonDesc;
    // 私有化类的构造器
    private Season1(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }

    // 获取属性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

}

Enum类常用方法

方法 说明
values() 返回枚举类型的对象数组
valueof(String str) 返回枚举类中对象名是str的对象
toString() 返回当前枚举对象常量的名称
public class SeasonTest1 {
    public static void main(String[] args) {
        Season1 summer = Season1.SUMMER;
        // 继承于Enum类
        System.out.println(summer);
        System.out.println(summer.toString());
        Season1[] values = Season1.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);

        }
        Season1 summer1 = Season1.valueOf("SUMMER");
        System.out.println(summer1);
    }
}

enum Season1{

    //1.提供当前枚举类的多个对象,多个对象之间用逗号隔开
    SPRING("春天","春暖花开"),
    SUMMER("夏天","夏日炎炎");
    // 声明season对象属性 private final 修饰
    private final String seasonName;
    private final String seasonDesc;
    // 私有化类的构造器
    private Season1(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }

    // 获取属性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

}

使用enum关键字定义枚举类实现接口的情况

  • 实现接口,在enum中实现抽象方法

public class SeasonTest2 {
    public static void main(String[] args) {
        Season2 spring = Season2.valueOf("SPRING");
        spring.show();
        // 展示一段话
    }
}
interface info{
    void show();
}
enum Season2 implements info{

    //1.提供当前枚举类的多个对象,多个对象之间用逗号隔开
    SPRING("春天","春暖花开"),
    SUMMER("夏天","夏日炎炎");
    // 声明season对象属性 private final 修饰
    private final String seasonName;
    private final String seasonDesc;
    // 私有化类的构造器
    private Season2(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }

    // 获取属性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    @Override
    public void show() {
        System.out.println("展示一段话");
    }
}
  • 每个成员接口显示不一样的

public class SeasonTest2 {
    public static void main(String[] args) {
        Season2 spring = Season2.valueOf("SPRING");
        spring.show();
        // 春天展示
    }
}
interface info{
    void show();
}
enum Season2 implements info{

    //1.提供当前枚举类的多个对象,多个对象之间用逗号隔开
    SPRING("春天","春暖花开"){
        @Override
        public void show() {
            System.out.println("春天展示");
        }
    },
    SUMMER("夏天","夏日炎炎"){
        @Override
        public void show() {
            System.out.println("夏天展示");
        }
    };
    // 声明season对象属性 private final 修饰
    private final String seasonName;
    private final String seasonDesc;
    // 私有化类的构造器
    private Season2(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }

    // 获取属性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
}

注解(Annotation)

  • Annotation是代码中的特殊标记
  • 在编译,类加载,运行时被读取,并执行对应的操作
  • Annontation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量声明

生成文档相关的注解

注解 说明
@author 表明开发该类的作者,多个用‘,’分割
@version 表明该类模块的版本
@see 参考转向,也就是主题
@since 从哪个版本开始增加的
@param 对方法中某参数说明,没参数就不写
@return 对方法返回值说明,void就不写
@exception 对方法可能抛出异常说明,没throw显示抛出异常就不写

注:

  • @param,@return,@exception这三个方法只用于方法
  • @param格式要求 @param 形参名,形参类型,形参说明
  • @return格式要求 @return 返回值类型 返回值说明
  • @exception格式要求 @exception 异常类型,异常说明

编译时进行格式检查(JDK内置三个基本注解)

注解 说明
@Override 限定重写父类方法
@Deprecated 用于表示所修饰的元素已过时
@SuppressWarnings 抑制编译器警告

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

  • Servlet3.0提供了注解,使得不再需要在web.xml文件中进行Servlet的部署
  • Spring中事务管理

自定义注解

  • 注解声明为@interface
  • Annotation的成员变量在定义中以无参数方式方法的形式来声明,其方法名和返回值定义了该成员的名字和类型
  • 如何自定义成员没有值,起到标识作用
public @interface MyAnnotation {
    String value() default "hello";
}

JDK中的元注解

注解 说明 取值
@Retention 只能用于修饰一个Annotation定义,用于指定该Annotation类的生命周期,@Retention包含一个RetentionPolicy类型的成员变量 SOURCE(编译时抛弃)CLASS(不加载到内存里)RUNTIME(加载到内存,通过反射获取)
@Target 用于修饰Annotation,用于指定修饰的Annotation能用于修饰哪些程序元素 CONSTRUCTOR(构造器)FIFLD(域)LOCAL_VARIABLE(局部变量)METHOD(方法)
@Documented 该Annotation类将被javadoc工具提成文档
@Inherited 被他修饰的Annotation将具有继承性

可重复注解

  • 可以在一个类上多次注解
  • 在MyAnnotation上声明@Repeatable,成员之为MyAnnotations.class
  • MyAnnotation的Target和Retention等元注解和MyAnnotations相同

你可能感兴趣的:(JAVA基础,java18,java,数据库)