枚举
枚举是一组常量的集合,可以将其理解为一种特殊的类,里面只包含一组有限的特定的对象 使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum,而Java是单继承机制。 枚举类和普通类一样,可以实现接口,如下形式。enum类名implements接口1,接口2
枚举的定义方法
自定义枚举
1、将构造器私有化,以防随便new 新对象 2、将set()函数删除以防修改 3、自己创建一组对象 4、将对象暴露给外部调用,使用public static final 修饰,记得常量名要大写(规范)
public class Enumeration {
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("冬", "寒冷");
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关键字
当我们使用enum 关键字开发一个枚举类时,默认会继承Enum类 1、用enum代替class(构造器必须私有) 2、将 public final static Season SPRING = new Season(“春”, “温暖”)简化为SPRING(“春”,“温暖”) 3、假如有多个对象常量用逗号隔开,如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略 4、定义常量对象要枚举类的行首
public class Enumeration02 {
public static void main(String[] args) {
System.out.println(Season02.SPRING);
System.out.println(Season02.AUTUMN);
}
}
enum Season02 {
SPRING("春","温暖"),AUTUMN("秋","冷");
private String name;
private String desc;
private Season02(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 + '\'' +
'}';
}
}
练习:
枚举的常用方法
课堂练习
public class EnumExercise02 {
public static void main(String[] args) {
System.out.println("所有星期信息如下");
week[] values = week.values();
for(week week:values){
System.out.println(week.getName());
System.out.println(week.name());
}
}
}
enum week{
MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三");
private String name;
private week(String name){
this.name=name;
}
public String getName() {
return name;
}
}
注解Annotation
三个基本的Annotation:
编译器会去检查你是否你真的重写了一个方法
@Override:限定某个方法,是重写父类方法,该注解只能用于方法
Override使用说明 1.@Override表示指定重写父类的方法(从编译层面验证),如果父类没有fly方法,则会报错 2.如果不写@Override注解,而父类仍有public void fly(),仍然构成重写 3.@Override只能修饰方法,不能修饰其它类,包,属性等等 4.查看@Override注解源码为@Target(ElementType.METHOD),说明只能修饰方法 5.@Target是修饰注解的注解,称为元注解,记住这个概念.
@Deprecated: 用于表示某个程序元素(类,方法等)已过时
Deprecated的说明 1.用于表示某个程序元素(类,方法等)已过时(能使用但不推荐) 2.可以修饰方法,类,字段,包,参数等等 3.@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE,METHOD,PACKAGE, PARAMETER, TYPE}) 4.@Deprecated的作用可以做到新旧版本的兼容和过渡
@SuppressWarnings: 抑制编译器警告
SuppressWarnings注解的案例>说明各种值
- unchecked是忽略没有检查的警告
- rawtypes是忽略没有指定泛型的警告(传参时没有指定泛型的警告错误)
- unused是忽略没有使用某个变量的警告错误
- @SuppressWarnings可以修饰的程序元素为,查看@Target
5)生成@SupperssWarnings时,不用背,直接点击左侧的黄色提示,就可以选择
JDK元注解(了解)
|