标签:
1.枚举类
一个类的实例是有限且固定的,则这个类称为枚举类。比如季节类,只有四个对象(春、夏、秋、冬)。
1 //创建一个枚举类的 2 /* 3 (1)通过private将构造器隐藏起来 4 (2)把这个类的所有可能实例都使用private static final修饰的类变量来保存。 5 (3)如果有必要,可以提供一些静态方法。 6 */ 7 public class Demo 8 { 9 public static void main (String []args) 10 { 11 System.out.println("spring:"+Season.SPRING.getName()); 12 } 13 } 14 class Season 15 { 16 private String name; 17 private Season (String name) 18 { 19 this.name=name; 20 } 21 public static final Season SPRING=new Season ("春天") ; 22 public static final Season SUMMER=new Season("夏天"); 23 public static final Season AUTUMN=new Season ("秋天"); 24 public static final Season WINTER=new Season ("冬天"); 25 public String getName() 26 { 27 return this.name; 28 } 29 30 }
2.不可变类
不可变类:创建该类的实例后,该实例的Field是不可改变的。
如果要创建自定义的不可变类,需遵循如下规则:
3.Enum类(枚举)
enum的常用静态方法:
枚举类名.values() ;//以数组的形式返回该枚举的所有实例
Enum.valueOf(枚举类名.class,枚举实例名); //返回该枚举类下指定的枚举实例。
1 //访问枚举类的实例,或方法,以“枚举类名.实例”,“枚举类名.方法名”访问 2 //使用enum定义一个简单的枚举类 3 //使用enum的values()方法,遍历所有的枚举 4 public class Demo1 5 { 6 public static void main(String []args) throws Exception 7 { 8 method(SeasonEnum.SUMMER); 9 method2(); 10 } 11 public static void method2() 12 { 13 for ( SeasonEnum se: SeasonEnum.values() ) 14 { 15 System.out.println("SeasonEnum:"+se); 16 } 17 } 18 public static void method(SeasonEnum s) 19 { 20 switch (s) 21 { 22 default: System.out.println("null"); break; 23 case SPRING: System.out.println("spring"); break; 24 case SUMMER: System.out.println("summer"); break; 25 case AUTUMN: System.out.println("autumn"); break; 26 case WINTER: System.out.println("winter"); break; 27 28 } 29 30 } 31 } 32 enum SeasonEnum 33 { 34 SPRING ,SUMMER, AUTUMN ,WINTER ; 35 36 }
3.1一个规范化的枚举类(拥有自己不可变的Field)
1 /* 2 枚举类可以定义自己的Field和方法。 3 枚举类通常应该设计不可变类。其Field值不应该允许改变,这样会更安全。 4 所以枚举类的Field都应该使用private final修饰。 5 枚举实例名称一般都是大写字母 6 Enum.valueOf()方法演示 7 */ 8 enum Gender 9 { 10 MALE("男"),FEMALE("女"); 11 private Gender(String sex) 12 { 13 this.sex=sex; 14 } 15 private final String sex; 16 public String getSex() 17 { 18 return sex; 19 } 20 } 21 public class Demo2 22 { 23 public static void main (String []args) 24 { 25 Gender g=Gender.MALE; 26 System.out.println("Gender.MALE:"+g.getSex()); 27 //使用Enum.valueOf()方法访问枚举类下的某个实例 28 Gender g2=Enum.valueOf(Gender.class,"FEMALE"); 29 System.out.println("Enum.valueOf(Gender.class,\"FEMALE\"):"+g2.getSex()); 30 } 31 }
3.2枚举类实现一个或多个接口(且不同枚举实例有各自的接口实现方法)
1 //枚举类实现一个或多个接口(且不同枚举实例有各自的接口实现方法) 2 public class Demo3 3 { 4 public static void main (String []args) 5 { 6 Gender.MALE.info(); 7 } 8 }
//以下代码需要放在GenderInter.java文件中 public interface GenderInter { public void info(); } enum Gender implements GenderInter { MALE("男") { public void info() { System.out.println("我是男的"); } },FEMALE("女") { public void info() { System.out.println("我是女的"); } }; private Gender(String sex) { this.sex=sex; } private final String sex; public String getSex() { return sex; } }
3.3 包含抽象方法的枚举类
含有抽象方法的枚举类,它的每一个枚举实例必须覆盖重写该抽象方法
1 //注意:含有抽象方法的枚举类,它的每一个枚举实例必须覆盖重写该抽象方法 2 public class EnumAbstractDemo { 3 4 /** 5 * @param args 6 */ 7 public static void main(String[] args) { 8 // TODO Auto-generated method stub 9 System.out.println("plus:5+2="+Operation.PLUS.eval(5, 2)); 10 System.out.println("minus:5-2="+Operation.MINUS.eval(5, 2)); 11 System.out.println("times:5*2="+Operation.TIMES.eval(5, 2)); 12 System.out.println("divide:5/2="+Operation.DIVIDE.eval(5, 2)); 13 } 14 15 } 16 enum Operation 17 { 18 //定义四种加减乘除的枚举值 19 PLUS { 20 @Override 21 public double eval(double x, double y) { 22 // TODO Auto-generated method stub 23 return x+y; 24 } 25 },MINUS { 26 @Override 27 public double eval(double x, double y) { 28 // TODO Auto-generated method stub 29 return x-y; 30 } 31 },TIMES { 32 @Override 33 public double eval(double x, double y) { 34 // TODO Auto-generated method stub 35 return x*y; 36 } 37 },DIVIDE() { 38 @Override 39 public double eval(double x, double y) { 40 // TODO Auto-generated method stub 41 return x/y; 42 } 43 }; 44 public abstract double eval(double x,double y); 45 }
标签:
原文地址:http://www.cnblogs.com/beyondbycyx/p/4275255.html