6.1 枚举类型
6.1.1 枚举的概念
- enumeration、enum
- 一组常量类型的集合。
- 是一种特殊的类,只包含有限的特定的对象,与Object并列
- 特点:
- 属性不允许被改动:属性使用private final修饰、且不设置setter
- 为了能够初始化属性,使用构造器传参的方式,在构造器内赋值。
- 在枚举类内创建实例。
6.1.2 枚举类型的实现
- 自定义类(JDK1.5之前):
- 私有化属性,只配置getter,不配置seter:防止属性被修改
- private final修饰
- 私有化构造器:防止new
- private修饰
- 在类内部,创建公开的枚举对象
- 命名规范:属性名使用大写形式
- 对象使用public static final修饰,进行底层优化
- 三个可省略任意多个
- enum关键字(JDK1.5之后):
enumSeason{ SPRING("春天", "温暖"), SUMMER("夏天", "炎热"); privateStringname; privateStringdesc; privateSeason(Stringname, Stringdesc){ this.name=name; this.desc=desc; } namgetter; descgetter; }
- 使用enum关键字的注意点:
- 枚举类:
- 枚举类前默认有final关键字,所以枚举类不能被继承
- final的特性导致
- 默认继承自java.lang.Enum类,所以也不能继承其他类
- 枚举对象:
- 实例化的枚举类对象必须声明在枚举类的首行
- 实例化的枚举类对象必须与构造器的参数对应,且枚举对象必须传入参数
- 实例化的枚举对象前默认有public static final,可以省略任意多个
- 构造器:
- 使用无参构造器实例化枚举类对象时,枚举对象的括号可以省略
- 构造器默认使用private修饰,可以省略
- 属性:
- 默认使用private final修饰,可以省略
6.1.3 常用方法
- enum声明的类会隐式继承Enum类,因此可以使用Enum中的相关方法:
toString()
:返回当前对象名,声明enum类时可重写,用于返回类中的属性内容name()
:返回当前对象名,不能重写。
- 有限使用
toString()
ordinal()
:返回当前对象的位置号,从0开始values()
:返回当前枚举类中的所有实例化对象,返回一个enum声明的枚举类型数组valueOf()
:返回指定字符串的实例化对象,如果传入的字符串枚举类中没有,会报错
- 传入的字符串名称要跟实例化对象名一致
compareTo()
:比较两个枚举常量的位置编号,返回常量值。
- 调用的 - 参数的
6.1.4 enum实现接口
- 语法:
enum 类名 implements 接口 1,接口 2{}
6.1.5 枚举配合switch-case
- switch()中传入一个枚举对象,case后是枚举对象的值
6.2 注解(Anotation)
6.2.1 概念
- 含义:又称为元数据(Meatdata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。
- 特点:和注释一样,不影响程序运行,但注解可以被编译或运行,相当于嵌入代码的补充信息。
- 功能:
- javase中,注解主要用于标记过时功能、忽略警告等
- Javaee中,可以用于配置应用程序的任何切面,代替旧版javaee中的繁冗代码和XML配置
6.2.2 常见类型及基本使用
@Override
:方法前使用,表示重写父类方法
- 只能用在方法前。
- 重写的方法前不写该注解不影响编译运行
- 如果写了该注解,程序在编译阶段检查是否真正重写。
- 非重写时会报错。
@Deprecated
:表示程序元素(类、方法等)已过时。
- 可以用在类、方法(构造器)、变量(成员变量、局部变量)、包等
- 用于新旧版本的兼容和过渡
@SuppressWarnings()
:抑制编译器警告
- 可以用在类、方法(构造器)、变量(成员变量、局部变量)、包等
- 主要用在方法、类前
()
:传入字符串值,表示抑制的警告类型
- 多种类型时,可以传入数组字面量
{}
- 作用范围与书写位置有关
@SuppressWarning
中的属性介绍以及属性说明
- all,抑制所有警告
- boxing,抑制与封装/拆装作业相关的警告
- cast,抑制与强制转型作业相关的警告
- dep-ann,抑制与淘汰注释相关的警告
- deprecation,抑制与淘汰的相关警告
- fallthrough,抑制与switch陈述式中遗漏break相关的警告
- finally,抑制与未传回finally区块相关的警告
- hiding,抑制与隐藏变数的区域变数相关的警告
- incomplete-switch,抑制与switch陈述式(enum case)中遗漏项目相关的警告
- javadoc,抑制与javadoc相关的警告
- nls,抑制与非nls字串文字相关的警告
- null,抑制与空值分析相关的警告
- rawtypes,抑制与使用raw类型相关的警告
- resource,抑制与使用Closeable类型的资源相关的警告
- restriction,抑制与使用不建议或禁止参照相关的警告
- serial,抑制与可序列化的类别遗漏serialVersionUID栏位相关的警告
- static-access,抑制与静态存取不正确相关的警告
- static-method,抑制与可能宣告为static的方法相关的警告
- super,抑制与置换方法相关但不含super呼叫的警告
- synthetic-access,抑制与内部类别的存取未最佳化相关的警告
- sync-override,抑制因为置换同步方法而遗漏同步化的警告
- unchecked,抑制与未检查的作业相关的警告
- unqualified-field-access,抑制与栏位存取不合格相关的警告
- unused,抑制与未用的程式码及停用的程式码相关的警告
- 源码中
@interface xxx
表示xxx是一个注解类。 - 元注解:修饰其他注解的注解
@Retention(RetentionPolicy.xxx)
:指定注解的作用时机
- SOURCE:只在源码中显示,编译后丢弃这种注解策略
- CLASS:在字节码文件中显示,运行时不会保留。是注解的默认值。
- RUNTIME:运行时仍然保留,可以通过反射获取该注解
@Target(ElementType.xxx)
:指定注解用于修饰哪些元素。
- 作用时机是RUNTIME
- 只能用于修饰注解
@Documented
:被修饰的注解会在生成文档注释时保留。
- 作用时机时RUNTIME
@Inherited
:被修饰的注解具有继承性,子类自动具有该注解
- 与文档相关的注解:
- @author 标明开发该类模块的作者,多个作者之间使用,分割
- @version 标明该类模块的版本
- @see 参考转向,也就是相关主题
- @since 从哪个版本开始增加的
- @param 对方法中某参数的说明,如果没有参数就不能写
- 标记方法
- 可以并列多个
- @return 对方法返回值的说明,如果方法的返回值类型是void就不能写
- 标记方法
- 格式要求:@return 返回值类型 返回值说明
- @exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写
- 标记方法
- 格式要求:@exception 异常类型 异常说明
- 可以并列多个
@WebServle()
:@Transactional(propagation=Propagation.REQUIRES_NEW, isolation=Isolation.READ_COMMITTED,readOnly=false,timeout=3)
:
6.3.3 自定义注解
- 自定义注解使用@interface 关键字声明
- 自定义注解自动继承了java.lang.annotation.Annotation接口
- 自定义注解的成员变量以无参数方法的形式来声明。方法名和返回值类型称为配置参数。返回值类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型、 及以上所有类型的数组。
- 自定义注解的成员变量声明时可使用 default 关键字指定初始值
- 如果只有一个参数成员,通常使用value
- 使用自定义注解时,如果定义注解时声明了成员变量(配置参数),那么使用时必须指定参数值,除非它有默认 值。格式是“参数名 = 参数值” ,如果只有一个参数成员,且名称为value, 可以省略“value=”
- 自定义注解通过都会指明两个元注解:Retention、Target