枚举&注解(九)

9.1枚举

1.枚举类概念

1)在某种情况下,一个类的对象是有限而且固定的。

例如季节类,只能有4个对象

2)手动实现枚举类:

---private修饰构造器

---属性使用private   final修饰

---把该类的所有实例都使用public static final来修饰

2.使用enum定义枚举类

1)JDK1.5新增的enum关键字用于定义枚举类

2)枚举类和普通类的区别:

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

扫描二维码关注公众号,回复: 3539597 查看本文章

---枚举类的构造器只能使用private访问控制符

---枚举类的所有实例必须在枚举类中显式列出(,分隔           ;结尾)。列出的实例系统会自动添加public static final 修饰

---所有的枚举类都提供了一个values方法,该方法可以很方便地遍历所有的枚举值

3)JDK1.5中可以在switch表达式中使用枚举类的对象作为表达式,case子句可以直接使用枚举值的名字,无需添加枚举类作为限定。

4)若枚举只有一个成员,则可以作为一种单子模式的实现方式。

3.枚举类的属性

1)枚举类对象的属性不应允许被改动,所以应该使用private  final 修饰

2)枚举类使用private   final修饰的属性应该在构造器中为其赋值

3)若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数

4.使用Enum定义的Season

5.实现接口的枚举类

1)和普通Java类一样,枚举类可以实现一个或多个接口

2)若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法

6.枚举类的方法

9.2注解

1.Annotation(注释) 概述

1)从JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注释)

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

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

 4)Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据。

2.基本的 Annotation

1)使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素。

2)三个基本的Annotation:

---@Override:限定重写父类方法,该注释只能用于方法

---@Deprecated:用于表示某个程序元素(类、方法等)已过时

---@SuppressWarnings: 抑制编译器警告

3.自定义Annotation

1)定义新的Annotation类型使用@interface关键字

2)Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。

3)可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始值可使用default关键字

4)没有成员定义的Annotation称为标记;包含成员变量的Annotation称为元数据Annotation

4.提取Annotation信息

1)JDK5.0在java.lang.reflect包下新增了AnnotatedElement 接口,该接口代表程序中可以接受注释的程序元素

2)当一个Annotation类型被定义为运行时Annotation后,该注释才是运行时可见,当class文件被载入时保存在class文件中的Annotation才会被虚拟机读取

3)程序可以调用AnnotationElement 对象的如下方法来访问Annotation信息

5.JDK的元Annotation

1)JDK的元Annotation用于修饰其他Annotation定义

2)@Retention:只能用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间, @Rentention 包含一个RetentionPolicy 类型的成员变量,使用@Rentention时必须为该value成员变量指定值:

---RetentionPolicy.CLASS:编译器将把注释记录在class文件中。当运行Java程序时,JVM不会保留注释。这是默认值

---RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中。当运行Java程序时,JVM会保留注释。程序可以通过反射获取该注释

---RetentionPolicy.SOURCE:编译器直接丢弃这种策略的注释

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

4)@Documented:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档。

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

猜你喜欢

转载自blog.csdn.net/shizhudufou/article/details/82345621