corejava学习-----------------枚举类

本文围绕Java枚举类展开,介绍了其实质,即不允许随便构建对象,会提前产生自身可有的对象;阐述了书写规则,如构造器须私有化等;说明了特性,像不能继承其他类但可实现接口;还介绍了获取对象的三种方式及通过反编译查看源码的方法。

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

枚举类(普通类)

(一)枚举类的实质

    1.枚举类是不允许随便构建对象的
    2.枚举类内部会把自己这个类可以产生的对象提前产生,并且以变量形式放置到类的第一行。
    3.有一个类,里面的类型相对是固定的,这时候就可以将其设置为枚举类

 


(二)枚举类的书写规则

    public enum className{
        //必须是第一行,把由这个类构建的对象列举出来
        //属性
        //方法
        //构造器(必须私有化)
    }


    public enum TrafficSign{}     // 是下面形式的简写形式
    public final TrafficSign extends Enum{ }    //所以枚举类是无法再继承其他父类

/*
 * enum TrafficSign{}  是下面形式的简写形式
 * public final TrafficSign extends Enum{ }
 * 枚举类是无法在继承其他父类
 */
enum TrafficSign{
    //第一行必须为由这个类产生的对象
    /*
     * final static RED = new TrafficSign("");
     * final static YELLOW = new TrafficSign("");
     * final static GREEN = new TrafficSign("");
     */
    RED,YELLOW,GREEN;
    //属性
    public String color;
    //方法
    public void rule() {
        System.out.println("红灯停,绿灯行,黄灯等一等");
    }
    //私有构造器
    private TrafficSign() {
        System.out.println("无参构造器被调用");
    }
    private TrafficSign(String color) {
        this.color = color;
        System.out.println("有参构造器被调用");
    }
}

 

(三)枚举类的特性

    (1)不能继承其他类,因为继承了Enum类,但是可以实现其他若干个接口
        1).直接在类中把接口中的方法实现;枚举类中的对象都是用的同一套方法的实现
        2).构建每个对象的时候,在对象中对方法进行实现;

/*
 * final class Color extends Enum implements ColorInterface
 */
enum Color implements ColorInterface{
    //如果每个对象的实现方式不一样的话就可以使用这种方式:
    //构建每个对象的时候,把每个接口中的方法分别实现,
    RED("red"){
        @Override
        public void test() {
            System.out.println("red");
        }
    },GREEN("green"){
        @Override
        public void test() {
            
        }
    },BLUE(){
        @Override
        public void test() {
            
        }

    };
    public void getColor(int num1,int num2) {
        System.out.println(num1+num2);
    }
    
    //将接口中的方法在类中进行统一的实现

    @Override
    public void test() {
        System.out.println("test=========");
    }

    @Override
    public void test1(int num1, int num2, int num3) {
        System.out.println(num1+num2+num3+"============");
    } 
    private Color() {
        
    }
    private Color(String color) {
        
    }
}
interface ColorInterface{
    public void test();
    public void test1(int num1,int num2,int num3);
    
}


    (2)枚举类中也可以有抽象方法,但是由于枚举类实质是由final修饰的类,不能有子类,所以我们声明了抽象方法之后,必须在枚举类中对抽象方法进行实现。

//枚举类;抽象方法的声明
enum Gender{
    MAN(){
        @Override
        public void test(int a, int b) {
            System.out.println("test===man====挣钱"+(a+b));
            
        }
    },WOMAN(){
        @Override
        public void test(int a, int b) {
            System.out.println("woman   天天花钱"+(a+b));
        }
    };
    public abstract void test(int a,int b);
    
}

 

(四)获取枚举类对象的三种方式

(1)由于枚举类对象是public final static修饰的,所以可以直接使用 类名.对象 的方式获取

    TrafficSign a = TrafficSign.RED;

(2)使用从父类Enum继承下来的 valueOf("对象") 方法获取枚举类对象

    TrafficSign sign = TrafficSign.valueOf("GREEN");
    sign.rule();

(3)使用从父类Enum继承下来的values()方法获取所有的枚举类对象

    TrafficSign[] dengs = TrafficSign.values();
    for(int i=0;i<dengs.length;i++) {
        System.out.println(dengs[i]);
    }

 

(五)通过反编译查看枚举类的源码:

(1)使用jdk自带的反编译工具
    javap -p TrafficSign.class

(2)将枚举类进行反编译,查看枚举类的代码,可知:
    1.枚举类是final修饰的并继承了Enum类
    2.枚举类的对象是 public static final修饰的
    3.枚举类中还有从父类继承下来的values()方法和valueOf()方法

final class com.briup.day16.TrafficSign extends java.lang.Enum<com.briup.day16.TrafficSign> {
  public static final com.briup.day16.TrafficSign RED;
  public static final com.briup.day16.TrafficSign YELLOW;
  public static final com.briup.day16.TrafficSign GREEN;
  public java.lang.String color;
  private static final com.briup.day16.TrafficSign[] ENUM$VALUES;
  static {};
  public void rule();
  private com.briup.day16.TrafficSign(java.lang.String, int);
  private com.briup.day16.TrafficSign(java.lang.String, int, java.lang.String);
  public static com.briup.day16.TrafficSign[] values();
  public static com.briup.day16.TrafficSign valueOf(java.lang.String);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值