黑马程序员技术交流社区

标题: 关于枚举... [打印本页]

作者: 朴日男    时间: 2014-10-17 12:12
标题: 关于枚举...
枚举到底是什么东西? 视频全看了一遍 , 只在 集合框架  Vector 的时候就提了一下 也没细说 -0 - ,  序列流
SequenceInputStream 的时候Vector 又出现了 ,枚举又出现了,  就不淡定了...特此一问...求提供 枚举的有关信息, 概念, 基础, 高级应用, 都行,  有总结就更好 -0 - , 跪谢~~~
作者: 面具猴    时间: 2014-10-17 12:22
张老师的高新技术里有枚举的详细信息,
包括枚举的应用思想,实现原理,各种深度的使用方法。
其实枚举也是一个类,只不过它不允许被外部创建对象,
枚举的元素其实就是枚举内部创建的静态对象。
为的就是只能通过枚举类使用固定的枚举对象。。。

作者: ζ_____________    时间: 2014-10-17 14:25
据说是1.5的新特性.  张老师的高薪技术的第一个涉及到的知识点, 大白话说, 枚举类中列举的那些元素(对象),就是你自定义的范围.
作者: 朴日男    时间: 2014-10-17 14:42
-0 - 高薪技术视频没了,  放了个反射.
作者: wf111sxwf    时间: 2014-10-20 20:42
枚举貌似jdk1.0就有了吧
作者: 齐宁宁    时间: 2014-10-20 20:53
枚举继承了java.lang.Enum类,关于枚举类的几点说明
     1. 所有方法都必须在元素列表下面
     2. 构造方法必须私有
     3. 枚举只有一个成员时,就可以作为一种单例的实现方式。(这一点我也不理解)
作者: 微微微笑    时间: 2014-10-20 22:28
首先说一说它存在的作用:
一些程序在运行时,它需要的数据不能是任意的,必须是一定范围内的值。这时使用enum可以简化代码。
例:假设一个类要求固定值为A,B,C,D,E
没有枚举之前的写法:
Class Grade{
        private Crade(){}
        public static final Grade A=new Grade();
        public static final Grade B=new Grade();
        public static final Grade C=new Grade();
        public static final Grade D=new Grade();
        public static final Grade E=new Grade();
    }

枚举类的写法
enum Grade{
//由此可以看出,枚举类中每一个枚举值代表一个实例对象。
A,B,C,D,E;
}

enum关键字用于定义一个枚举类,枚举类只是一中特殊形式的java类,所以它也可以有构造函数,字段,方法。但枚举的构造方法一定是私有的(枚举的存在是要求数据不能是任意的,所以不能让外部程序new对象)
例1:
public class Demo1 {

    public static void main(String[] args) {
        System.out.println(Grade.A.getValue());

    }
//class A 100-90 B 89-80 C 79-70 D 69-60 E 59-0
    enum Grade{
        //相当于  public static final Grade A=new Grade("100-90");
        A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");
        //封装每个对象对应的分数
        private String value;
        //构造函数必须私有
        private Grade(String value){
            this.value=value;
        }
        public String getValue(){
            return value;
        }
    }
}
例二:定义方法,让每个枚举值有自己对应的优,良。。。
enum Grade{
    A{
        public String localValue() {
            return "优";
        }
    },
    B({
        public String localValue(){
            return "良";
        }
    },C{
        public String localValue(){
            return "一般";
        }
    }
    ,D{
        public String localValue(){
            return "差";
        }
    }
    ,E{
        public String localValue(){
            return "不及格";
        }
    };
    public abstract String localValue();
      
}
public class Demo2 {
    public static void main(String[] args) {
        System.out.println(Grade.A.localValue());
    }

}
swith语句,它除了可以接受int,byte,char,short以外,还可以接受一个枚举类型
例:
public class Demo3 {

    public static void main(String[] args) {
        String str="A";
        Grade g=Grade.valueOf(str);
        switch(g){
        case A:{
            System.out.println("优");
            break;
        }
        case B:{
            System.out.println("良");
            break;
        }
        case C:{
            System.out.println("一般");
            break;
        }
        case D:{
            System.out.println("及格");
            break;
        }
        case E:{
            System.out.println("差");
            break;
        }
      
        }

    }

}
enum Grade{
    A,B,C,D,E;
}
若枚举类只有一个枚举值,则可以当作单例设计模式使用
enum Grade{
A;
}
单例饿汉式
class Grade
    private Grade(){}
    static Grade g=new Grade();
    public static Grade getInstance(){
        return g;
    }
}
枚举类一样可以实现接口继承类
ava.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。详见文档。
作者: 郑飞    时间: 2014-10-21 20:02
前面也就Vector迭代中用用 想学就看高新 有专门章节 很详细的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2