1.枚举类的使用

当类的对象由有限个,确定的时候,我们称这种类为枚举类。当需要定义一组常量时,建议使用枚举类。而当枚举类中只有一个对象时,可以使用单例模式

1.1 enmu关键字

省略private finnal以及new Season部分:

enum Season {
SPRING("春天", "春暖花开"),
SUMMER("夏天", "热");
private final String seasonName;
private final String seasonDesc; private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
} public String getSeasonName() {
return seasonName;
} public String getSeasonDesc() {
return seasonDesc;
} public static Season getSPRING() {
return SPRING;
} public static void setSPRING(Season SPRING) {
Season.SPRING = SPRING;
}
}

1.2 自定义枚举类

    private final String seasonName;
private final String seasonDesc; private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
} public static Season SPRING = new Season("春天", "春暖花开"); public String getSeasonName() {
return seasonName;
} public String getSeasonDesc() {
return seasonDesc;
} public static Season getSPRING() {
return SPRING;
} public static void setSPRING(Season SPRING) {
Seasoon.SPRING = SPRING;
}
}

1.4 Enum类的主要方法

values() Season[] values = Season.values();查看类的所有枚举对象
valueOf(String objName) 返回对象名是objName的对象,如果没有则抛出IllegalArgumentException异常
toString() 返回当前枚举对象常量的名称

1.5 Enum关键字定义的枚举类实现接口

情况一:枚举类中实现接口中的抽象方法。

情况二:让枚举类的对象分别实现抽象方法。

SPRING("春天", "春暖花开"){
void show() {
System.out.println("Spring");
}
},
SUMMER("夏天", "热") {
@Override
public void show() { }
};

2.注解 Annotation

框架=注解 + 反射 + 设计模式

示例一:

