枚举和注解
本章内容
枚举(enumeration, 简写enum)
枚举是一组常量的集合,属于一种特殊的类,里面只包含一组有限的特定的对象
实现方式:
- 自定义枚举类型
package com.bbchen.enum_;
public class Enumeration02 {
public static void main(String[] args) {
System.out.println(Season.SPRING);
System.out.println(Season.SUMMER);
System.out.println(Season.AUTUMN);
System.out.println(Season.WINTER);
}
}
// 演示自定义枚举实现
class Season {
private String name;
private String desc;
public final static Season SPRING = new Season("春天", "温暖");
public final static Season SUMMER = new Season("夏天", "炎热");
public final static Season AUTUMN = new Season("秋天", "凉爽");
public final static Season WINTER = new Season("冬天", "寒冷");
// 1.构造器私有化,防止直接 new
// 2.去掉 setter 方法,防止属性被修改
// 3.在 Season 内部,直接创建固定的对象
// 4.final static
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
- 使用 enum关键字 来实现
package com.bbchen.enum_;
public class Enumeration03 {
public static void main(String[] args) {
System.out.println(Season2.SPRING);
System.out.println(Season2.SUMMER);
System.out.println(Season2.AUTUMN);
System.out.println(Season2.WINTER);
}
}
// 演示 enum关键字 枚举实现
enum Season2 {
// public final static Season2 SPRING = new Season2("春天", "温暖");
// public final static Season2 SUMMER = new Season2("夏天", "炎热");
// public final static Season2 AUTUMN = new Season2("秋天", "凉爽");
// public final static Season2 WINTER = new Season2("冬天", "寒冷");
// 如果使用 enum 来实现枚举类
// 1.使用 enum 替代 class
// 2.使用 SPRING("春天", "温暖"); 代替
// public final static Season2 SPRING = new Season2("春天", "温暖");
// 3.如果有多个对象常量,使用 ,号间隔即可
// 4.要求将定义常量写在前面
SPRING("春天", "温暖"),
SUMMER("夏天","炎热"),
AUTUMN("秋天", "凉爽"),
WINTER("冬天", "寒冷");
private String name;
private String desc;
private Season2(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
注意事项
当我们使用 enum关键字 来开发一个枚举类时,默认会继承 Enum 类,而且是一个 final 类,使用 javap 来证明
- 使用
SPRING("春天", "温暖");
代替public final static Season2 SPRING = new Season2("春天", "温暖");
- 无参构造器创建常量对象,则省略可以不写括号()
- 当有多个枚举对象是,使用逗号间隔,最后一个以分号结尾
- 枚举对象必须放在枚举类的最前面
练习
Enum 成员方法
package com.bbchen.enum_;
/**
* 演示 Enum 类的各种方法,使用 Season2 演示
*/
public class EnumMethod {
public static void main(String[] args) {
Season2 autumn = Season2.AUTUMN;
// name() 输出枚举对象的名字
System.out.println(autumn.name());
// ordinal() 输出该枚举对象的次序/编号,从0开始
System.out.println(autumn.ordinal());
// values() 返回 Season2[], 含有定义的所有枚举
Season2[] values = Season2.values();
for (Season2 season: values) {
System.out.println(season);
}
// valueOf() 将字符串转换成枚举对象,要求字符串必须为已有常量名
// 1.根据输入的 "AUTUMN" 到 Season2 的枚举对象去查找
// 2.如果找到,就返回该对象,如果没有则报错
System.out.println("autumn1 = " + Season2.valueOf("AUTUMN"));
// compareTo() 将枚举对象的编号进行比较
// self.ordinal - other.ordinal
// 调用元素编号 - 比较元素编号
System.out.println(Season2.AUTUMN.compareTo(Season2.SPRING));
}
}
练习
package com.bbchen.enum_;
public class EnumExercise02 {
public static void main(String[] args) {
Week[] weeks = Week.values();
System.out.println("===所有星期的信息如下===");
for (Week week: weeks) {
System.out.println(week);
}
}
}
enum Week {
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三"),
THURSDAY("星期四"),
FRIDAY("星期五"),
SATURDAY("星期六"),
SUNDAY("星期日");
private final String name;
Week(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
enum 实现接口
- 使用 enum 关键字后,就不能在继承其他类了,因为 enum 会隐式继承 Enum,而 Java 是单继承制
- enum 实现的枚举类,仍然是一个类,所以还是可以实现接口的
注解 (Annotation,了解即可)
- 注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。
- 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
- 在 JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替 javaEE 旧版中所遗留的繁冗代码和 XML 配置等。
Annotation
三个基本的 Annotation:
- @Override: 限定某个方法,是重写父类方法,该注解只能用于方法
- @Deprecated: 用于表示某个程序元素(类,方法等)已经过时,即不再推荐使用,但是仍然可以使用
- @SuppressWarnings: 抑制编译器警告
评论