java枚举类型特点_[JAVA]枚举类型的应用

本文介绍枚举类的概念和开发过程中枚举的用法。

枚举类使用enum关键字定义,enum默认继承自Enum类,由于java单继承的特点,enum类无法再继承其他父类

一、枚举类的特性

1、简单枚举类的定义

枚举类用关键字enum定义,成员变量之间用逗号分隔,最后一个成员变量用分号结束。枚举类的命名建议加上Enum后缀。

代码如下:

public enum FruitEnum {

APPLE,

ORANGE,

BANANA,

PEAR

}

枚举的成员变量均为常量,可以通过FruitEnum.APPLE调用,构造方法被默认强制是私有,禁止通过new关键字实例化。

枚举类自带values()方法可以返回该枚举的所有实例

2、添加自定义方法

枚举类继承自Enum,默认实现了很多常用方法,包括:toString(),compareTo(),equals(),hashCode()等。

我们也可以给枚举类添加自定义方法,需要注意如下几点:

1、自定义方法必须在enum实例之后;

2、如果显示指明了构造方法,必须是默认(enum中默认既是私有)或私有

3、最后一个实例需要加分号

例如,给简单示例增加要给重写的toString()方法:

public enum FruitEnum {

APPLE,

ORANGE,

BANANA,

PEAR;

@Override

public String toString() {

return "fruit:"+super.toString();

}

}

3、实现构造函数

public enum FruitEnum {

/**

* description 苹果

**/

APPLE("苹果", 1),

/**

* description 橘子

**/

ORANGE("橘子", 2),

/**

* description 香蕉

**/

BANANA("香蕉", 3),

/**

* description 梨

**/

PEAR("梨", 4),

/**

* description 猕猴桃

**/

KIWI_FRUIT("猕猴桃", 5);

private String description;

private final Integer value;

/**

* description 构造函数

* param [description, value]

**/

FruitEnum(String description, int value) {

this.description = description;

this.value = value;

}

/**

* description 根据枚举值获取枚举对象

* param [value]

* return com.company.enumtest.FruitEnum

* author 郑晓龙

* createTime 2019/12/3 10:35

**/

public static FruitEnum getFruitEnumByValue(Integer value) {

if (value == null) {

return null;

}

for (FruitEnum fruitEnum : FruitEnum.values()) {

if (fruitEnum.ordinal() == value) {

return fruitEnum;

}

}

throw new NoSuchElementException();

}

public String getDescription() {

return description;

}

public Integer getValue() {

return value;

}

}

二、枚举的应用场景

1、switch语句中使用枚举

case语句中不需要写枚举类名,可以直接写枚举实例,例如:

FruitEnum fruit = FruitEnum.KIWI_FRUIT;

switch (fruit){

case APPLE:

System.out.println("get apple!");

break;

case KIWI_FRUIT:

System.out.println("get KIWI_FRUIT!");

break;

default:

System.out.println("default");

}

2、枚举实现单例模式

由于枚举天然的静态化和不可用new实例化,可以用于单例模式

public enum Singleton {

INSTANCE;

/**

* description 无参构造函数(可以省略)

**/

private Singleton(){

System.out.println("I'm singleton");

}

public static void doSomething(){

System.out.println("I'm doing!");

}

}

main方法中使用单例:

Singleton.doSomething();

Singleton.doSomething();

执行结果:

I'm singleton

I'm doing!

I'm doing!

可以看到,当Singleton类第一次被调用时,实例化了该单例类,并执行了方法,第二次直接执行了方法。

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值