【Java SE】枚举类和注解
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
框架=注解 + 反射 + 设计模式
示例一:

示例二:在编译时进行格式检查(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】枚举类和注解的更多相关文章
- Java笔记---枚举类和注解
Java笔记---枚举类和注解 一.枚举类 自定义枚举类 方式一:JDK5.0之前自定义枚举类 class Seasons { //1. 声明Seasons对象的属性 private final St ...
- java基础---枚举类与注解
一.枚举类 类的对象只有有限个,确定的.我们称此类为枚举类 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. 定义枚举类 方式一:jdk5.0之前,自定义枚举类 public class Se ...
- 【Java基础】枚举类与注解
枚举类与注解 枚举类的使用 当需要定义一组常量时,强烈建议使用枚举类. 枚举类的理解:类的对象只有有限个,确定的. 若枚举只有一个对象, 则可以作为一种单例模式的实现方式. 枚举类的属性: 枚举类对象 ...
- Java枚举类、注解和反射
本文主要介绍的是枚举类,注解和反射.还有一些基础知识:static,基本数据类型,运算符优先级放在文中,以便查阅复习. 其中牵扯到泛型的部分,可参考本人的另一篇博客:(Collection, List ...
- Java学习——枚举类
Java学习——枚举类 摘要:本文主要介绍了Java的枚举类. 部分内容来自以下博客: https://www.cnblogs.com/sister/p/4700702.html https://bl ...
- Java SE 枚举,注解,增强for循环
Java SE 进阶 1.Enum 枚举对象名通常使用全部大写,常量的命名规范 构造器私有化 本类内部创建一组对象 对外暴露对象(通过为对象添加 public final static 修饰符) 可以 ...
- Java语法基础学习DayThirteen(枚举类和注解)
一.枚举类 1.概述:即一个类中只能有有限个对象,若只有一个对象,则可以作为单例模式的一种实现. 2.自定义枚举类(JDK1.5以前这么做) //枚举类 class Season{ //1.提供类的属 ...
- Java枚举类和注解梳理
1. 枚举类 1. 枚举类的使用 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类. 当需要定义一组常量时,强烈建议使用枚举类. 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. ...
- Java枚举类与注解详解——一篇文章读懂枚举类与注解详
目录 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举类实现接口 二.注解 ① 生成文档相关注解 ②注解在编译时进行格式检查 ③注解跟踪代码的 ...
- 【Java】 枚举类
如果要定义一个枚举类: public enum Size { SAMLL, MEDIUM, LARGE, EXTRA, EXTRA_LARGE}; 实际上,这个声明定义的类型是一个类,它刚好有4个实例 ...
随机推荐
- 2003031120—廖威—Python数据分析第四周作业—matplotlib的学习
项目 内容 课程班级博客链接 20级数据班(本) 这个作业要求链接 python数据分析第四周作业要求 博客名称 2003031120-廖威-Python数据分析第四周作业-matplotlib的学习 ...
- 区分 PaaS、IaaS 、SaaS
- 自动备份一个TXT文件里面的SVN库
之前的项目都是使用SVN进行代码管理,万一SVN挂了,,,项目全部爆炸,,,所以定时备份还是有必要的,,,虽然现在都不用SVN了,,,记录一下自己的备份方法 --------------------- ...
- Java新手问题 请问各路大佬这是什么问题导致的呢?
- Javascript 事件派发 dispatcher
基本使用 基础事件 let event = new Event("click") //新建click事件 node.addEventListener("click&quo ...
- Asp.net zero项目框架和配置
- Manage your references to .Net assemblies Dynamics 365 for Operations VS projects
(Dynamics 365 for Operations was previously known as the New Dynamics AX) Dynamics 365 for Operation ...
- 为什么对1e9 + 7取模
在刷题的时候,很多题目答案都要求结果对1e9 + 7取模 刚开始我非常不理解,为什么要取模,取模难道结果不会变吗? 答案是结果会变,但因为原本需要得出的答案可能超出int64的范围,比如他叫你计算50 ...
- TensorFlow 的 Graph 模式转换
定义 TensorFlow 图形并将其保存到磁盘上. 使用 TensorFlow 的 tf.Graph() 和 tf.Session() 函数来定义和运行 TensorFlow 图形,并使用 tf.t ...
- mysql数据库用sql语句在指定的一个字段后面添加一个字段
alert table (新增列的表名) add (新列名) comment (添加备注)+[after + 要跟随的字段名]可写可不写 ALTER TABLE ch_poliy_info AD ...