第6章 枚举和注解

简介: 枚举是拥有确定个常量的特殊的类,注解可以增强代码功能。

6.1 枚举类型

6.1.1 枚举的概念

  1. enumeration、enum
  2. 一组常量类型的集合。
  3. 是一种特殊的类,只包含有限的特定的对象,与Object并列
  4. 特点:
  • 属性不允许被改动:属性使用private final修饰、且不设置setter
  • 为了能够初始化属性,使用构造器传参的方式,在构造器内赋值。
  • 在枚举类内创建实例。

6.1.2 枚举类型的实现

  1. 自定义类(JDK1.5之前):
  • 私有化属性,只配置getter,不配置seter:防止属性被修改
  • private final修饰
  • 私有化构造器:防止new
  • private修饰
  • 在类内部,创建公开的枚举对象
  • 命名规范:属性名使用大写形式
  • 对象使用public static final修饰,进行底层优化
  • 三个可省略任意多个
  1. enum关键字(JDK1.5之后):
enumSeason{
SPRING("春天", "温暖", SUMMER("夏天", "炎热");
privateStringname;
privateStringdesc;
privateSeason(Stringname, Stringdesc){
this.name=name;
this.desc=desc;
    }
namgetter;
descgetter;
}
  1. 使用enum关键字的注意点:
  • 枚举类:
  • 枚举类前默认有final关键字,所以枚举类不能被继承
  • final的特性导致
  • 默认继承自java.lang.Enum类,所以也不能继承其他类
  • 枚举对象:
  • 实例化的枚举类对象必须声明在枚举类的首行
  • 实例化的枚举类对象必须与构造器的参数对应,且枚举对象必须传入参数
  • 实例化的枚举对象前默认有public static final,可以省略任意多个
  • 构造器:
  • 使用无参构造器实例化枚举类对象时,枚举对象的括号可以省略
  • 构造器默认使用private修饰,可以省略
  • 属性:
  • 默认使用private final修饰,可以省略

6.1.3 常用方法

  1. enum声明的类会隐式继承Enum类,因此可以使用Enum中的相关方法:
  • toString():返回当前对象名,声明enum类时可重写,用于返回类中的属性内容
  • name():返回当前对象名,不能重写。
  • 有限使用toString()
  • ordinal():返回当前对象的位置号,从0开始
  • values():返回当前枚举类中的所有实例化对象,返回一个enum声明的枚举类型数组
  • valueOf():返回指定字符串的实例化对象,如果传入的字符串枚举类中没有,会报错
  • 传入的字符串名称要跟实例化对象名一致
  • compareTo():比较两个枚举常量的位置编号,返回常量值。
  • 调用的 - 参数的

6.1.4 enum实现接口

  1. 语法:enum 类名 implements 接口 1,接口 2{}

6.1.5 枚举配合switch-case

  1. switch()中传入一个枚举对象,case后是枚举对象的值

6.2 注解(Anotation)

6.2.1 概念

  1. 含义:又称为元数据(Meatdata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。
  2. 特点:和注释一样,不影响程序运行,但注解可以被编译或运行,相当于嵌入代码的补充信息。
  3. 功能:
  • javase中,注解主要用于标记过时功能、忽略警告等
  • Javaee中,可以用于配置应用程序的任何切面,代替旧版javaee中的繁冗代码和XML配置

6.2.2 常见类型及基本使用

  1. @Override:方法前使用,表示重写父类方法
  • 只能用在方法前。
  • 重写的方法前不写该注解不影响编译运行
  • 如果写了该注解,程序在编译阶段检查是否真正重写。
  • 非重写时会报错。
  1. @Deprecated:表示程序元素(类、方法等)已过时。
  • 可以用在类、方法(构造器)、变量(成员变量、局部变量)、包等
  • 用于新旧版本的兼容和过渡
  1. @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,抑制与未用的程式码及停用的程式码相关的警告
  1. 源码中@interface xxx表示xxx是一个注解类。
  2. 元注解:修饰其他注解的注解
  • @Retention(RetentionPolicy.xxx):指定注解的作用时机
  • SOURCE:只在源码中显示,编译后丢弃这种注解策略
  • CLASS:在字节码文件中显示,运行时不会保留。是注解的默认值。
  • RUNTIME:运行时仍然保留,可以通过反射获取该注解
  • @Target(ElementType.xxx):指定注解用于修饰哪些元素。
  • 作用时机是RUNTIME
  • 只能用于修饰注解
  • @Documented:被修饰的注解会在生成文档注释时保留。
  • 作用时机时RUNTIME
  • @Inherited:被修饰的注解具有继承性,子类自动具有该注解
  1. 与文档相关的注解:
  • @author 标明开发该类模块的作者,多个作者之间使用,分割
  • @version 标明该类模块的版本
  • @see 参考转向,也就是相关主题
  • @since 从哪个版本开始增加的
  • @param 对方法中某参数的说明,如果没有参数就不能写
  • 标记方法
  • 可以并列多个
  • @return 对方法返回值的说明,如果方法的返回值类型是void就不能写
  • 标记方法
  • 格式要求:@return 返回值类型 返回值说明
  • @exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写
  • 标记方法
  • 格式要求:@exception 异常类型 异常说明
  • 可以并列多个
  1. @WebServle()
  2. @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


目录
相关文章
|
22天前
|
开发框架 Java 编译器
Java反射,枚举讲解
Java反射,枚举讲解
47 0
|
9天前
|
XML 安全 Java
反射&&枚举
反射&&枚举
14 0
|
22天前
枚举和注解
枚举是常量集合,表现为特殊类,包含有限特定对象。适用于只读场景。实现方式有两种:自定义类和使用`enum`关键字。自定义类实现时,常量用`final static`修饰,名称全大写。枚举可含多个属性。示例中展示了自定义枚举类`Season`,包含四个季节实例,构造器私有化且无setter,确保不可修改。
13 1
|
7月前
|
Java 索引
枚举类 - 自定义枚举类与使用enum关键字
枚举类 - 自定义枚举类与使用enum关键字
66 0
|
9月前
|
安全 Java 编译器
Java注解(一) 注解的属性,格式,说明
Java注解(一) 注解的属性,格式,说明
74 0
|
10月前
|
Java
十 枚举类&注解
十 枚举类&注解
40 0
|
10月前
|
设计模式 JSON Java
枚举类——用好枚举真的没有那么简单!
枚举类——用好枚举真的没有那么简单!
70 0
|
Java 编译器 Spring
|
Java 关系型数据库 MySQL
如何使用@Value注解为bean的属性赋值呢
如何使用@Value注解为bean的属性赋值呢
|
安全 Java 编译器
反射与枚举
本篇文章主要介绍Java语法中的反射与枚举部分。
83 0
反射与枚举

热门文章

最新文章