目录
枚举类的使用
枚举类的实现
- 类的对象只有有限个,确定的。
- 当需要定义一组常量时,强烈建议使用枚举类。
- 若枚举只有一个对象,则可以作为一种单例模式的实现方式。
自定义枚举类(JDK1.5之前)
public class OrderStatus {
private final String ORDERSTATUSNAME;
private final int ORDERSTATUSDESC;
private OrderStatus(String ORDERSTATUSNAME,int ORDERSTATUSDESC){
this.ORDERSTATUSNAME = ORDERSTATUSNAME;
this.ORDERSTATUSDESC = ORDERSTATUSDESC;
}
public static final OrderStatus NONPAYMENT = new OrderStatus("未付款",1);
public static final OrderStatus PAID = new OrderStatus("已付款",2);
public static final OrderStatus DELIVERED = new OrderStatus("已发货",3);
public static final OrderStatus RETURN = new OrderStatus("退货",4);
public static final OrderStatus CHECKED = new OrderStatus("已确认",5);
public static final OrderStatus FULFILLED = new OrderStatus("已配货",6);
}
说明:1.私有化类的构造器,保证不能在类的外部创建其对象。
2.在类的内部创建枚举类的实例。声明为:public static final。
3.对象如果有实例变量,应该声明为private final,并在构造器中初始化。
使用enum定义枚举类(JDK1.5及以后)
public enum OrderStatus2 {
NONPAYMENT("未付款",1),
PAID("已付款",2),
DELIVERED("已发货",3),
RETURN("退货",4),
CHECKED("已确认",5),
FULFILLED("已配货",6);
private final String ORDERSTATUSNAME;
private final int ORDERSTATUSDESC;
private OrderStatus2(String ORDERSTATUSNAME,int ORDERSTATUSDESC){
this.ORDERSTATUSNAME = ORDERSTATUSNAME;
this.ORDERSTATUSDESC = ORDERSTATUSDESC;
}
public String getORDERSTATUSNAME() {
return ORDERSTATUSNAME;
}
public int getORDERSTATUSDESC() {
return ORDERSTATUSDESC;
}
}
说明:1.使用 enum 定义的枚举类默认继承了java.lang.Enum类,因此不能再继承其他类。
2.枚举类的构造器只能使用 private 权限修饰符。
3.枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的实例系统会自动添加 public static final 修饰。
4.必须在枚举类的第一行声明枚举类对象。
Enum类的主要方法
- values() 方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
- valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
- toString():返回当前枚举类对象常量的名称。
实现接口的枚举类
- 和普通 Java 类一样,枚举类可以实现一个或多个接口。
- 若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。
- 若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法。
注解的使用
注解(Annotation)其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理。通过使用Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。
生成文档相关的注解

在编译时进行格式检查(JDK内置的三个基本注解)
- @Override:限定重写父类方法, 该注解只能用于方法。
- @Deprecated:用于表示所修饰的元素(类, 方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择。
- @SuppressWarnings:抑制编译器警告。
跟踪代码依赖性,实现替代配置文件功能
- Servlet3.0提供了注解,使得不再需要在web.xml文件中进行Servlet的部署。
- spring框架中关于“事务”的管理。
自定义注解

public @interface MyAnnotation {
String value() default "默认值";
}
JDK中的元注解
JDK 的元注解用于修饰其他注解定义。JDK5.0提供了4个标准的元注解类型,分别是:
Retention、Target、Documented和Inherited。
Retention
@Retention只能用于修饰一个 Annotation 定义,用于指定该 Annotation 的生命周期,@Rentention 包含一个 RetentionPolicy 类型的成员变量,使用@Rentention 时必须为该 value 成员变量指定值:
- RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丢弃这种策略的注释。
- RetentionPolicy.CLASS:在class文件中有效(即class保留) , 当运行 Java 程序时, JVM不会保留注解。 这是默认值。
- RetentionPolicy.RUNTIME:在运行时有效(即运行时保留),当运行 Java 程序时,JVM 会保留注释。程序可以通过反射获取该注释。
Target
@Target用于修饰 Annotation 定义,用于指定被修饰的 Annotation 能用于修饰哪些程序元素。 @Target 也包含一个名为 value 的成员变量。

Documented
@Documented用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档。默认情况下,javadoc是不包括注解的。定义为Documented的注解必须设置Retention值为RUNTIME。
Inherited
@Inherited被它修饰的 Annotation 将具有继承性。如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解。
JDK8 中注解的新特性
Java 8对注解处理提供了两点改进:可重复的注解及可用于类型的注解。此外,反射也得到了加强,在Java8中能够得到方法参数的名称。这会简化标注在方法参数上的注解。
-
可重复的注解:

-
可用于类型的注解:
1)JDK1.8之后,关于元注解@Target的参数类型ElementType枚举值多了两个:TYPE_PARAMETER,TYPE_USE。
2)在Java 8之前,注解只能是在声明的地方所使用,Java8开始,注解可以应用在任何地方。ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)。ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。


本文介绍了Java中的枚举类使用,包括自定义枚举类、使用enum关键字定义枚举类及其主要方法。同时详细讲解了注解的运用,如生成文档注解、编译时检查、自定义注解以及JDK元注解的Retention、Target、Documented和Inherited。还提到了JDK8中注解的新特性,包括可重复注解和可用于类型的注解。

474

被折叠的 条评论
为什么被折叠?



