1.枚举类概念
1)在某种情况下,一个类的对象是有限而且固定的。
例如季节类,只能有4个对象
2)手动实现枚举类:
---private修饰构造器
---属性使用private final修饰
---把该类的所有实例都使用public static final来修饰
2.使用enum定义枚举类
1)JDK1.5新增的enum关键字用于定义枚举类
2)枚举类和普通类的区别:
---使用enum定义的枚举类默认继承了 java.lang.Enum类
---枚举类的构造器只能使用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.枚举类的方法
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,则其子类将自动具有该注释。