一,什么是枚举类型?
枚举类型是由一组固定的常量组成的合法值得类型(其实也是一个类),枚举类型是Java1.5发行版本中增加的两个新的引用类型家族中的一个(另外一个是注解类型annotation type)。
java枚举类型的基本想法非常简单:它们就是通过共有的静态的final域为个枚举常量导出实例的类。
简单的枚举类型定义:
Public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN }
从上面可以看出来enum很像特殊的class,实际上enum声明定义的类型就是一个类。 而这些类都是类库中Enum类的子类(java.lang.Enum)。它们继承了这个Enum中的许多有用的方法。我们对代码编译之后发现,编译器将 enum类型单独编译成了一个字节码文件:Color.class。
二,为什么要使用枚举类型?
在java还没有映入枚举类型之前,表示枚举类型的常用模式是声明一组具有名字的int常量(类似的还有string 枚举,其实都一样只是类型不同,现在在很多程序中还可以看见),每个类型成员的一个常量:
public static final int APPLE_FUJT=0; public staitc final int APPLE_PPIN=1; public static final int ORANGE_NAGVEL=0; public static final int ORANGE_TEMPLE=1;
采用这种int枚举模式的程序是十分脆弱的。因为int枚举是编译时常量(编译时候值就确定了),被编译到使用它们的客服端中,如果与枚举常量关联的int发生了变化,客服端就必须从新编译。它会导致初级用户把int 常量硬编码到客服端中而且如果出错的时候比如:需要APPLE_FUJT的时候你传入了ORANGE_NAGVEL编译器是不会报错的,程序不正常然后去debug的时候也比较难找到错误。Java1.5开始就有了另外一种可以体态的解决方案,可以避免int枚举模式的缺点,并提供额外的好处--就是Java枚举类型。
public enum Apple{ FUJT,PIPPIN,GRANNY_AMITH } public enum Orange{ NAVEL ,TEMPLE,BLOOD }
枚举提供了编译时的类型安全,如果声明一个参数类型为Apple,就可以保证,被传到该参数的任何非Null 的对象引用一定属于三个有效的Apple值之一。试图传递类型错误的值的时候编译器就会报错。
三,怎么使用枚举?
a.最基本的枚举
可以和switch搭配使用
enum Car { lamborghini,tata } public class Main { public static void main(String args[]){ Car c; c = Car.tata; switch(c) { case lamborghini: System.out.println("You choose lamborghini!"); break; case tata: System.out.println("You choose tata!"); break; default: System.out.println("I don't know your car."); break; } } }
b.复杂一点的枚举
枚举除了完善了int枚举模式的不足之外,枚举类型还允许添加任意的方法和域(field),并实现任意的接口(把枚举理解成一个java类就很容易想到了)。那么我们为什么要将方法添加到枚举类型中呢?首先,你可能是想将数据与他的常量关联起来 比如太阳系的8课行星。每颗行星都有质量和半径,通过这两个属性可以计算出它表明的重力。从而给定物体的质量,就可以计算出一个物体在行星上面的重力
public enum Planet{ MERCURY(3.302e+23,2.439e6), //调用构造方法创建一个名为MERCURY的实例 VENUS(4.869e+24,6.052e6), EARTH(5.795e+24,6.378e6); private final double mass; private final double radius; private final double surfaceGravity; private static final double G=6.67300E-11; Planet(double mass,double radius){ this.mass=mass; this.radius=radius; surfaceGravity=G*mass/(radius*radius); } public double surfaceWeight(double mass){ return mass * surfaceGravity; } } /****客户端***********/ public class WeightTable{ public static void main(String[] args){ double earthWeight=Double.parseDouble(args[0]); double mass=earthWeight/Planet.EARTH.surfaceGravity(); for(Planet p: Planet.values()){ System.out.println("weight on %s is %f%n",p,p.serfaceWeight(mass)); } } }
其实只要理解枚举是一个普通的java类就很容易理解java 枚举的使用了。
注:以上的知识点大多来自《Effective java》(java程序员必读),如果想更深入的了解建议看看原书和其它资料。部分例子来之与网上其它博客。如果有说的不对的地方欢迎大神指点。
相关推荐
Java枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...
Java枚举类型是Java语言中的一种特殊的类,用于定义一组固定的常量集合。它在Java中扮演着重要的角色,提供了一种安全、类型化的常量表示方式,比传统的final static变量更具有优势。理解Java枚举类型对于编写高质量...
总结起来,Java枚举类型是一个强大的工具,它可以替代`static final`常量来表示一组固定的值,提供类型安全、易于维护的代码。通过枚举,我们可以更方便地管理常量,减少错误,并增加代码的灵活性。枚举是Java中一个...
Java枚举类型是Java语言中一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的方式来表示一组有限的值。枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用...
### Java枚举类型详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种重要的数据类型,在程序设计中扮演着不可或缺的角色。本文将深入探讨Java枚举类型的特性和用法,并通过具体实例说明其优势所在。枚举...
下面我们将深入探讨Java枚举类型的常见用法。 首先,枚举类型在本质上等同于定义了一组静态常量。创建枚举类型的语法如下: ```java public enum Belle { para1, para2, para3, para4; } ``` 这会创建一个名为`...
全面掌握 Java 枚举类型(enum type) Java 枚举类型是一种特殊的数据类型,它可以取有限个数的明确值。枚举类型的引入解决了 int 枚举模式和 String 枚举模式的缺点,提供了类型安全性、可读性和性能等优势。 ...
一个关于JAVA枚举类型的MHT文件,包含JAVA枚举类型的用法,以及JDK版本的问题。
在本压缩包中,"Java 枚举类型案例"可能包含了多个示例,以帮助我们深入理解Java枚举类型的使用。 1. **枚举的定义** 在Java中,枚举是通过关键字`enum`来定义的。例如,创建一个表示星期的枚举类型: ```java ...
### Java 枚举类型 enum 的使用详解 #### 一、枚举类型概述 在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来...
以下是关于Java枚举类型的详细知识点: 1. **枚举定义**: - 枚举类型通过`enum`关键字来定义,例如`public enum Color {RED, BLUE, BLACK, YELLOW, GREEN}`。 - 枚举实际上是`java.lang.Enum`类的子类,这意味着...
JAVA枚举类型[归纳].pdf
本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用它们。 一、枚举的基本用法 1. 声明枚举类型: ```java public enum Color { RED, GREEN, BLUE } ``` 在这里,`Color`是枚举类型,`RED`, `...
java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}” </#list>
- **自动实现接口**:枚举类型会自动实现`java.lang.Enum<E>`接口,其中`E`是枚举类型的名称。 - **安全性**:枚举类型的成员是固定的,不允许外部添加或修改成员。 - **单例模式**:每个枚举成员都是单例的,只能被...
- 虽然Java枚举不能直接继承其他枚举或类,但它们隐式地扩展了`java.lang.Enum`类,因此可以实现接口。 7. **枚举与switch语句**: - 枚举常量可以用于`switch`语句,这是枚举类型的一个重要应用场景: ```java ...
Java 枚举类型在 switch 语句正确使用方法详解 Java 枚举类型是 Java 语言中的一种特殊类型,用于定义一组具有一些公共特征的常量。Java 枚举类型在 switch 语句中的正确使用方法是本文的主要内容。通过示例代码,...