JAVA枚举和注解

什么是枚举?

是一组常量的集合

1、可以理解成:枚举属于一种特殊的类,里面只包含一组有限的特定对象

设么是注解?

1.注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息


实现枚举

自定义类实现枚举

  • 将构造器私有化,防止直接new
  • set相关的方法去掉,防止属性被修改
  • 在该类的内部,创建固定的对象
  • 对枚举对象/属性使用final+static共同修饰,实现底层优化
  • 枚举的对象名通常使用大写字母,常量命名规范
package enum_;

/**
 * @author Zyq
 * @version 1.0
 */
public class Enumeration01 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
        System.out.println(Season.SPRING);
        System.out.println(Season.WINTER);
        System.out.println(Season.SUMMER);

    }
}

class Season {
    private String name;
    private String desc;//描述

    //定义四个对象
    public static final Season SPRING = new Season("春天", "温暖");
    public static final Season WINTER = new Season("冬天", "寒冷");
    public static final Season AUTUMN = new Season("秋天", "凉爽");
    public static final Season SUMMER = new Season("夏天", "炎热");


    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

使用(enum)关键字实现枚举

  • 使用关键字enum替代class
  • 常量名(实参列表)
  • public static final Season SPRING = new Season("春天", "温暖");Season("春天", "温暖");
  • 如果有多个使用","间隔
  • 如果使用enum来实现枚举,要求将定义常量对象,卸载写在最前面(语法规定)
package enum_;

/**
 * @author Zyq
 * @version 1.0
 */
public class Enumeration02 {
    public static void main(String[] args) {
        System.out.println(Season2.SPRING);

    }
}

enum Season2 {
    SPRING("春天", "温暖"), SUMMER("夏天", "炎热");

    private String name;
    private String desc;//描述

    private Season2(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

enum实现接口

  • 使用enum关键字后,就不能再继承其他类了,因为enum会隐式的继承Enum.而Java是单继承机制
  • 枚举类和普通类一样,可以实现接口,形式如下
    • enum 类名 implements 接口1,接口2{}

深入了解枚举类型

  • 当我们使用enum关键字来开发一个枚举类的时候,会默认继承enum类,而且是一个final类

枚举类型的常用方法

方法含义使用方法
values()将枚举类型的成员以数组的形式返回枚举名.values()
valueOf()可以实现将普通字符串转换枚举实例枚举名.valueOf()
compareTo()用来比较两个枚举对象在定义时的顺序枚举名.compareTo()
ordinal()得到枚举成员的顺序枚举名.ordinal()

values():

/**
 * @author Zyq
 * @version 1.0
 */
public class ShowEnum {
    public static void main(String[] args) {
        Season3[] season3 = Season3.values();
        for (Season3 i : season3) {
            System.out.println(i);
        }
    }
}
enum Season3{
    AUTUMN,SPRING,WINTER,SUMMER
}

valueOf()和compareTo()方法

ordinal()


注解

  • 注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息
  • 和注释一样,注解不影响程序逻辑,但是注解可以被编译或运行,相当于嵌再代码中的补充信息
  • 在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的校色,例如用来配置应用程序的任何切面,代替Java EE旧版中所遗留的繁冗代码和XML配置。

基本的 Annotation 介绍:

在使用Annotation时要在其前面加上 @ 符号,并把该Annotation 当成一个修饰符使用,用于修饰它支持的程序元素

三个基本的Annotation:

@Override:限定某个方法,是重写父类方法,该注解只能用于方法 ② @Deprecated:用于表示某个程序元素(类、方法)已经过时 ③ @SuppressWarnings:抑制编译器警告

@Override注解

注意:写了@Override就代表重写了父类的方法,编译器会去校验是否是重写,如果发现并不是重写,那么编译器就会报错

补充说明: @interface 不是指这个是一个 interface 接口,而是一个注解类,是在jdk5.0过后才加入的

Override 使用说明: 1、@Override 表示指定重写父类的方法(可以从编译层面去验证),如果父类没有此方法,则会报错

2、如果不写 @Override 注解,但是子类中还是有父类的方法,那么仍然构成重写

3、@Override 只能修饰方法,不能修饰其他类、包、属性等

4、查看@Override 注解源码为: 说明只能修饰方法

5、@Target 是修饰注解的注解,称为元注解

@Deprecated 注解

@Deprecated 用于表示某个程序元素(类、方法)已过时

@Dprecated** 说明:**1、用于表示某个程序元素(类、方法等)已过时

2、可以修饰:方法、类、包、字段、参数 等等

3、可以修饰以下:

@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, 
METHOD, PACKAGE, PARAMETER, TYPE})

@Deprecated 的作用可以做到新旧版本的兼容和过渡

@SuppressWarnings 注解

@SuppressWarnings :抑制编译器警告(就是代码中黄色警告

从SuppressWarnings 源码中可以看到:


@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    String[] value();
}

1、可以放置的位置有: TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE

2、该注解类有数组 String[] value(),说明可以设置一个数组,比如: @SuppressWarnings({“rawtypres”,“unchecked”,“unused”})


元注解:对注解进行解释

元注解基本介绍:

JDK 的 元注解Annotation 用于修饰其他 Annotation

元注解:本身的作用不大,但是可以让人们在看源码的时候,知道是干嘛的

元注解的种类:

Retention 指定注解的作用范围,三种:SOURCE、CLASS、RUNTIME

Target 指定注解可以在哪些地方使用

Documented 指定该注解是否惠再javadoc中体现

Inherited 子类会继承父类注解

Retention注解

**说明:**只能用于修饰一个 Annotation 定义,用于指定该 Annotation 可以保留多长时间,@Retention 包含一个 RetentionPolicy 类型成员,只用 @Retention时必须为该 value 成员变量指定值。

@Retention三种值:

Target 注解

说明:
用于修饰Annotation定义,用于指定被修饰的 Annotation 能用于哪些程序元素,@Target 也包含一个名为 value 的成员变量

Documented 注解

说明: @Documented 用于 指定被该 元Annotation 修饰的 Annotation 类 将被 javadoc 工具提取成文档,也就是在生成文档的时候,在文档中可以看到该注解

注: 定义为Documented的注解,必须设置 Retention的值为 RUNTIME (主要是要被保留在文档中)

Inherited 注解

说明:
被 @Inherited修饰的 Annotation 将具有继承性,也就是,如果某一个类使用了被 @ Inherited修饰的 Annotation ,则这个类的子类也将自动具有该注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值