zoukankan      html  css  js  c++  java
  • java的枚举2

    首先先理解一下java中枚举的本质。

    java的世界中一切皆是类,下面通过一个例子解释一下enum的本质:

    package cn.xnchall.enumeration;
    
    public class Grade {
        
        public void test() {
            print(grade.A);
        }
        
        
        public void print(grade g) {   //print A B C D E
            
        }
    }
    
    /*class grade{
        private grade(){}
        
        public static final grade A = new grade();
        public static final grade B = new grade();
        public static final grade C = new grade();
        public static final grade D = new grade();
        public static final grade E = new grade();
    }*/
    
    enum grade{    //class
        A,B,C,D,E;    //object
    }

    grade类和grade枚举类型作用是一样的,就是说枚举类型是一个比较严格的类。它不允许在外部new grade类,因为底层实现是private的。外部要想实现new操作,必须在grade的内部实现。

    下面正式介绍enumeration!

    1.定义枚举的构造函数、方法和字段

    
    
    package cn.xnchall.enumeration;
    
    
    public class Dome {
        
        public static void test() {
            print(grade.A);
        }
        
        
        public static void print(grade g) {   //print A B C D E
            System.out.println(g.getValue());
        }
        
        public static void main(String[] args){
            test();
        }
    }
    
    /*class grade{
        private grade(){}
        
        public static final grade A = new grade();
        public static final grade B = new grade();
        public static final grade C = new grade();
        public static final grade D = new grade();
        public static final grade E = new grade();
    }*/
    
    enum grade{   //class   A 100-90 B 89-80 C 79-70 D 69-60 E 59-0
        A("100-90")
        
        ,B("89-80")
        
        ,C("79-70")
        
        ,D("69-60")
        
        ,E("59-0")
        ;
        
        private String value; //每个字段的分数
        private grade(String value) {
            this.value = value;
        }
        
        public String getValue() {
            return this.value;
        }
    }
    
    
    
     

    上面将会执行得到的结果是:100-90

    未完待续

    将会补充:带有抽象方法的枚举

    2.带有抽象方法的枚举

    package cn.xnchall.enumeration;
    
    
    public class Dome {
        
        public static void test() {
            print(grade.A);
        }
        
        
        public static void print(grade g) {   //print A B C D E
            System.out.println(g.vValue());
        }
        
        public static void main(String[] args){
            test();
        }
    }
    
    /*class grade{
        private grade(){}
        
        public static final grade A = new grade();
        public static final grade B = new grade();
        public static final grade C = new grade();
        public static final grade D = new grade();
        public static final grade E = new grade();
    }*/
    
    enum grade{   //class   A 100-90优秀 B 89-80良好 C 79-70一般 D 69-60及格 E 59-0不及格
        A("100-90"){
            public String vValue() {
                return "优秀";
            }
        }
        
        ,B("89-80"){
            public String vValue() {
                return "良好";
            }
        }
        
        ,C("79-70"){
            public String vValue() {
                return "一般";
            }
        }
        
        ,D("69-60"){
            public String vValue() {
                return "及格";
            }
        }
        
        ,E("59-0"){
            public String vValue() {
                return "不及格";
            }
        }
        ;
        
        private String value; //每个字段的分数
        private grade(String value) {
            this.value = value;
        }
        
        public String getValue() {
            return this.value;
        }
        
        public abstract String vValue();
    }

    上面代码执行的结果是:优秀

    仔细研究上面的代码,很容易理解。

    总之,java的世界“一切皆是类”,枚举就是枚举类,它里边的数据就是枚举的对象。当然了它也具有类的其他属性。

  • 相关阅读:
    【转】Java操作CSV文件导入导出
    【转】Java压缩和解压文件工具类ZipUtil
    Python之multiprocessing.Pool(创建多个子进程)
    Openstack平台虚拟机疏散失败提示(pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query')问题
    kubernetes部署redis主从高可用集群
    Ceph性能测试
    python日志模块
    kubernetes删除pod,pod一直处于Terminating状态
    python执行提示“ImportError: No module named OpenSSL.crypto”
    二进制部署kubernetes集群_kube-apiserver提示"watch chan error: etcdserver: mvcc: required revision has been compacted'
  • 原文地址:https://www.cnblogs.com/xnchll/p/4786965.html
Copyright © 2011-2022 走看看