enum Color {
RED {
String getColor() {
return "red";
}
},
GREEN {
String getColor() {
return "green";
}
},
BLUE {
String getColor() {
return "blue";
}
};
//默认为private
Color() {
System.out.println("Constructor for: " + this.name());
}
abstract String getColor();
}
- 枚举类可以有自己的构造器,变量和方法
- 构造器只能用private修饰,不能被外部调用
- 方法可以是具体方法,也可以是抽象方法;如果枚举类有抽象方法,则必须被每个实例实现
- values():返回枚举类中所有的常量值
ordinal():返回指定枚举常量的索引
valueOf():返回指定字符串对应的枚举常量 - enum 定义的枚举类默认继承了java.lang.Enum类,不能继承其他类,可以实现接口
interface Run {
void run();
}
//第一种
enum Gender implements Run {
MALE, FEMALE;
public void run() {
//...
}
}
//第二种
enum Gender implements Run {
MALE {
public void run() {
//...
}
},
FEMALE {
public void run() {
//...
}
};
}
注解
内置注解
- @Override:检查该方法是否是重写方法
- @SuppressWarnings():使编译器忽略注解中声明的警告
关键字:“deprecation”, “unused”, “unchecked”, “all”, … - @Deprecated:表示某个元素(类,方法等)已过时
对其他注解进行说明,自定义注解时可以使用
- @Target():指定注解的使用范围
value:java.lang.annotation.ElementType的枚举常量 (TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR,
LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE) - @Retention:描述注解的生命周期,即注解保留的时间长短
value:java.lang.annotation.RetentionPolicy的枚举常量 (SOURCE < CLASS < RUNTIME) - @Documented:标记的注解会被读取到JavaDoc中
- @Inherited:标记的注解可以被继承
元注解
[修饰符] @interface 注解名 {
配置参数列表
}
//例子
@Documented
public @interface MyTag {
String name();
int num() default 0;
}
public class Test {
@MyTag(name="test")
public void test() {
//...
}
}
- 配置参数只能用public或者default修饰
- 如果自定义注解声明了配置参数,那么使用该注解时必须为配置参数赋值,除非有默认值



