Dawn's Blogs

分享技术 记录成长

0%

Java高级 (4) 枚举类与注解

枚举类

enum 定义枚举类

枚举类 enum 的使用说明:

  • 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类

  • 枚举类的构造器只能使用 private 权限修饰符

  • 枚举类的所有实例必须在枚举类中显式列出,列出的实例系统会自动添加 public static final 修饰

  • 必须在枚举类的第一行声明枚举类对象,多个对象之间用逗号隔开,末尾用分号结束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public enum SeasonEnum {
// 3.声明当前枚举类对象
SPRING("春天", "春风又绿江南岸"),
SUMMER("夏天", "映日荷花别样红"),
AUTUMN("秋天", "秋水共长天一色"),
WINTER("冬天", "窗含西岭千秋雪");

// 1.声明枚举类对象属性
private final String seasonName;
private final String seasonDesc;

// 2.枚举类对象构造器,用于创建枚举类对象
private SeasonEnum(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}

public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}

Enum 类主要方法

Enum 类的主要方法:

  • values():返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
  • valueOf(String str):可以把一个字符串转为对应的枚举类对象,这个字符串必须是枚举类对象的名字,否则会报出 IllegalArgumentException 异常。
  • toString():返回当前枚举类对象的名称

注解

概述

注解(Annotation)其实就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用 Annotation, 可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息

Annotation 可用于修饰包、构造器、方法、成员变量、参数、局部变量的声明,这些信息被保存在 Annotation 的 “name = value” 对中。

应该把注解当作修饰符来使用,用于修饰它支持的程序元素。

常见注解示例

生成文档相关

  • @auther:标明开发该类模块的作者,多个作者使用逗号分隔。
  • @version:标明该类模块的版本
  • @see:参考转向,也就是相关主题。
  • @since:从哪个版本开始增加的。
  • 用于方法:
    • @param:对方法中某参数的说明,如果没有参数就不能写。格式要求:@param 形参名 形参类型 形参说明
    • @return:对方法返回值的说明,如果方法的返回值类型是 void 就不能写。格式要求:@return 返回值类型 返回值说明
    • @exception:对方法可能抛出的异常进行说明 ,如果方法没有用 throws 显式抛出的异常就不能写。格式要求:@exception 异常类型 异常说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* @author dawn
* @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:抑制编译器警告。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class AnnotationTest{
public static void main(String[] args) {
@SuppressWarnings("unused")
int a = 10;
}

@Deprecated
public void print(){
System.out.println("弃用的方法");
}

@Override
public String toString() {
return "重写的toString方法()";
}
}

JDK 中的元注解

JDK 的元 Annotation 用于修饰其他 Annotation 定义,分别是:

  • Retention
  • Target
  • Documented
  • Inherited

@Retention

@Retention:只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 的生命周期,包含一个 RetentionPolicy 类型的成员变量, 使用 Retention 注解时必须为该 value 成员变量指定值:

  • RetentionPolicy.SOURCE:源文件中有效,编译器直接丢弃这种策略的注释。
  • RetentionPolicy.CLASS:class 文件中有效,当运行 Java 程序时不会保留注解,这是默认值。
  • RetentionPolicy.RUNTIME:运行时有效,程序可以通过反射获取该注释。

image-20230131155903026

@Target

@Target:用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于修饰哪些程序元素。@Target 也包含一个名为 value 的成员变量。

@Documented 和 @Inherited

@Documented:用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档。默认情况下,javadoc 是不包括注解的。

  • 定义为 Documented 的注解必须设置 Retention 值为 RUNTIME。

@Inherited:被它修饰的 Annotation 将具有继承性。如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解。