枚举
需求:建立一个只有固定的、有限的几个值的对象,只读,不需要修改。
解决方案:枚举
- 枚举对应英文 enumeration 简写 enum
- 枚举是一组常量的集合
- 枚举属于一种特殊的类,里面只包含一组有限的限定的对象
枚举的实现方式
- 自定义类实现枚举
- 使用 enum 关键字实现枚举
自定义类实现枚举
- 将构造器私有化,防止直接 new
- 可以提供get方法,但不提供 set 方法,防止属性被修改
- 在类的内部,直接创建固定的对象,使用 final+static 共同修饰,实现底层优化。
- 对象名通常使用全部大写,常量命名的规范
class Season {//类
private String name;
private String desc;//描述
//定义了四个对象, 固定.
public static final Season SPRING = new Season("春天", "温暖");
public static final Season WINTER = new Season("冬天", "寒冷");
public static final Season AUTUMN = new Season("秋天", "凉爽");
public static final Season SUMMER = new Season("夏天", "炎热");
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
}
//调用
System.out.println(Season.SPRING);
enum关键字实现枚举
-
使用 enum 替代 class
-
创建对象简写为
SPRING("春天", "温暖"); //常量名(实参列表):
-
如果有多个常量(对象),使用逗号间隔,最后分号结尾。
SPRING("春天", "温暖"), WINTER("冬天", "寒冷");
注意事项:
-
当使用enum关键字创建枚举类时,默认会继承Enum类,且此枚举类被final修饰。
-
简化的创建对象语句等同于传统方法,都调用了构造器,需要确定调用的是哪个构造器。
-
如果调用的是无参构造器,则实参列表和小括号都可以省略。
-
如果使用 enum 实现枚举,则必须将定义常量对象语句写在最前面。
-
使用 enum 关键字后,就不能再继承其它类了,因为 enum 会隐式继承 Enum,而 Java 是单继承机制。
-
枚举类和普通类一样,可以实现接口,如下形式。
enum 类名 implements 接口 1,接口 2{}
enum常用方法:
- ordinal():对象调用,输出该枚举对象的次序/编号,从 0开始编号
- values():类调用,返回该类定义的所有枚举对象
- valueOf():类调用,按照括号中传入的字符串查找是否有对象名与其相同的枚举对象
- compareTo():对象1调用,括号内传入对象2,比较两个对象的编号,返回对象1编号-对象2编号。
注解
- 注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
- 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
- 在 JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在 JavaEE 中注解占据了更重要的角 色,例如用来配置应用程序的任何切面,代替 java EE 旧版中所遗留的繁冗代码和 XML 配置等。
基本的Annotation介绍
使用 Annotation 时要在其前面增加 @ 符号, 并把该 Annotation 当成一个修饰符使用。用于修饰它支持的程序元 素 三个基本的 Annotation:
-
@Override: 限定某个方法,是重写父类方法, 该注解只能用于方法 (会进行语法检测)
-
@Deprecated: 用于表示某个程序元素(类, 方法等)已过时(即不再推荐使用,但仍可以使用)
-
@SuppressWarnings: 抑制编译器警告。当我们不希望看到这些警告的时候,可以使用
@SuppressWarnings{""}
来抑制警告信息。在{""} 中,可以写入你希望抑制(不显示)警告信息。作用范围是和放置的位置相关,通常放置在方法,语句,类上一行,进行抑制。
元注解(了解)
JDK 的元 Annotation 用于修饰其他 Annotation
- Retention //指定注解的作用范围,三种 SOURCE,CLASS,RUNTIME
- Target // 指定注解可以在哪些地方使用
- Documented //指定该注解是否会在 javadoc 体现
- Inherited //子类会继承父类注解