北京行——java基础加强之枚举

枚举

Java的新特性的一步步更新其实就是把错误今早的发现,枚举也在一定的程度上起到了这个作用,是java越来越友好和方便

枚举的引入:

?------将已经知道的值在枚举重定义出来(坦克的方向、员工的角色、交通的指向),它的取值就是那几个值,但是在应用时候可以增加程序的可读性。用数字赋值的时候,比如用1来代表某一个值,但是如果赋错了值,但是符合定义类型,这就错误了。所以就引入了枚举。(我认为在这个地方也可以使用常量来代替)《疑问解决》这个地方在赋值的时候仍然出现了可以赋别的值得问题,用这个方法可以在一定程度上解决可读性的问题。String role = RoleUtil.Boss;<这个地方是可以赋别的值得>

主要解决的问题:1、可读性 2、非法数据

枚举就是简化了在JDK5.0时候的类的编写,也可以说是封装了,实例如下:

public class EnumTest {
    @Test
    public void test() {
        Role r1 = Role.Manger;
        Role r2 = Role.employee;
        // Role r3 = new Role();// 定义了私有的构造函数
        Role1 r4 = Role1.Manger;
    }
}

class Role {
    public static final Role Manger = new Role();// 这个这样写的目的是提高程序的可读性
    public static final Role work = new Role();
    public static final Role employee = new Role();

    private Role() {// 这样写的目的是为了防止数据非法
    };
}

enum Role1 {// 上边这个类是和枚举类是等价的,也就是被封装了底层的实现
    Manger, work, employee;
}

若枚举重只有一个元素,这就是典型的单例模式

单例模式

?为什么引入,等在请看随笔中

枚举练习:《星期 用中文返回 用两种方法》

    public void test2() {
        WeekDay fir = WeekDay.Mon;
        fir.show();// 这个地方是用到的方法的调用
        WeekDay tu = WeekDay.Tu;
        tu.show1();
    }
enum WeekDay {
    Mon {// 这个地方用到的是匿名内部类
        @Override
        public void show1() {
            System.out.println("Mon");
        }
    },
    Tu {
        @Override
        public void show1() {
            System.out.println("Tu");
        }
    },
    Wen {
        @Override
        public void show1() {
            System.out.println("Wen");
        }
    };
    public void show() {// 这是一种方法,是自己写一个方法,不过有点麻烦
        if (this.name().equals("Mon")) {// 这个地方省略了判断
            System.out.println("Mon");
        }
    }

    public abstract void show1();
}

以上的两种写法要掌握。但是为什么写是一个疑问?希望在后面会有所涉及

枚举API的应用

先上实例:

enum WeekDay {
    Mon {// 这个地方用到的是匿名内部类
        @Override
        public void show1() {
            System.out.println("Mon");
        }
    },
    Tu {
        @Override
        public void show1() {
            System.out.println("Tu");
        }
    },
    Wen {
        @Override
        public void show1() {
            System.out.println("Wen");
        }
    };
    public void show() {// 这是一种方法,是自己写一个方法,不过有点麻烦
        if (this.name().equals("Mon")) {// 这个地方省略了判断
            System.out.println("Mon");
        }
    }

    public abstract void show1();
}
public void test3() {// 这个地方时枚举API的使用有五个
        // 1、已知枚举对象,获得下标和名称
        WeekDay wen = WeekDay.Wen;
        System.out.println(wen.ordinal());
        System.out.println(wen.name());
        // 2、已知枚举下标,获取枚举对象和名称,获取实例有两种方法valueOf和values
        int index = 2;
        WeekDay wen1 = WeekDay.values()[index];
        System.out.println(wen1.name());// 这里用的还是相当不错的
        // 3、已知对象名称获取下标和实例,下面的很重要,要熟悉
        String name = "Wen";
        WeekDay wen2 = Enum.valueOf(WeekDay.class, name);
        WeekDay wen3 = WeekDay.valueOf(name);
        System.out.println(wen2 + "---");
        System.out.println(wen3 + "---");

    }

 

posted @ 2013-04-15 18:08  蓝冰悠见  阅读(132)  评论(0编辑  收藏  举报