疯狂java学习笔记1005---枚举类

 实例有限而且固定的类,在java里称为枚举类。

手动实现枚举类:

  
  
  
  
  1. public class Season 
  2.     private final String name; 
  3.     private final String desc; 
  4.     public static final Season SPRING = new Season("春天","趁青踏青"); 
  5.     public static final Season SUMMER = new Season("夏天","下日炎炎"); 
  6.     public static final Season FALL = new Season("秋天","秋高气爽"); 
  7.     public static final Season WINTER = new Season("冬天","围炉赏雪"); 
  8.     public static Season getSeason(int seasonNum) 
  9.     { 
  10.         switch(seansonNum) 
  11.         { 
  12.             case 1:return SPRING;    
  13.             case 2:return SUMMER;    
  14.             case 3:return FALL;  
  15.             case 4:return WINTER;    
  16.             defaultreturn null
  17.         }    
  18.     }        
  19.     //将构造器定义成private访问权限 
  20.     private Season(String name,String desc) 
  21.     { 
  22.         this.name = name; 
  23.         this.desc = desc;    
  24.     } 
  25.     //只为name 和 desc 提供getter方法 
  26.     public String getName() 
  27.     { 
  28.         return name;     
  29.     } 
  30.     public String getDesc() 
  31.     { 
  32.         return desc;     
  33.     } 
  34. class SeasonTest 
  35.     public SeasonTest(Season s) 
  36.     { 
  37.         System.out.println(s.getName()+",这真是一个"+ s.getDesc()+"的季节"); 
  38.     }    
  39.     public static void main(String[] args) 
  40.     { 
  41.         //直接使用Season的FALl常量代表一个Season对象 
  42.         new SeasonTest(Season.FALL);     
  43.     } 

枚举类入门:

  
  
  
  
  1. /* 
  2.     枚举类继承的不是Object类而是Enum类 
  3.     非抽象的枚举类默认使用final修饰,抽象的由abstract修饰
  4.     枚举类的构造器默认private 
  5.     枚举类的所有实例必须在枚举类的第一行显式列出,且默认public static final修饰 
  6. */ 
  7. enum SeasonEnum 
  8.     //在第一行列出4个枚举实例   
  9.     SPRING,SUMMER,FALL,WINTER;//如果使用实例,则使用SeasonEnum.SPRING 
  10. public class EnumTest 
  11.     public void judge(SeasonEnum s) 
  12.     { 
  13.         //switch语句里的表达式可以是枚举类 
  14.         switch(s) 
  15.         { 
  16.             case SPRING:System.out.println("春暖花开,正好踏青");    break
  17.             case SUMMER:System.out.println("夏日炎炎,适合游泳");    break
  18.             case FALL:System.out.println("秋高气爽,进补及时");  break
  19.             case WINTER:System.out.println("冬日雪飘,围炉赏雪");    break
  20.         }    
  21.     } 
  22.     public static void main(String[] args) 
  23.     { 
  24.         //所有枚举类都有一个values方法,返回该枚举类的所有实例 
  25.         for(SeasonEnum s : SeasonEnum.values()) 
  26.         { 
  27.             System.out.println(s);   
  28.         } 
  29.         new EnumTest().judge(SeasonEnum.SPRING); 
  30.     } 

 switch的扩展:

switch的控制表达式可以是任何枚举类型,当switch控制表达式使用枚举类型时,后面case表达式中的值直接使用枚举值的名字,无需添加枚举类做限定。

枚举类的方法,Field,构造器

 

  
  
  
  
  1. enum Gender 
  2.     MALE,FEMALE; 
  3.     //定义一个public修饰的实例变量 
  4.     private String name;     
  5.     public void setName(String name) 
  6.     { 
  7.         switch(this
  8.         { 
  9.             case MALE: 
  10.             if(name.equals("男")) 
  11.             { 
  12.                 this.name = name;    
  13.             }    
  14.             else 
  15.             { 
  16.                 System.out.println("参数错误"); 
  17.                 return;  
  18.             } 
  19.             break
  20.             case FEMALE: 
  21.             if(name.equals("女")) 
  22.             { 
  23.                 this.name = name;    
  24.             }    
  25.             else 
  26.             { 
  27.                 System.out.println("参数错误"); 
  28.                 return;  
  29.             } 
  30.             break
  31.         }    
  32.     } 
  33.     public String getName() 
  34.     { 
  35.         return this.name;    
  36.     } 
  37. public class GenderTest 
  38.     public static void main(String[] args) 
  39.     { 
  40.         //通过Enum的valueOf方法来获取指定枚举类的枚举值 
  41.         Gender g = Enum.valueOf(Gender.class ,"FEMALE"); 
  42.          
  43.         g.setName("女"); 
  44.          
  45.         System.out.println(g + "代表:"+ g.getName());  
  46.          
  47.         g.setName("男");//提示参数错误 
  48.          
  49.         System.out.println(g + "代表:"+ g.getName());  
  50.     }    

因为我们将所有的Field都使用final修饰,所以必须在构造器中为这些Field指定初始值,为枚举类显示定义带参数的构造器:

 

  
  
  
  
  1. public enum Gender 
  2.     MALE("男"),FEMALE("女"); 
  3.     private final String name; 
  4.     //枚举类的构造器只能使用private修饰 
  5.     private Gender(String name) 
  6.     { 
  7.             this.name = name; 
  8.     } 
  9.     public String getName() 
  10.     { 
  11.         return this.name;    
  12.     } 

上面的编辑代码等于:

 

  
  
  
  
  1. public static final Gender MALE = new Gender("男"); 
  2. public static final Gender MALE = new Gender("女"); 

 

本文出自 “java程序猿的博客” 博客,转载请与作者联系!

你可能感兴趣的:(java)