列举Jave枚举的几种操作方法
创始人
2024-07-24 11:30:11
0

Jdk 1.5后来了个哥们叫 enum 平时也用着,但也未做个总结啥地,今儿个同事问我如何用,就整理了下。

枚举其实就是一种类型,跟int, char 这种差不多,就是定义变量时限制输入的,你只能够赋enum里面规定的值。

定义枚举 方法很简单,就跟定义一个类一样,只是把class换成 enum,其他的,你懂地。e.g:

定义一个简单的枚举代码

  1. public enum WorkDay{     
  2.     Monday,Tuesday,Wednesday,Thurday,Friday;//定义时,枚举值间有逗号隔开,***用分号结束     
  3.   }  

 

废话不多说,直接上main 方法,拿去玩玩吧:

Java代码

  1. public static void main(String []args)     
  2. {     
  3.          /**    
  4.              * 枚举类型是一种类型,既然是类型,就是跟int,char他们 一样的,    
  5.          * 拿来定义变量,限制你对变量的赋值,就像 int a,你不能够给a一个 string的值    
  6.          * 同理,一个枚举用来定义一个变量时,你只能够赋枚举值,其方式为    
  7.          * "枚举名.值"    
  8.             */    
  9.     WorkDay  myworkday=WorkDay.Wednesday;        
  10.          /** 补充点switch的基础知识,switch语句括号中支持byte \short \char \int类型,    
  11.        * jdk 1.5以后支持枚举,所以,这里可以直接使用枚举变量myworkday。    
  12.        * 呵呵,在jdk1.7后将switch将支持string    
  13.           */       
  14.       switch (myworkday)     
  15.         {          
  16.     
  17.           /*枚举重写了toString()方法,所以枚举变量的值不带前缀    
  18.           * myworkday 里面的值应该是枚举括号里面的那几个    
  19.           */    
  20.         case Monday:     
  21.                           System.out.println("you work day is Monday !");     
  22.             break;     
  23.         case Tuesday:     
  24.                         System.out.println("you work day is Tuesday!");     
  25.             break;     
  26.         case Wednesday:     
  27.                         System.out.println("you work day is Wednesday !");     
  28.             break;     
  29.         case Thurday:     
  30.                         System.out.println("you work day is Thurday !");     
  31.             break;     
  32.         case  Friday:     
  33.                  System.out.println("you work day is Friday !");     
  34.              break;     
  35.         }     
  36.     System.out.println("--------遍历所有值----------");     
  37.     //----使用values()方法返回一个数组     
  38.          
  39.     for(WorkDay day:WorkDay.values())     
  40.     {            
  41.         System.out.println(day);     
  42.     }     
  43.     //-----既然是数组,就可以统计大小     
  44.     System.out.println("WorkDay 里面有   "+WorkDay.values().length+" 个元素");     
  45.                //--------------------调用 ordinal()方法,返回枚举值在枚举中的索引,数组索引嘛,当然从0开始     
  46.     System.out.println(WorkDay.Monday.ordinal());     
  47.     System.out.println(WorkDay.Friday.ordinal());     
  48.              //---默认实现java.lang.Comparable接口 ,测试测试     
  49.     System.out.println(WorkDay.Monday.compareTo(WorkDay.Thurday));//结果应该是 -3     
  50.     //---Monday的索引为0,Thurday为 3,0-3=-3,     
  51.     System.out.println(WorkDay.Friday.compareTo(WorkDay.Tuesday));//同理,结果应该为4-1=3,     
  52.          
  53. }   

 

简单吧,来点狠的,前面说了,枚举有点像类,只是把class换成了enum,那么它跟一般的类一样可以添加属性或方法。

带方法与属性的enum代码

  1. public enum WeAreJavaer{           
  2.         chinese,java, spring, DB2, AIX; // 枚举列表,必须写在最前面,否则编译出错     
  3.         private final static String location = "javaeye";      //定义一个属性     
  4.         public static WeAreJavaer getInfomation() {              
  5.          WeAreJavaer flag=null;     
  6.             if (location.equals("javaeye"))     
  7.               {     
  8.              flag=java;                  
  9.               }     
  10.             else     
  11.              {      
  12.              flag= chinese;     
  13.              }     
  14.               return flag;     
  15.             }     
  16.     } 

 

老规矩,直接上main()方法测试:

写道

 

  1. public static void main(String []ags)   
  2. {   
  3. System.out.println("---------------------测试调用枚举中写的方法-------------------------------");   
  4. System.out.println("直接调用枚举里面的方法: "+ WeAreJavaer.getInfomation());   

 

3、来点更狠的。

你可以通过括号来给enum赋值,这样的话,你必须有带参的构造方法,还需要有一属性与方法,否则编译时会出错。

另外,你如果给enum里面的元素赋值的话,要么都赋,要么都不赋,不要东赋一个,西赋一个。

如果不赋值则不能写构造方法,如果你赋值了,而没有构造方法,编译还是通不过,废话不多少,来,看:

可赋值的enum代码

  1. public enum People {              
  2.        xiaowang(20), xiaozhang(32),xiaoli(50), xiaogou(21);      
  3.       private final int age;        
  4.            
  5.        People(int value) { //构造器只能是默认或者private, 从而保证构造函数只能在内部使用     
  6.            this.age = value;     
  7.        }     
  8.        public int getAge() {     
  9.            return age;     
  10.        }     
  11.    }   

 

好吧,啥也不说了,接下来的事,你懂地:

测试带值enum代码

  1. public static void main(String[] args) {     
  2.        for(People people:People.values()){     
  3.            /*通过getValue()取得相关枚举的值*/     
  4.            System.out.println(people+" 的年龄 :"+people.getAge());     
  5.        }     
  6.    }  

【编辑推荐】

总结C#枚举在开发项目中的应用

MySQL字段中的枚举

详解ADO.NET Entity Framework 4中枚举的使用

WCF枚举类型正确使用方法演示

WCF枚举实现技巧总结

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...