zoukankan      html  css  js  c++  java
  • 如何理解java枚举,看例子

    先来看一下不用枚举怎么表示常量:

    //常量类
    class Num {
        public static String ONE = "ONE";
        public static String TWO = "TWO";
        public static String THREE = "THREE";
        public static String FOUR = "FOUR";
        public static String FIVE = "FIVE";
    }
    
    //测试类
    public class Test{
        public static void main(String[] args) {
            System.out.println(Num.THREE);
        }
    }

    再来看一下用了枚举怎么表示常量:

    //常量类(枚举类)
    enum Num {
        ONE,TWO,THREE,FOUR,FIVE
    }
    
    //测试类
    public class Test{
        public static void main(String[] args) {
            System.out.println(Num.THREE);
        }
    }

    当然枚举还能用于 switch

    //常量类(枚举类)
    enum Num {
        ONE,TWO,THREE,FOUR,FIVE
    }
    
    //测试类
    public class Test{
        public static void main(String[] args) {
            Num num = Num.THREE;  
            switch (num) {  
            case ONE:  
                System.out.println(Color.ONE);  
                break;  
            case TWO:  
                System.out.println(Color.TWO);  
                break;  
            case THREE:  
                System.out.println(Color.THREE);   
                break;  
            case FIVE:  
                System.out.println(Color.FIVE);  
                break;      
            }  
        }
    }

    那么问题来了!

    枚举的成员是什么数据类型?  看下面的例子:

    //常量类(枚举类)
    enum Num {
        ONE(1),TWO(2),THREE(3),FOUR(4),FIVE(5);
        //构造方法(构造方法放在枚举成员的后面)
        Num (int data){}
    }
    
    //测试类
    public class Test{
        public static void main(String[] args) {
            System.out.println(Num.FOUR); 
        }
    }

    通过上面的例子可以看出,枚举侧成员就是一个对象,成员对象的数据,与构造方法相关,每个成员对象的数据结构相同。

    这里我们就可以理解Java枚举的一类相同的对象,这些对象内部的数据结构与枚举类的构造方法相关。

    接下来进一步验证枚举成员的数据结构是不是与构造方法相关:

    //常量类(枚举类)
    enum Num {
        ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");
        //构造方法
        Num (int data,String str){}
    }
    
    //测试类
    public class Test{
        public static void main(String[] args) {
            System.out.println(Num.FOUR); 
        }
    }

    通过上面的例子可以看出,枚举成员的数据结构只与构造方法相关。
    那怎么取出枚举成员的数据呢?通过观察▲可以看出枚举类中还没有get和set方法。

    //常量类(枚举类)
    enum Num {
        ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");
        //构造方法
        Num (int data,String str){
            this.data=data;
            this.str=str;
        }
        
        //成员变量
        int data;
        String str;
        
        //get方法
        int getData(){
            return data;
        }
        String getStr(){
            return str;
        }
        
    }
    
    //测试类
    public class Test{
        public static void main(String[] args) {
            System.out.println(Num.FOUR.getData()); 
            System.out.println(Num.FOUR.getStr()); 
        }
    }

    通过通过添加枚举类的成员变量和get方法之后成功获取了,成员的数据。

    这时再来回看java枚举类,就能发现Java枚举类和普通的类没什么不同,只是枚举成员就像数组对象一样存放,枚举成员的数据结构与构造方法相关。

    添加set方法之后就能修改它的值了:

    //常量类(枚举类)
    enum Num {
        ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");
        //构造方法
        Num (int data,String str){
            this.data=data;
            this.str=str;
        }
        
        //成员变量
        int data;
        String str;
        
        //get方法
        int getData(){
            return data;
        }
        String getStr(){
            return str;
        }
        //set方法
        void setData(int data){
            this.data = data;
        }
        void setStr(String str){
            this.str = str;
        }
        
    }
    
    //测试类
    public class Test{
        public static void main(String[] args) {
            System.out.println(Num.FOUR.getStr()); 
            Num.FOUR.setStr("四"); 
            System.out.println(Num.FOUR.getStr()); 
        }
    }

    枚举侧常规用法:

    //常量类(枚举类)
    enum Num {
        ONE(1, "小米"),TWO(2, "华为"),THREE(3, "苹果"),FOUR(4, "菠萝"),FIVE(5, "坦克");
        //构造方法
        Num (int index,String name){
            this.index = index;
            this.name = name;
        }
        
        //成员变量
        int index;
        String name;
        
        //get方法
        int getIndex(){
            return index;
        }
        String getName(){
            return name;
        }
        //set方法
        void setIndex(int index){
            this.index = index;
        }
        void setName(String name){
            this.name = name;
        }
        
        //根据index获取 name
        static String getNameByIndex(int idx){
           for (Num n : Num.values()) {  
                if (n.getIndex() == idx) {  
                    return n.name;  
                }  
            }  
            return "没有找到";  
        }
        
    }
    
    //测试类
    public class Test{
        public static void main(String[] args) {
            System.out.println(Num.getNameByIndex(3)); 
        }
    }
  • 相关阅读:
    自学Linux Shell2.1-进入shell命令行
    自学Linux Shell1.3-Linux文件系统
    自学Linux Shell1.2-Linux目录结构
    自学Linux Shell1.1-Linux初识
    03 自学Aruba之2.4GHz及5GHz无线信道
    02 自学Aruba之无线频段---ISM频段及UNII频段
    01 自学Aruba之功率单位和相对单位
    1.Zabbix报错信息:It probably means that the systems requires more physical memory.
    自学Aruba5.3.4-Aruba安全认证-有PEFNG 许可证环境的认证配置802.1x
    自学Aruba5.3.3-Aruba安全认证-有PEFNG 许可证环境的认证配置Captive-Portal
  • 原文地址:https://www.cnblogs.com/easyidea/p/14076605.html
Copyright © 2011-2022 走看看