`

java 枚举类型

    博客分类:
  • java
阅读更多

 

一,什么是枚举类型?

      枚举类型是由一组固定的常量组成的合法值得类型(其实也是一个类),枚举类型是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枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...

    理解java枚举类型

    Java枚举类型是Java语言中的一种特殊的类,用于定义一组固定的常量集合。它在Java中扮演着重要的角色,提供了一种安全、类型化的常量表示方式,比传统的final static变量更具有优势。理解Java枚举类型对于编写高质量...

    Java枚举类型.pdf

    总结起来,Java枚举类型是一个强大的工具,它可以替代`static final`常量来表示一组固定的值,提供类型安全、易于维护的代码。通过枚举,我们可以更方便地管理常量,减少错误,并增加代码的灵活性。枚举是Java中一个...

    简单总结java枚举类型

    Java枚举类型是Java语言中一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的方式来表示一组有限的值。枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用...

    java枚举类型说明

    ### Java枚举类型详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种重要的数据类型,在程序设计中扮演着不可或缺的角色。本文将深入探讨Java枚举类型的特性和用法,并通过具体实例说明其优势所在。枚举...

    JAVA枚举类型的用法详解

    下面我们将深入探讨Java枚举类型的常见用法。 首先,枚举类型在本质上等同于定义了一组静态常量。创建枚举类型的语法如下: ```java public enum Belle { para1, para2, para3, para4; } ``` 这会创建一个名为`...

    全面掌握java枚举类型(enum-type)1

    全面掌握 Java 枚举类型(enum type) Java 枚举类型是一种特殊的数据类型,它可以取有限个数的明确值。枚举类型的引入解决了 int 枚举模式和 String 枚举模式的缺点,提供了类型安全性、可读性和性能等优势。 ...

    如何使用Java枚举类型

    一个关于JAVA枚举类型的MHT文件,包含JAVA枚举类型的用法,以及JDK版本的问题。

    Java 枚举类型案例.zip

    在本压缩包中,"Java 枚举类型案例"可能包含了多个示例,以帮助我们深入理解Java枚举类型的使用。 1. **枚举的定义** 在Java中,枚举是通过关键字`enum`来定义的。例如,创建一个表示星期的枚举类型: ```java ...

    java枚举类型enum的使用

    ### Java 枚举类型 enum 的使用详解 #### 一、枚举类型概述 在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来...

    2021年JAVA枚举类型知识点.docx

    以下是关于Java枚举类型的详细知识点: 1. **枚举定义**: - 枚举类型通过`enum`关键字来定义,例如`public enum Color {RED, BLUE, BLACK, YELLOW, GREEN}`。 - 枚举实际上是`java.lang.Enum`类的子类,这意味着...

    JAVA枚举类型[归纳].pdf

    JAVA枚举类型[归纳].pdf

    高阶Java-Java枚举类型 enum 应用详解

    本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用它们。 一、枚举的基本用法 1. 声明枚举类型: ```java public enum Color { RED, GREEN, BLUE } ``` 在这里,`Color`是枚举类型,`RED`, `...

    java枚举结果类、根据状态值获取枚举值

    java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}” </#list>

    java枚举类型优秀源代码

    - **自动实现接口**:枚举类型会自动实现`java.lang.Enum<E>`接口,其中`E`是枚举类型的名称。 - **安全性**:枚举类型的成员是固定的,不允许外部添加或修改成员。 - **单例模式**:每个枚举成员都是单例的,只能被...

    JAVA枚举类型的用法.doc

    - 虽然Java枚举不能直接继承其他枚举或类,但它们隐式地扩展了`java.lang.Enum`类,因此可以实现接口。 7. **枚举与switch语句**: - 枚举常量可以用于`switch`语句,这是枚举类型的一个重要应用场景: ```java ...

    Java枚举类型在switch语句正确使用方法详解

    Java 枚举类型在 switch 语句正确使用方法详解 Java 枚举类型是 Java 语言中的一种特殊类型,用于定义一组具有一些公共特征的常量。Java 枚举类型在 switch 语句中的正确使用方法是本文的主要内容。通过示例代码,...

    Java枚举类型enum的详解及使用

    Java 枚举类型 enum 的详解及使用 Java 枚举类型 enum 是 Java 语言中的一种特殊的数据类型,自从 JDK 1.5 引入枚举类型以来,它已经成为了 Java 程序员中的一种常用工具。本文将对 Java 枚举类型 enum 进行详解,...

Global site tag (gtag.js) - Google Analytics