一、枚举类
? 理解:类的对象只有有限个,确定的.? ? ? 举例如下;
- 星期;? 星期一,........,星期天
- 性别; 男, 女
- 季节; 春,夏,秋,冬。
枚举类定义方式
? ?1. 自定义枚举类(JDK5.0 之前 ):
package day03;
public class SeasonTest1{ ?? ?
?? ?public static void main(String[] args) {
?? ??? ?Season summer = Season.SUMMER;
?? ??? ?System.out.println(summer);//输出Season{seasonName= 春天,seasonDesc= 春暖花开}
?? ?}
}
class Season {
?? ?
?? ?//1.. 声明对象的属性,?? ?private final修饰
?? ?private final String seasonName; ?
?? ?private final String seasonDesc;
?? ?
?? ?//2.. 私有化构造器, 并给属性赋值
?? ?private Season(String seasonName,String seasonDesc) {
?? ??? ?this.seasonName = seasonName;
?? ??? ?this.seasonDesc = seasonDesc;
?? ?}
?? ?
?? ?//3.. 提供当前枚举类的多个对象,必须是public static final的
?? ?public static final Season SPRING = new Season("春天","春暖花开");
?? ?public static final Season SUMMER = new Season("夏天","夏日炎炎");
?? ?public static final Season AUTUMN = new Season("秋天","秋高气爽");
?? ?public static final Season WINTER = new Season("冬天","冰天雪地");
?? ?
?? ?//4.. 可以通过get,set方法获取属性
?? ?public String getSeasonDesc() {
?? ??? ?return seasonDesc;
?? ?}
?? ?//4.. 提供toString()方法
?? ?@Override
?? ?public String toString() {
?? ??? ?return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
?? ?}
?? ?
?? ?
?? ?
}
? ? ?2.1 enum关键字定义枚举类(JDK5.0 之后):
package day03;
public class SeasonTest1{ ?? ?
?? ?public static void main(String[] args) {
?? ??? ?Season summer = Season.SUMMER;
?? ??? ?System.out.println(summer);//输出Summer,打印当前对象名
?? ?}
}
enum Season {
?? ?
?? ?//1.. 提供当前枚举类的多个对象
?? ?SPRING("春天","春暖花开"),
?? ?SUMMER("夏天","夏日炎炎"),
?? ?AUTUMN("秋天","秋高气爽"),
?? ?WINTER("冬天","冰天雪地");
?? ?
?? ?//2.. 声明对象的属性,?? ?private final修饰
?? ?private final String seasonName; ?
?? ?private final String seasonDesc;
?? ?
?? ?//3.. 私有化构造器, 并给属性赋值
?? ?private Season(String seasonName,String seasonDesc) {
?? ??? ?this.seasonName = seasonName;
?? ??? ?this.seasonDesc = seasonDesc;
?? ?}
?? ??
?? ?
?? ?//4.. 可以通过get,set方法获取属性
?? ?public String getSeasonDesc() {
?? ??? ?return seasonDesc;
?? ?}
}
? ?enum关键字定义枚举类注意点;
- 继承于Java
. lang. Enum类,而非object类。 - 不用重写toString 方法,默认打印对象名。
- 必须首行声明对象。
- 多个对象之间使用逗号,最后一个用分号。
? Enum类中的常用方法(values(), valueOf()方法):
//values()方法,返回枚举类型的对象数组,输出枚举类中的所有对象名
?? ?public static void main(String[] args) {
?? ??? ?Season summer = Season.SUMMER;
?? ??? ?Season[] val = Season.values();?? ?
?? ??? ?for(int i = 0;i < val.length;i++) {
?? ??? ??? ?System.out.println(val[i]);//输出SPRING,SUMMER,AUTUMN,WINTER
?? ??? ?}
????}
?? ?*****************************************************
?? ?//valueOf(String objName)方法,返回枚举类中对象名是objName的对象。
?? ?public static void main(String[] args) {
?? ??? ?Season win = Season.valueOf("WINTER");
?? ??? ?System.out.println(win);//输出WINTER
?? ?}
? ?enum关键字定义的枚举类如何为每个对象单独重写接口中的方法:
interface Info{
?? ?void show();
}
enum Season implements ?Info{
?? ?
?? ?//1.. 提供当前枚举类的多个对象
?? ?SPRING("春天","春暖花开"){
?? ??? ?@Override
?? ??? ?public void show() {
?? ??? ??? ?System.out.print("春天在哪里");
?? ??? ?}
?? ?},
?? ?SUMMER("夏天","夏日炎炎"){
?? ?@Override
?? ?public void show() {
?? ??? ?System.out.print("夏天在哪里");
?? ?}
},
?? ?AUTUMN("秋天","秋高气爽"){
?? ?@Override
?? ?public void show() {
?? ??? ?System.out.print("秋天在哪里");
?? ?}
},
?? ?WINTER("冬天","冰天雪地"){
?? ?@Override
?? ?public void show() {
?? ??? ?System.out.print("冬天在哪里");
?? ?}
};
注;当enum定义的枚举类实现接口后,如果所有对象重写该方法内容相同时,我们只需像普通类重写接口中的方法一样,在所有对象后面重写一次即可。这样我们枚举类中的每个对象便都可以获得该重写的方法了。
总结
- 当我们定义一组常量时,考虑使用枚举类。
- 当枚举类只有一个对象时,则可以作为单例模式的实现方式。
|