Java 枚举类

1.定义

  1. 枚举类也是一个类,既然是类,那么就会有构造器,对象,属性,方法

  2. 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便

2.枚举类和普通类的不同

既然是用于类的对象是有限且固定的,我们自然可以使用私有化构造器的方式,在内部创建好静态对象,一样能达到类的对象是有限且固定的
枚举类岂不是很鸡肋? 难道只是为了使用方便?
​
但是,我们还要考虑到java中的反射,反射是可以拿到私有的构造器,并且通过这个私有的构造器创建对象
普通类: 在被反射以后,可以创建多个对象,除了我们在内存创建的静态对象,那么此时类的对象就不是有限且固定的
枚举类: 内部实现的机制,不再能够被反射,反射就给你报异常

3.枚举类的使用

既然是类就从类的构造器,对象,属性,方法来使用

//定义一个城市枚举类
public enum City {
    //枚举对象
    BeiJing(1000,"beifang"),
    GuangZhou(1111,"nanfang");
​
    //类的构造器
    City(int code,String location) {
        this.code = code;
        this.location = location;
    }
​
    //这两个就是类的属性   code城市编码, location地点 这里只使用南方北方表示
    private int code;
    private String location;
​
    //下面是我们类的方法
    public int getCode() {
        return code;
    };
    public String getlocation() {
        return location;
    };
}

1.对象

枚举对象,要以`,`逗号分隔开,连续写对象,直到最后一个以`;`结束
直接以对象名字加(参数列表)的方式构建,同普通类的new对象不同
​
参数列表: 同普通类一样,参数列表能写什么完全依赖于你定义了什么构造方法

2.构造方法

同普通类一样,但是构造器都是私有化的
1. 不写构造方法就是默认生成一个无参构造方法   构造对象时括号内什么都不能写 
    public enum City {
        //枚举对象
        BeiJing(),
        GuangZhou();
​
        //这两个就是类的属性   code城市编码, location地点 这里只使用南方北方表示
        private int code;
        private String location;
    }
2. 写有参构造以后就不会再默认生成无参
    这时再创建对象时不穿参数就报错了
3. 有参数无参数都写
        BeiJing(1000,"beifang"),
        GuangZhou(1111,"nanfang"),
        Shanghai(),
        DaLian(7777);
​
        //类的构造器
        City() {
        }
        City(int code,String location) {
            this.code = code;
            this.location = location;
        }
        City(int code) {
            this.code = code;
        }

3.属性

属性可以是 public private prodected
访问权限也和普通类一致

4.方法

同普通类一样   可以随意定访问权限   也可以随意定义方法的实现
    //下面是我们类的方法
    public int getCode() {
        return code;
    };
    public String getlocation() {
        return location;
    };
    public String getnum() {
        return code+location;
    }

4.使用场景

一般在项目中,多使用在返回状态码,返回信息中,约定好哪些场景使用哪个枚举对象,并且将属性私有化,对外只提供get方法

例: 在请求成功以后就是返回枚举对象SUCCESS,这个SUCCESS对象的信息也不允许修改

当然上述也不是绝对的,只是举出一个场景

public enum R {
    SUCCESS(200,"成功"),
    ERROR(500,"失败");
​
    private int code;
    private String msg;
    BizCodeEnume(int code,String msg){
        this.code = code;
        this.msg = msg;
    }
​
    public int getCode() {
        return code;
    }
​
    public String getMsg() {
        return msg;
    }
}

你可能感兴趣的:(java,开发语言,后端)