- 枚举什么时候需要,(只读,不需要修改)
- 枚举是一组常量的集合
- 可以这样理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象
- 枚举实现的两种方式
- 自定义类实现枚举
package com.jshedu.enum_; public class Enumeration01 { public static void main(String[] args) { System.out.println(Season.WINTER.getName()); } } //演示自定义枚举的实现 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 SUMMER = new Season("夏天", "炎热"); public static final Season AUTUMN = new Season("秋天", "凉爽"); //1.将构造器私有化,目的防止直接new //2.去掉setter方法,防止属性被修改 //3.在Season内部,直接创建固定的对象 //4.优化,可以加入final修饰符 private Season(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } }
把固定的对象创建到类中,并且把类的构造器改成私有的,外部不能直接创建对象,把set方法删掉,以防数据被更改。
-
不需要提供set方法,因为枚举对象值通常为只读
-
对枚举对象/属性使用final+static共同修饰,实现底层优化
-
枚举对象名通常使用全部大写
-
枚举根据对象,可以有多个属性。
-
第二种方式,enum关键字实现枚举
package com.jshedu.enum_; /** * @author Mr.jia * @version 1.0 */ public class Enumeration02 { public static void main(String[] args) { System.out.println(Season2.WINTER); } } enum Season2{ //定义了四个对象,固定 // public static final Season SPRING = new Season("春天", "温暖"); // public static final Season WINTER = new Season("冬天", "寒冷"); // public static final Season SUMMER = new Season("夏天", "炎热"); // public static final Season AUTUMN = new Season("秋天", "凉爽"); //如果使用了enum来实现枚举类 //1.使用关键字enum替代class //2.public static final Season SPRING = new Season("春天", "温暖"); // 直接使用SPRING("春天","温暖"); //3.如果有多个常量(对象),使用,号间隔即可。 //4.如果使用enum来实现枚举,要求将定义常量对象,写在前面 //放在前面。调用无参可以不带括号AUTUMN SPRING("春天","温暖"),WINTER("冬天", "寒冷"),SUMMER("夏天", "炎热"),AUTUMN; private String name; private String desc; private Season2(){ }//无参构造器 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反编译工具看。
-
如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略。
-
枚举对象必须放在枚举类的行首。
- 自定义类实现枚举
-
Enum类的各种方法的使用:Enum类的各种方法的使用包括:values()、valueOf()、name()和ordinal()等。其中,values()方法用于返回枚举类型的所有值,valueOf()方法用于返回指定名称的枚举常量,name()方法用于返回枚举常量的名称,而ordinal()方法则用于返回枚举常量的位置,comrpareTo比较两个枚举常量,比较的就是编号ordinal那个号。
-
package com.jshedu.enum_; /** * @author Mr.jia * @version 1.0 */ public class Enumeration03 { public static void main(String[] args) { Week[] values = Week.values(); //增强for循环,把values的值赋给value,然后输出,直到values值输出完。 for (Week value:values ) { System.out.println(value); } } } enum Week{ MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"); private String name; private Week(String name) { this.name = name; } public String getName() { return name; } //这是返回的东西 @Override public String toString() { return name; } } /* 星期一 星期二 星期三 */
values()是需要for循环输出的?
-
enum实现接口
-
使用enum关键字后,就不能再继承其他类了,因为enum会隐式继承Enum,而java是单继承机制
-
枚举类和普通类一样,可以实现接口:enum 类名 implements 接口1,接口2{}。
-
-
注解Annotation:也被称为元数据,用于修饰解释包,类,方法,属性,构造器,局部变量等数据信息。
-
和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
-
-
三个基本的Annotation:
-
@Override:限定某个方法,是重写父类方法,该注解只能用于方法
package com.jshedu.annotation; /** * @author Mr.jia * @version 1.0 */ public class Override_ { public static void main(String[] args) { } } class Father{ public void fly(){ System.out.println("Father fly..."); } } class Son extends Father{ //1.@Override注解放在fly方法上,表示子类的fly方法时重写了父类的fly //2.这里如果没有写@Override,还是重写了父类的fly //3.如果写了@Override注解,编译器就会去检查该方法是否重写了父类的 // 方法,如果的确写了,则编译通过,如果没有构成重写,则编译错误。 //4.@interface表示一个注解类。 @Override public void fly() { System.out.println("Son fly...."); } //这里父类没有see方法就会报错。ethod does not override method from its superclass // @Override // public void see(){ // // } }
-
@Deprecated:用于表示某个成员元素(类,方法,字段,包,参数等)已过时,但不代表不能用,即不推荐使用。可以做版本升级过度使用。
-
@SuppressWarnings:抑制编译器警告,
-
@SuppressWarnings放在main方法,那么抑制警告的范围就是main
-
-
枚举,注解
最新推荐文章于 2024-04-27 14:12:29 发布