您当前的位置:首页 > 互联网教程

java中的枚举到底有什么作用

发布时间:2025-05-25 06:32:02    发布人:远客网络

java中的枚举到底有什么作用

一、java中的枚举到底有什么作用

1、枚举是一种规范它规范了参数的形式,这样就可以不用考虑类型的不匹配并且显式的替代了int型参数可能带来的模糊概念枚举像一个类,又像一个数组。

2、Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class,它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。

3、1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。

4、2.所有枚举值都是public, static, final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。

5、3.Enum默认实现了java.lang.Comparable接口。

6、4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.

7、5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。

8、6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。

9、7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。

10、了解了这些基本特性,我们来看看如何使用它们。

11、1.遍历所有有枚举值.知道了有values方法,我们可以轻车熟路地用ForEach循环来遍历了枚举值了。

12、System.out.println(“find value:”+ c);

13、2.在enum中定义方法和变量,比如我们可以为Color增加一个方法随机返回一个颜色。

14、private static int number= Color.values().length;

15、public static Color getRandomColor(){

16、long random= System.currentTimeMillis()% number;

17、可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。

18、3.覆载(Override)toString, valueOf方法

19、前面我们已经知道enum提供了toString,valueOf等方法,很多时候我们都需要覆载默认的toString方法,那么对于enum我们怎么做呢。其实这和覆载一个普通class的toString方法没有什么区别。

20、这时我们可以看到,此时再用前面的遍历代码打印出来的是

21、可以看到toString确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法,以保持它们相互的一致性。

22、虽然enum不可以有public的构造函数,但是我们还是可以定义private的构造函数,在enum内部使用。还是用Color这个例子。

23、这里我们为每一个颜色提供了一个说明信息,然后定义了一个构造函数接受这个说明信息。

24、要注意这里构造函数不能为public或者protected,从而保证构造函数只能在内部使用,客户代码不能new一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。

25、我们已经知道enum可以定义变量和方法,它要实现一个接口也和普通class实现一个接口一样,这里就不作示例了。

26、前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载 toString的例子可以被改写成这样。

27、从逻辑上来说这样比原先提供一个“全局“的toString方法要清晰一些。

28、总的来说,enum作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂,个

29、人觉得一般也不需要过多的使用enum的一些高级特性,否则就和简单易懂的初衷想违背了。

二、java的enum到底有什么用

Enum一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换 equals。是一种好的习惯。 JDK1.5之前没有 Enum这个类型,那时候一般用接口常量来替代。有了 JavaEnum之后,可以更贴近的表示这种常量。

简单的用法: JavaEnum简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。如:

}

枚举对象里面的值都必须是唯一的。

枚举对象里面的值都必须是唯一的。

可以通过 Enum类型名直接引用该常量,如 SexEnum.male,Color.RED.

复杂用法: Java为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象,看个下面的例子:

*定义一个枚举类型,代表星期一到星期日的7个缩写常量

*同时还定义了枚举类型的属性day,该属性可以是final,也可是变量

*同时还定义了该枚举类型的一个方法printDay

Mon("Monday"),Tue("Tuesday"),Wed("Wednesday"),Thu("Thursday"),Fri(

"Friday"),Sat("Saturday"),Sun("Sunday");

publicstaticvoidprintDay(inti){

case1:System.out.println(WeekDay.Mon);break;

case2:System.out.println(WeekDay.Tue);break;

case3:System.out.println(WeekDay.Wed);break;

case4:System.out.println(WeekDay.Thu);break;

case5:System.out.println(WeekDay.Fri);break;

case6:System.out.println(WeekDay.Sat);break;

case7:System.out.println(WeekDay.Sun);break;

default:System.out.println("wrongnumber!");

publicstaticvoidmain(Stringargs[]){

for(WeekDayday:WeekDay.values()){

System.out.println(day+"====>"+day.getDay());

三、枚举类型是什么意思

枚举类型在C#或C++,java,VB等一些计算机编程语言中是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中是一种构造数据类型。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。

枚举可以根据Integer、Long、Short或Byte中的任意一种数据类型来创建一种新型变量。这种变量能设置为已经定义的一组之中的一个,有效地防止用户提供无效值。该变量可使代码更加清晰,因为它可以描述特定的值。

在C#或C++,java等一些计算机编程语言中,枚举类型是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中,它是一种构造数据类型。枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。

定义:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.

使用格式:枚举类型放在窗体模块、标准模块或共用模块中的声明部分,通过enum语句来定义。

.格式:[public|private] enum name

membername[=constantexpression]

membername[=constantexpression]

public:表示该枚举类型在整个工程中都是可见的(缺省的)

private:表示枚举类型只在所声明的模块中是可见的。Name:枚举类型的名称。必须是一个合法的VB标识符,在定义该枚举类型的变量或参数时用该名称来指定类型.

Membername:指定该枚举类型的组成元素名称.

Constantexpression:枚举类型的组成元素的值.如果没有指定具体值,则所有赋的值或者是0或者比其直接前驱的值大1.元素的值也可以是别的enum类型.VB中将枚举中的元素的值按长整数处理.如果将一个浮点数值赋给一个枚举中的元素,VB会将该值取整为最接近的长整数.