zoukankan      html  css  js  c++  java
  • java学习笔记10--枚举

     java学习笔记10--枚举

    在JDK1.5之前,java可以有两种方式定义新类型:类和接口。对于大部分面向对 象编程来说,这两种方法看起来似乎足够了,但是在一些特殊情况下,这些方法就不适合。例如,想定义一个Color类,它只能有Red 、Green、 Blue三种值,其他的任何值都是非法的,那么JDK1.5之前虽然可以构造这样的代码,但是要做很多的工作,也有可能带来各种不安全的问题。而 JDK1.5之后引入的枚举类型(Enum)就能避免这些问题。

    所谓的枚举就是规定好了指定的取值范围,所有的内容只能从指定的范围中取得。

    使用简单类完成颜色的固定取值问题。

    1. package com.itmyhome;  
    2.   
    3. class Color{  
    4.     public static final Color colorRed =  new Color("红色");  
    5.     public static final Color colorGreen =  new Color("蓝色");  
    6.     public static final Color colorBlue =  new Color("绿色");  
    7.     private String name;  
    8.     public Color(String name){  
    9.         this.name = name;  
    10.     }  
    11.     public String getName() {  
    12.         return name;  
    13.     }  
    14.     public void setName(String name) {  
    15.         this.name = name;  
    16.     }  
    17. }  
    18. public class T {  
    19.     public static void main(String[] args) throws Exception{  
    20.         Color cRed = Color.colorRed;  
    21.         System.out.println(cRed.getName());  
    22.     }  
    23. }  


    此时,程序限定了所能取的对象的范围,所以达到了枚举的功能,以上是一种枚举的方式,在最早的java开发中因为没有枚举这种概念,所以有时候也使用接口表示。

    1. interface Color{  
    2.     public static final int RED = 1;  
    3.     public static final int GREEN = 2;  
    4.     public static final int BLUE = 3;  
    5. }  


    定义一个枚举类型

    在JDK1.5之后,引入了一个新的关键字类型 enum,可以直接定义枚举类型,格式如下:

    【public】 enum  枚举类型名称{

               枚举对象1,枚举对象2,.......枚举对象n;

    }

    使用enum关键字定义。

    1. public enum Color {  
    2.     RED,GREEN,BLUE;  
    3. }  

    因为枚举已经指定好了范围,所以可以使用foreach 进行全部的输出,使用“枚举.values()”的形式取得全部的枚举内容。

    1. package com.itmyhome;  
    2.   
    3. enum Color {  
    4.     RED,GREEN,BLUE;  
    5. }  
    6.   
    7. public class T {  
    8.     public static void main(String[] args) throws Exception{  
    9.         for(Color c:Color.values()){  
    10.             System.out.println(c);  
    11.         }  
    12.     }  
    13. }  


    还可以直接将内容在switch语句上使用。

    1. package com.itmyhome;  
    2.   
    3. enum Color {  
    4.     RED, GREEN, BLUE;  
    5. }  
    6.   
    7. public class T {  
    8.     public static void main(String[] args) throws Exception{  
    9.         for(Color c:Color.values()){  
    10.             print(c);  
    11.         }  
    12.     }  
    13.     public static void print(Color color){  
    14.         switch(color){  
    15.             case RED:{  
    16.                 System.out.println("红色");  
    17.                 break;  
    18.             }  
    19.             case GREEN:{  
    20.                 System.out.println("绿色");  
    21.                 break;  
    22.             }  
    23.             case BLUE:{  
    24.                 System.out.println("蓝色");  
    25.                 break;  
    26.             }  
    27.             default:{  
    28.                 System.out.println("未知颜色");  
    29.             }  
    30.         }  
    31.     }  
    32. }  


     

    Enum

    从前面已经清楚的知道,使用enum关键字可以定义一个枚举,实际上此关键字表示的是 java.lang.Enum类型,即:使用enum声明的枚举类型,就相当于定义一个类,而此类则默认继承java.lang.Enum类。

    java.lang.Enum类的定义如下:

    1. public abstract class Enum<E extends Enum<E>>  
    2. extends Object   
    3. implements Comparable<E>, Serializable  

    此类定义的时候使用了泛型机制,而且实现了Comparable接口以及Serializable接口,证明此中类型是可以比较,可以被序列化的。

    枚举类的主要方法

    Enum类的构造方法:

    1. protected  Enum(String name, int ordinal)   


    构造方法中接收两个参数,一个表示枚举的名字,一个表示枚举的序号。

    1. for(Color c:Color.values()){  
    2.             System.out.println(c.name()+"----"+c.ordinal());  
    3.         }  


    希望可以使用一些文字表示颜色的信息,则可以按照最早的Color类的形式,在枚举中定义属性及自己的构造方法,但是一旦定义有参构造之后,在声明枚举对象的时候就必须明确的调用构造方法,并传递参数。

    1. package com.itmyhome;  
    2.   
    3. enum Color {  
    4.     RED("红色"), GREEN("绿色"), BLUE("蓝色");   //传入参数  
    5.     private String name;  
    6.     private Color(String name){  //定义构造方法  
    7.         this.name = name;  
    8.     }  
    9.     public String getName() {  
    10.         return name;  
    11.     }  
    12.     public void setName(String name) {  
    13.         this.name = name;  
    14.     }  
    15.       
    16. }  
    17.   
    18. public class T {  
    19.     public static void main(String[] args) throws Exception{  
    20.         for(Color c:Color.values()){  
    21.             System.out.println(c.ordinal()+"----"+c.name()+"----"+c.getName());  
    22.         }  
    23.     }  
    24. }  

    java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型

  • 相关阅读:
    VysorPro助手
    Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
    Play 2D games on Nexus 6P running Android N7.1.1 with Daydream View VR headset
    Native SBS for Android
    ADB和Fastboot最新版的谷歌官方下载链接
    How do I install Daydream on my phone?
    Daydream Controller手柄数据的解析
    蓝牙BLE传输性能及延迟分析
    VR(虚拟现实)开发资源汇总
    Android(Java)控制GPIO的方法及耗时分析
  • 原文地址:https://www.cnblogs.com/timssd/p/4790457.html
Copyright © 2011-2022 走看看