---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
枚举学习总结:
1.枚举是有限取值范围的一种类型,有时候我们想让一个变量的取值局限于有限个数中的一个或几个,而不能随心所欲的为变量赋值,这时候就要用到枚举了。
2.枚举本质上仍然是类,枚举中的每个成员都是该类的一个实例对象,但在枚举类外部不能够new出枚举类的实例对象,这一点和单例设计模式类似,实际上,我们可以通过创建一个只有一个成员的枚举类来实现单例设计模式。
3.创建枚举类用到了关键字enum,创建枚举类的成员时不用写new关键字,直接写出成员的名字就行了,习惯上,成员的名字都为大写,但不是强制的,多个成员之间用逗号分隔,创建枚举类成员的操作必须在枚举类的最开始,一旦为枚举类定义了方法或变量后,就不能再继续创建枚举类的成员了。
4.可以以创建匿名内部类的方式给枚举类成员添加成员变量或方法,每个枚举类成员都可以都自己特有的成员变量和方法,而且,枚举类成员中可以继续定义枚举类成员就像枚举类定义枚举类成员那样。
5.因为枚举类在枚举类外面是不可new的,所以枚举类中供外界访问的方法都必须为静态方法,枚举类中可以定义抽象方法,一旦枚举类中定义了抽象方法,那么枚举类中的所有成员都必须实现枚举类中定义的抽象方法,一般的,我们使用枚举类的方式和使用异常类的方式类似,只是使用它的名字。
6.枚举类型可以被用在switch语句中,在switch语句中的case语句使用枚举时不必写出枚举类的类名,直接写出枚举类的成员名即可,枚举能用在switch语句中说明枚举中的成员是有序的,我们也可以通过ordinal()函数取得他在枚举类中的次序。
7.枚举中的values()和valueOf(String name):values()可以取得枚举类的成员数组,valueOf(String name)可以根据给定的字符串名返回对应的枚举类中的成员变量,这两个方法并不是枚举类原生就有的,而是编译器自动帮我们添加的。
以下是关于枚举的一些示例:
1.创建一个简单的枚举类:
/** * 定义枚举需要使用关键字enum,枚举中的成员必须定义在 * 类的最开始 */ public enum Week{ SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;//枚举类中的成员 }
2.在我们的类中使用枚举类:
/** * 枚举类不能够new出实例对象,使用枚举类必须以类名.成员名的方式 * 当然在case语句中类名可以省略 * */ public enum Week{//定义一个枚举类 SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FIRDAY,SATURDAY; } public class Test{ public static void main(String[]args){ Week today=Week.SATURDAY;//定义一个枚举类型并给他赋值 method(today);//以枚举类型变量作为参数去调用方法 } public static void method(Week day){ switch(day){ case SUNDAY: System.out.println("today is sunday"); break; case MONDAY: System.out.println("today is monday"); break; case TUESDAY: System.out.println("today is tuesday"); break; case WEDNESDAY: System.out.println("today is wednesday"); break; case THURSDAY: System.out.println("today is thursday"); break; case FRIDAY: System.out.println("today is friday"); break; case SATURDAY: System.out.println("today is saturday"); break; default: break; } } }
3.带抽象方法的枚举类:/** * 枚举类中可以有抽象方法,但枚举类中的每个成员都必须实现枚举类 * 中定义的抽象方法 */ public enum AbstractEnum{ A{ public void show(){//A成员实现的抽象方法 System.out.println("A show"); } }, B{ public void show(){//B成员实现的抽象方法 System.out.println("B show"); } }, C{ public void show(){//C成员实现的抽象方法 System.out.println("A show"); } }; public abstract void show();//在枚举类中声明抽象方法 }
4.带特有方法的枚举:5.通过接口来组织枚举:/** * 枚举类中的成员可以有自己的特有方法或成员变量,定义 * 特有方法和实现抽象方法的操作类似 */ public enum SpecificEnum{ A{ public void play(){//A成员中的特有方法play System.out.println("playing") } }, B{ public void eat(){//B成员中的特有方法eat System.out.println("eating"); } }, C{ public void sleep(){//C成员中的特有方法sleep System.out.println("sleeping"); } }; }
/** * 有时候我们可能需要将枚举类进行分类,典型的分类方式就是 通过继承, * 即让相似的类去继承同一个父类,比如说:动物下面有水生动物和陆生动 * 物,水生动物下面有大型水生动物和小型水生动物,陆生动物下面有食草 * 动物和食肉动物,这样的分类关系通过继承可以很容易的表现出来,但是 * 所有的枚举类都继承了Enum类,而Java又是单根继承体系,所以不能通过 * 继承来表示这种分类关系,要想使枚举类具有这样的分类关系,可以通过 * 接口来实现 */ public interface Animal{//动物 enum WaterAnimal implements Animal {//水生动物 BigWaterAnimal,//水生大型动物 SmallWaterAnimal;//水生小型动物 }; enum LandAnimal implements Animal{//陆生动物 Herbivores,//陆生食草动物 Carnivore;//陆生食肉动物 } } public class Test{ public static void main(){ Animal animal=null; //通过接口,就可以把两个枚举类归纳成一个类型了,本例中将水生动物和陆生动物都归纳为动物了 animal=WaterAnimal.BigWaterAnimal;//动物即可以指向水生大型动物对象 animel=LandAnimal.Carnivore;//动物还可以指向陆生食肉动物对象 } }
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
详细请查看:www.itheima.com