枚举和注解
-
枚举(enum)
-
定义
- Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
- 使用enum定义枚举类
- JDK 1.5新增的enum关键字用于定义枚举类
- 枚举类和普通类的区别:
使用enum定义枚举类默认继承了java.util.Enum类
- 枚举类的构造器只能使用private访问控制符
- 枚举类的所有实例必须在枚举类中显式列出(,分隔 :结尾)
列出的实例系统会自动添加public static final 修饰
所有的枚举类都提供了一个values方法,
该方法可以方便遍历所有的枚举值.
JDK 1.5中可以在switch表达式中使用枚举类的对象作为表达式
,case子句可以直接使用枚举值的名字,无需添加枚举类作为限定- 若枚举只有一个成员,则可以作为一种单例模式的实现方式
- 使用enum定义枚举类
- 自实现枚举类
- 使用enum定义枚举类
- 实现接口的枚举类
- 和普通Java类一样枚举类可以实现一个或多个接口
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法
- 枚举类的方法
-
public class EnumDemo {
public static void main(String[] args) {
//Sesson.AUTUMN;这段执行就是获取一个Sesson的对象
Sesson sesson= Sesson.AUTUMN;
sesson.colorInfo();
Sesson sesson1= Sesson.AUTUMN;
//每次执行Sesson.AUTUMN获取是相同的对象,枚举类中的每个枚举都是单例模式的
System.out.println(sesson1==sesson);
System.out.println(sesson1.equals(sesson));
//调用枚举类实现的接口方法
sesson.test();
// 调用 values() 返回枚举类中所有的值。
Color[] arr = Color.values();
// 迭代枚举
for (Color col : arr)
{
// 查看索引 ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
System.out.println(col + " at index " + col.ordinal());
//RED at index 0
//GREEN at index 1
//BLUE at index 2
}
// 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException
System.out.println(Color.valueOf("RED"));
// System.out.println(Color.valueOf("WHITE"));
}
}
enum Color
{
RED, GREEN, BLUE;
}
enum Sesson implements Iteat{
//此处相当于在调用有参的构造函数
SPRING("春天","春暖花开"),
SUMMER("夏天","炎炎夏日"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","寒风凛冽");
private final String name;
private final String desc;
Sesson(String name, String desc) {
this.name = name;
this.desc = desc;
}
public void colorInfo(){
System.out.println(this.name + ":"+this.desc);
}
@Override
public void test() {
System.out.println("枚举实现了接口的方法");
}
}
interface Iteat{
void test();
}
-
注解(Annotation)概述
-
从JDK 5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注释)
-
Annotation确实就是代码里的特殊标记,
这些标记可以在编译,类加载,运行时被读取,并执行相应的处理
.通过使用Annotation,程序员可以在不改变原来逻辑的情况下
,在源文件中嵌入一些补充信息 -
Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,
这些信息被保存在Annotation的"name=value"对中. -
Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据
-
基本的Annotation
- 使用Annotation时要在其前面增加@符号,并
把该Annotation当成一个修饰符使用
,用于修饰它支持的程序元素 - 三个基本的Annotation:
- @Override:限定重写父类方法,该注释只能用于方法
- @Deprecated:用于表示某个程序元素(类,方法等)已过时
- @SuppressWarnings:抑制编译器警告.
- 使用Annotation时要在其前面增加@符号,并
-
自定义 Annotation
- 定义新的Annotation类型使用@interface关键字
Annotation的成员变量在Annotation定义中以无参数方法的形式来声明,其方法名和返回值定义了该成员的名字和类型
- 可以在定义Annotation的成员变量时为其指定初始值,
指定成员变量的初始值可使用default关键字
- 没有成员定义的Annotation称为标记;包含成员变量的Annotation称为元数据Annotation
-
import java.lang.annotation.*;
public class OverrideDemo {
public static void main(String[] args) {
Test1 test1 = new Test1();
System.out.println(test1.name);
}
}
class Test1{
@Test(id = 1,desc = "姓名")
String name;
}
@Target(ElementType.FIELD)//这个注解类是给其他类的属性做注解
@Retention(RetentionPolicy.RUNTIME)//定义注解的声明周期
@Documented//注解文档放到document
@interface Test{
public int id() default 0;
public String desc() default "";
}