第八章 ---- 枚举注解
文章目录
- 枚举
- 枚举类说明
- 枚举类的使用:入门
- 枚举类的主要方法
- 实现接口
- 注解
- 常见示例
- 示例一:生成文档相关注解
- 示例二:在编译时进行格式检查(JDK内置的三个基本注解)
- 示例三:跟踪代码依赖性,实现替代配置文件功能
- 自定义注解
- 元注解
- JDK 8 注解新特性
如何自定义枚举类
如何使用关键字enum定义枚举类
Enum类的主要方法
实现接口的枚举类
枚举
枚举类说明
枚举类实现
- JDK1.5之前,需要自定义枚举类
- JDK1.5新增的enum关键字用于定义枚举类
若枚举只有一个对象,则可以作为一种单例模式的实现方式
枚举类的属性
- 枚举类对象的属性不应允许被改动,所以应该使用 private final 修饰
- 枚举类的使用 private final 修饰的属性应该在狗仔器中为其赋值
- 若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数
枚举类的使用:入门
- 类的对象只有有限个,确定的。
- 当需要定义一组常量时,强烈建议使用枚举类
方式一:
/*** 自定义枚举类*/ class Season {//1. 声明Season对象的属性:private final 修饰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. 提供get方法:获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc(){return seasonDesc;}@Overridepublic String toString() {return "Season{" +"seasonName='" + seasonName + '\'' +", seasonDesc='" + seasonDesc + '\'' +'}';} }public class test01{@Testpublic void demo1(){Season spring = Season.SPRING;System.out.println(spring);System.out.println(spring.getSeasonName() + " " +spring.getSeasonDesc());} }
public class test02 {@Testpublic void demo(){Status busy = Status.BUSY;System.out.println(busy);System.out.println(busy.getNAME());} }/*** 自定义枚举类*/ class Status{//1. 声明Status属性,private final修饰,成员常量private final String NAME;//2. 提供构造方法,为属性初始化public Status(String NAME) {this.NAME = NAME;}//3. 提供枚举对象public static final Status FREE = new Status("FREE");public static final Status BUSY = new Status("BUSY");public static final Status VOCATION = new Status("VOCATION");//4. 提供获取属性的方法public String getNAME() {return NAME;}@Overridepublic String toString() {return NAME;} }
方式二:
/*** 使用enum关键字定义枚举类* 说明:定义的枚举类默认继承与java.lang.Enum类**/ public enum Season2 {//1. 提供当前枚举类的对象,多个对象用","隔开,末尾对象";"结束 默认是public static final 修饰SPRING("spring","春"),SUMMER("summer","夏"),AUTUMN("autumn","秋"),WINTER("winter","冬");//2. 声明 对象属性:private final修饰 (默认无修饰)private final String seasonName;private final String seasonDesc;//3. 私有化构造器,并给对象属性赋值(默认就是private 修饰)Season2(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}//4. 提供属性的get方法public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//默认继承与Enum对象,默认打印的是对象的名称 }
枚举类的主要方法
values()
方法:返回枚举类型的对象数组。该方法可以方便遍历所有的枚举值。
valueOf(String str)
:可以吧字符串转为对应的枚举类对象。要求字符串必须是枚举类对象,否则抛异常
toString(): 返回当前枚举类对象常量的名称
@Testpublic void demo4(){//values()Season2[] values = Season2.values();for (int i = 0; i < values.length; i++) {System.out.println(values[i]);}//SPRING//SUMMER//AUTUMN//WINTERThread.State[] values1 = Thread.State.values();for (int i = 0; i < values1.length; i++) {System.out.println(values1[i]);}//NEW//RUNNABLE//BLOCKED//WAITING//TIMED_WAITING//TERMINATED//************************//valueOf(String objName)//如果没有objName的枚举对象,抛异常IllegalArgumenExceptionSeason2 winter = Season2.valueOf("WINTER");System.out.println(winter);}
实现接口
/*** 实现接口*/
public class test5 {@Testpublic void demo(){Season3.SPRING.show();Season3.WINTER.show();}
}public interface info {void show();
}public enum Season3 implements info {//每个枚举对象都可以重写接口中的方法,同时也可以覆盖本类中的方法SPRING("spring", "春"){@Overridepublic void show() {System.out.println("我是春天,我不一样");}},SUMMER("summer", "夏"),AUTUMN("autumn", "秋"),WINTER("winter", "冬");private final String seasonName;private final String seasonDesc;Season3(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//枚举类重写接口中的方法@Overridepublic void show() {System.out.println("一年四季");}
}
注解
概述
常见的示例
自定义注解
JDK元注解
利用反射获取注解信息(在反射部分涉及)
JDK8中注解的新特性
- 在JavaSE中,注解的使用目的比较简单,例如标记过时功能,忽略警告等。
- 在JavaEE/Android中注解占据了重要角色,例如配置应用程序的任何切面,代替JavaEE旧版遗留的繁冗代码和XML配置等。
- 未来的开发模式都是基于注解的,JPA是基于注解的,spring,Mybatis,Hibernate3.x,struts2等,注解是一种趋势,一定程度上可以说:框架 = 注解 + 反射 +设计模式
常见示例
示例一:生成文档相关注解
@author
作者,多个作者用","分割
@version
@see
参考转向
@since
从哪个版本开始增加
@param
参数
@return
返回值
@exception
异常
@throws
和@excepton 同意
package com.annotation.javadoc;
/*** @author shkstart* @version 1.0* @see Math.java*/
public class JavadocTest {/*** 程序的主方法,程序的入口* @param args String[] 命令行参数*/public static void main(String[] args) {}/*** 求圆面积的方法* @param radius double 半径值* @return double 圆的面积*/public static double getArea(double radius){return Math.PI * radius * radius; }
}
示例二:在编译时进行格式检查(JDK内置的三个基本注解)
@Override
:限定重写父类方法
@Deprecated
已过时
@SuppressWarnings
: 抑制编译器警告
package com.annotation.javadoc;
public class AnnotationTest{public static void main(String[] args) {@SuppressWarnings("unused")int a = 10;}@Deprecatedpublic void print(){System.out.println("过时的方法");}@Overridepublic String toString() {return "重写的toString方法()"; }
}
示例三:跟踪代码依赖性,实现替代配置文件功能
自定义注解
- 定义注解使用 @interface关键字
- 自动继承java.lang.annotation.Annotation接口
- 注解成员:以无参方法形式声明。方法名,返回值定义类该成员的名字和类型。我们称为配置参数
类型只能是:基本数据类型、String、Class、enum、Annotation、以上所有类型数组- 可以在定义 注解 的成员变量时为其指定初始值,指定成员变量初始值可以使用default 关键字
- 如果只有一个参数成员,建议使用 value
- 如果定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认值。格式是"参数名 = 参数值",如果只有一个参数成员,且名称为 value,可以省略 ”value=“
- 没有成员定义的 注解 称为标记;包含成员变量的 注解称为元数据 注解
注意:自定义注解必须配上注解的信息处理流程才有意义
自定义注解,通常会指明两个注解:Retention、Target
import java.lang.annotation.*;@MyAnnotation
public class test1 {public static void main(String[] args) {Class<test1> test1Class = test1.class;MyAnnotation annotation = test1Class.getAnnotation(MyAnnotation.class);String value = annotation.value();System.out.println(value);}
}@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotation{String value() default "zs";
}
元注解
对现有注解进行说明的注解
Retention
Target
Documented
Inherited
@Retention: 只能用于修饰一个 Annotation 定义,用于指定该 Annotation的生命周期,
@Rentention,包含一个RetentionPolicy类型的成员变量,使用@Rentention时必须为该value成员变量指定值:
- RetentionPolicy.SOURCE:在源文件中有效
- RetentionPolicy.CLASS:在class文件中有效
- RetentionPolicy.RUNTIME: 在运行时有效,反射处理信息
@Target:指明自定义注解可修饰的位置
Documented: 表示所修饰的注解在被javadoc解析时,保留下来。
Inherited: 被它修饰的 Annotation 将具有继承性
JDK 8 注解新特性
可重复注解:在需要重复的注解上添加 @Repeatable(关联注解类型)
被关联注解需要有相同的 Retention , Target,inherited
被关联注解中需要声明属性为关联注解类型的数组
类型注解:
TYPE_PARAMETER: 泛型注解
TYPE_USE:类型注解
第八章 ---- 枚举注解相关推荐
- Java 枚举注解反射
4-9 枚举&注解&反射 枚举 引入的目的:用于定义有限数量的一组同类常量,限定了使用者在使用时常量的取值范围. Java中枚举的演变: java1.5前使用类+final修饰变量+私 ...
- java 枚举 注解_Java枚举类和注解梳理
1. 枚举类 1. 枚举类的使用 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类. 当需要定义一组常量时,强烈建议使用枚举类. 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. ...
- JavaSE - 14 枚举 + 注解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.枚举 1.1 概述 1.2 枚举的定义格式 1.3 枚举常用的方法 2.注解 2.1 注解概述 2.2 自定义注解 2. ...
- Java学习笔记day26-xml枚举注解
XML XML是一种可扩展的标记语言:标签语言是通过标签来描述数据的一门语言:可扩展是指标签的名字是可以自定义的. 作用: 用于存储数据和传输数据 作为软件的配置文件 XML标签规则 XML语法规 ...
- 枚举注解反射整合详解
一丶枚举 1 ** 2 * 一.枚举类的使用 3 * 1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 4 * 2.当需要定义一组常量时,强烈建议使用枚举类 5 * 3.如果枚举类中只 ...
- 枚举 注解 常量的使用区别
虽然我今天要打脸,介绍如何使用注解,慎用枚举,但其实在之前的文章最后,我很明显的提议大家分场景的使用: 最后,声明一点,我所说的使用枚举替换常量,是针对类似于 "常量之间存在关联" ...
- C#图解教程 第十八章 枚举器和迭代器
枚举器和迭代器 枚举器和可枚举类型 第12章中,我们看到可以用foreach语句遍历数组.在本章,我们会进一步探讨数组,来看看为什么它们可以被foreach语句处理.我们还会研究如何使用迭代器为用户自 ...
- Android快速开发整理(库、插件,kotlin枚举注解
RxAndroid implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' Github:https://github.com/ReactiveX/ ...
- 第七章、 面向对象基础--下(续) 内部类、枚举、注解
文章目录 内容 学习目标 第七章 面向对象基础--下(续) 7.7 内部类 7.7.1 概述 7.7.1 非静态成员内部类 练习1:语法练习题 练习2:简单面试题 练习题3:高难面试题 7.7.2 静 ...
最新文章
- struts基本原理图
- js输出一个菱形_Threejs使用菱形正方形算法,中点替换算法生成随机地形
- 【Linux多线程】三个经典同步问题
- SVM 实现与代码(转)
- 资讯|WebRTC M94 更新
- mysql decimal(6_MySQL(六) decimal数据默认处理
- 热血上头!程序员想拍桌子离职的1000个瞬间...
- UVA 10624 Super Number
- 刷屏!黄晓明杨颖官宣离婚,两人已无商业关联
- 4、Spring配置中的classpath:与classpath*:的区别
- Tomcat服务器报错IOException: Broken pipe
- 内置函数(内嵌函数或内联函数)
- linux恢复树莓派内存卡容量,找回树莓派SD卡剩余空间
- Leetcode 1284 Minimum Number of Flips to Convert Binary Matrix to Zero Matrix
- 安装apk文件到linux,linux系统如何安装apk文件
- 微信小程序表单必填项设置
- 叉乘点乘混合运算公式_小学数学所有公式和顺口溜都在这里了,考试肯定能用到!...
- UVALive 7269 	Snake Carpet
- 数学基础task08 二重积分
- 知识图谱 语义网络,语义网,链接数据和知识图谱 (二)--基础篇