首先来看一下定义一个枚举
enum Animal{
dog,cat,pig;
}
枚举的关键字是 enum,就好比类的关键字 class
其实枚举也可以看做是class,只不过枚举不可以创建实例(枚举的构造器是私有的private),
只能在enum中定义好,直接去使用就ok了
比如上图代码中的
dog,cat,pig; 注意后面的分号不可以省略
这里就是枚举和类的不同之处了,要不然岂不是和class一样了,这样就将创建的实例限制在了枚举类中
而不是可以随心所欲的四处创建对象了
public void testAnimal(Animal animal){
}
这样这个方法的参数就限制了只能传Animal枚举类型了,这样看来枚举类又类似于接口了,只是实现类是在枚举内中
说到底枚举类的核心思想就是限制二字
我想大部分人最开始都是用的常量去表示
public static final String dog = "狗";
public static final String cat = "猫";
public static final String pig = "猪";
那么上面的方法参数就变成了String
public void testAnimal(String animal){}
这个参数可是没有限制内容的,我可以输入任何字符串, 猴子,蛇各种动物等等等等,如果我只想输入的是狗,猫,猪
那么用枚举是最直观的
而且前面说了枚举也是类,可以有类的任何属性
enum Animal{
dog("狗", 3),cat("猫", 2),pig("猪", 5);
private String name;//名字
private Integer age;//年龄
Animal(String name,Integer age){
this.name = name;
this.age = age;
}
//访问属性的方法
public String getName(){
return name;
}
public Integer getAge(){
return age;
}
}
public void testAnimal(Animal animal){
System.out.println(animal.getName() + animal.getAge());
}
public static void main(String[] args) {
EnumDemo enumDemo = new EnumDemo();
enumDemo.testAnimal(Animal.cat);
}
是不是觉得枚举比常量更直观,更好用有木有!!!
补充关键知识点
1.枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类。
2.枚举类的枚举值默认修饰符为public static final。
3.使用enum定义,非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。
4.枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远都不能产生实例。
5.JDK1.5增加枚举后对switch的扩展:switch的控制表达式可以是任何枚举类型。不仅如此,当
switch控制表达式使用枚举类型时,后面case表达式中的值直接使用枚举值的名字,无须添加枚举类作为限定。
6.并不是所有的枚举类都使用了final修饰!非抽象的枚举类才默认使用final修饰。对于一个抽象的枚举类而言,
只要它包含了抽象方法,它既是抽象枚举类,系统会默认使用abstract修饰,而不是final修饰。