![](file://E:\File\myNote\Java\枚举类和注解\1.png?msec=1666421005896)

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

@ Override:限定重写

@ Deprecated:所修饰的元素(类、方法)已过时

@ SuppressWarnings:抑制编译器警告

如:SuppressWarnings("unused"), SuppressWarnings("rawtypes")

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

servlet3.0提供了注解,使得不需要在web.xml文件中进行servlet的部署。

自定义注解

@ interace 声明注解

public @interface  MyAnnotation {
String value();
}
@goodsTest.MyAnnotation(value = "hello")
class Person { } public @interface MyAnnotation {
String value() default "hello";
} @goodsTest.MyAnnotation()
class Person { }

内部使用成员只有一个时通常用value,可以指定成员的默认值,使用default定义。如果自定义注解没有成员,则表明注解只有标识作用。

jdk提供的元注解

修饰其他现有的Annotation注解进行解释说明的注解,需要加载注解的定义而不是声明处。

@Retention:用于指明Annotation的声明周期

@Retention(RetentionPolicy.RUNTIME)

包含一个RetentionPolicy类型的成员变量,使用Retention必须为该value指定值:

RetentionPolicy.SOURCE 源文件保留
RetentionPolicy.CLASS class保留,不会加载到内存中
RetentionPolicy.RUNTIME 运行时保留,只有声明为RUNTIME生命周期的注解,才能通过反射获取。

@Target:用于指定被修饰的Annotation能修饰哪些元素

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

包含一个类型的成员变量,使用Retention必须为该value指定值:

value值 用于描述
CONSTRUCTOR 构造器
FIELD
LOCAL_VARIABLE 局部变量
METHOD 方法
PACKAGE
PARAMETER 参数
TYPE 类、接口(包括注解类型)或enum声明

@Documented:表示所修饰的注解被javadoc解析时会被保留到javadoc文档中,默认不保留。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

@Inherited:被修饰过的Annotation具有继承性。

3.jdk8注解的新特性

3.1 可重复注解

jdk8之前的写法:

public @interface MyAnnotation {
String value() default "hello";
}
public @interface MyAnnotations {
MyAnnotation[] value();
}
@MyAnnotations({@MyAnnotation(value = "hello"), @MyAnnotation(value = "hello")})

jdk8之后的写法:在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class。

@Repeatable(MyAnnotations.class)
public @interface MyAnnotation {
String value();
}

3.2 类型注解

ElementType.TYPE_PARAMETER 该注解能写在类型变量的声明语句中(如泛型声明)。

ElementType.TYPE_USE 该注解能写在使用类型的任何语句中。

【Java SE】枚举类和注解的更多相关文章

  1. Java笔记---枚举类和注解

    Java笔记---枚举类和注解 一.枚举类 自定义枚举类 方式一:JDK5.0之前自定义枚举类 class Seasons { //1. 声明Seasons对象的属性 private final St ...

  2. java基础---枚举类与注解

    一.枚举类 类的对象只有有限个,确定的.我们称此类为枚举类 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. 定义枚举类 方式一:jdk5.0之前,自定义枚举类 public class Se ...

  3. 【Java基础】枚举类与注解

    枚举类与注解 枚举类的使用 当需要定义一组常量时,强烈建议使用枚举类. 枚举类的理解:类的对象只有有限个,确定的. 若枚举只有一个对象, 则可以作为一种单例模式的实现方式. 枚举类的属性: 枚举类对象 ...

  4. Java枚举类、注解和反射

    本文主要介绍的是枚举类,注解和反射.还有一些基础知识:static,基本数据类型,运算符优先级放在文中,以便查阅复习. 其中牵扯到泛型的部分,可参考本人的另一篇博客:(Collection, List ...

  5. Java学习——枚举类

    Java学习——枚举类 摘要:本文主要介绍了Java的枚举类. 部分内容来自以下博客: https://www.cnblogs.com/sister/p/4700702.html https://bl ...

  6. Java SE 枚举,注解,增强for循环

    Java SE 进阶 1.Enum 枚举对象名通常使用全部大写,常量的命名规范 构造器私有化 本类内部创建一组对象 对外暴露对象(通过为对象添加 public final static 修饰符) 可以 ...

  7. Java语法基础学习DayThirteen(枚举类和注解)

    一.枚举类 1.概述:即一个类中只能有有限个对象,若只有一个对象,则可以作为单例模式的一种实现. 2.自定义枚举类(JDK1.5以前这么做) //枚举类 class Season{ //1.提供类的属 ...

  8. Java枚举类和注解梳理

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

  9. Java枚举类与注解详解——一篇文章读懂枚举类与注解详

    目录 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举类实现接口 二.注解 ① 生成文档相关注解 ②注解在编译时进行格式检查 ③注解跟踪代码的 ...

  10. 【Java】 枚举类

    如果要定义一个枚举类: public enum Size { SAMLL, MEDIUM, LARGE, EXTRA, EXTRA_LARGE}; 实际上,这个声明定义的类型是一个类,它刚好有4个实例 ...

随机推荐

  1. spring管理配置文件实现注入

    创建配置文件 写入以下内容: 创建配置文件的bean: <bean id="configProperties" class="org.springframework ...

  2. CF823div2B

    cf823div2B 题目链接 题目大意 多组测试数据,有\(n\)个点在数轴上,他们想要集会,每个点到目标点\(y\)的时间为$$t_i+|x_i-y|$$ 试求所有点到\(y\)中最长时间的最小值 ...

  3. Linux下将普通用户文件移动到root用户下

    步骤: 将普通用户的文件拷贝到tmp目录下 cp /Desktop/1.txt /tmp 从普通用户切到root用户 su - root用户从tmp中取文件到指定目录/var/test cp /tmp ...

  4. 初识MPC

    MPC调研报告 ​ 这是一篇关于MPC的调研报告,主要介绍了我对MPC领域的一些基础认识.全文按照这样的方式组织:第一节我介绍了什么是MPC以及MPC的起源:第二节介绍了MPC领域常用的一些符号和安全 ...

  5. nvm use时报错 exit status 1:一堆乱码,exit status 5

    如图,nvm list 的时候,在只有一个node版本的时候,也没有指向,表示未启用到这个版本 当使用nvm use 12.13.1的时候,报错 原因是我在之前多次安装node,出错了就删除包,再次安 ...

  6. webpack之性能优化(webpack4)

    在讲解性能优化的方案之前,我们需要了解一下webpack的整个工作流程, 方案一:减少模块解析 也就是省略了构建chunk依赖模块的这几个步骤 如果没有loader对该模块进行处理,该模块的源码就是最 ...

  7. 一文带你吃透Redis

    目录 1. 基本数据结构 2. 数据持久化 3. 高可用 4. 缓存 文章字数大约1.9万字,阅读大概需要66分钟,建议收藏后慢慢阅读!!! 1. 基本数据结构 什么是Redis Redis是一个数据 ...

  8. 基于声网 Flutter SDK 实现多人视频通话

    前言 本文是由声网社区的开发者"小猿"撰写的Flutter基础教程系列中的第一篇.本文除了讲述实现多人视频通话的过程,还有一些 Flutter 开发方面的知识点.该系列将基于声网 ...

  9. 开源规则引擎——ice:致力于解决灵活繁复的硬编码问题

    背景介绍 业务中是否写了大量的 if-else?是否受够了这些 if-else 还要经常变动? 业务中是否做了大量抽象,发现新的业务场景还是用不上? 是否各种调研规则引擎,发现不是太重就是接入或维护太 ...

  10. 详解uniapp和vue在路由方面的不同和联系

    Uniapp 和 Vue 在路由方面有相似之处,因为 Uniapp 是基于 Vue 的.Uniapp 的路由系统是通过 Vue Router 实现的,因此两者有许多相同的概念和 API. 相同点: 都 ...