java学习之枚举二

文章详细介绍了如何使用Java的enum关键字来实现枚举,包括如何定义枚举常量,枚举类的特性,如默认继承Enum类,并通过javap反编译工具验证了枚举类的编译结果。同时,文章提供了两个练习题,考察对枚举的理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、enum关键字实现枚举

二、注意事项

一、对Season2进行反编译(javap)

​编辑

 三、练习题

第一题

第二题


一、enum关键字实现枚举

package enum_;

public class Enumeration03 {
    public static void main(String[] args) {
        System.out.println(Season2.SPRING);
        System.out.println(Season2.AUTUMN);
    }
}
//演示使用enum关键字来实现枚举
enum Season2{

    //定义了四个对象
    //public static final修饰,因为是final修饰,所以必须是大写
//    public static final  Season2 SPRING =  new Season2("春天", "温暖");
//    public static final  Season2 WINTER =  new Season2("冬天", "寒冷");
//    public static final  Season2 SUMMER = new Season2("夏天", "炎热");
//    public static final  Season2 AUTUMN = new Season2("秋天", "凉爽");
    //如果使用了enum关键字来实现枚举
    //1.使用关键字 enum 来替代class
    //2.SPRING("春天", "温暖");  常量名/对象名(实参列表);
    //3.如果有多个常量(对象),使用逗号间隔即可
    //4.如果使用enum来实现枚举,要求将定义的对象,写在前面
    SPRING("春天", "温暖"),WINTER("冬天", "寒冷"),
    SUMMER("夏天", "炎热"),AUTUMN("秋天", "凉爽");

    //属性要放在枚举的对象的下面
    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 "Season2{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

如果使用了 enum 来实现枚举类
1. 使用关键字 enum 替代 class
2. public static final Season SPRING = new Season("春天", "温暖") 直接使用SPRING("春天", "温暖")     解读   常量名(实参列表)
3. 如果有多个常量(对象), 使用 ,号间隔即可
4. 如果使用 enum 来实现枚举, 要求将定义常量对象, 写在前面

二、注意事项

一、对Season2进行反编译(javap)

使用enum关键字开发一个枚举类是,默认会继承Enum类,用javap来证明(反编译)

 1.Season2是一个final类

2.定义的四个对象本质还是public static final修饰的

如果我们使用的是无参构造器, 创建常量对象, 则是常量名(),并且可以省略 ()

package enum_;

public class Enumeration03 {
    public static void main(String[] args) {
        System.out.println(Season2.SPRING);
        System.out.println(Season2.AUTUMN);
    }
}
//演示使用enum关键字来实现枚举
enum Season2{

    //定义了四个对象
    //public static final修饰,因为是final修饰,所以必须是大写
//    public static final  Season2 SPRING =  new Season2("春天", "温暖");
//    public static final  Season2 WINTER =  new Season2("冬天", "寒冷");
//    public static final  Season2 SUMMER = new Season2("夏天", "炎热");
//    public static final  Season2 AUTUMN = new Season2("秋天", "凉爽");
    //如果使用了enum关键字来实现枚举
    //1.使用关键字 enum 来替代class
    //2.SPRING("春天", "温暖");  常量名/对象名(实参列表);
    //3.如果有多个常量(对象),使用逗号间隔即可
    //4.如果使用enum来实现枚举,要求将定义的对象,写在前面
    //5. 如果我们使用的是无参构造器, 创建常量对象, 则可以省略 ()
    SPRING("春天", "温暖"),WINTER("冬天", "寒冷"),
    SUMMER("夏天", "炎热"),AUTUMN("秋天", "凉爽"),
    //WHAT()调用的无参构造器,可以省略()
    //WHAT()的原型是public static final Season2 WHAT = new Season2();
    WHAT;


    //属性要放在枚举的对象的下面
    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 "Season2{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}
 

 三、练习题

第一题

以下代码是否正确?

 答案:正确的,在Gender类中隐藏着无参构造器,BOY和GIRL的完整写法是

public static final Gender BOY = new Gender();
public static final Gender GIRL = new Gender();

如果定义了有参构造器,那么上述代码就是错误的,需要显式的定义无参构造器

第二题

写出以下代码的输出结果

package enum_;



public class EnumExercise01 {
    public static void main(String[] args) {
        Gender boy = Gender.BOY;
        Gender boy2 = Gender.BOY;
        System.out.println(boy);
        System.out.println(boy2);
        boy.hi();
        System.out.println(boy2 == boy);
    }
}
enum Gender{
    BOY,GIRL;

    public void hi(){
        System.out.println(BOY);
    }

}

输出结果

 分析:

package enum_;



public class EnumExercise01 {
    public static void main(String[] args) {
        Gender boy = Gender.BOY;//调用Gender类的对象BOY
        Gender boy2 = Gender.BOY;//再次调用对象BOY
        System.out.println(boy);//调用Gender的父类Enum的toString()方法,返回BOY
        /*
         public String toString() {
            return name;
        }
        */
        System.out.println(boy2);
        boy.hi();
        System.out.println(boy2 == boy);//两者指向同一对象,true
    }
}
enum Gender{
    //1.创建两个Gender类的对象实例,名字分别为BOY何GIRL,没有实参
    //2. public static final Gender BOY = new Gender();
    //3. public static final Gender GIRL = new Gender();
    BOY,GIRL;

    public void hi(){
        System.out.println(BOY);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值