A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fenzheng 中级黑马   /  2014-4-30 10:33  /  1391 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

哪位亲能给我讲讲你们对枚举的理解??????我看过毕老师讲的,这几天又看了张孝祥老师的,我发现我越来越懵了,哪位过来人能从你们理解的角度,给我引导一下,  急求!!!万分感谢!!!!!

4 个回复

倒序浏览
在实际的生活和编程中,肯定存在这样一些‘数据集’,他们的值是固定的和有限的,例星期一到星期天,颜色,红绿灯等等,为了能更好的使用这些数据,使用枚举是一个非常好的办法。枚举本身是一个特殊的类,例如,为了表示交通灯,灯的种类是固定的,red,green,yellow。假设不用枚举而是用类来实现。
class Lamp
{
     public Lamp() {}
   
     public static Lamp RED = new Lamp();
     public static Lamp GREEN = new Lamp();
     public static Lamp YELLOW = new Lamp();
      
}

当然还可以在Lamp中定义一些方法,例如在函数中传入Lamp对象以获得每个灯的下一个灯的Lamp实例。
但是,如果用枚举就方便多了。
public enum Lamp
{
        RED,GREEN,YELLOW;
        public void Lamp(String lamp)

}
回复 使用道具 举报
不小心按错了。
public enum Lamp
{
         RED("GREEN"),GREEN("YELLOW"),YELLOW("RED");
         private String lamp;
         public void Lamp(String lamp)
        {
             this.lamp = lamp;
         }
}

可以用Lmap.valueOf("RED") 来获得Lamp中的RED实例,这就比用类来模拟实现枚举要简单得多!!
回复 使用道具 举报
枚举类型是JDK5.0的新特征。Sun引进了一个全新的关键字enum来定义一个枚举类。
枚举其实就是一种类型,跟int, char 这种差不多,就是定义变量时限制输入的,你只能够赋enum里面规定的值。
  1. public enum Color{
  2.         RED, BLACK, BLUE, YELLOW, GREEN;
  3. }
复制代码

enum是很像特殊的class,实际上enum声明定义的类型就是一个类。 而这些类都是类库中Enum类的子类(java.lang.Enum)。它们继承了这个Enum中的许多有用的方法。
1、Color枚举类就是class,而且是一个不可以被继承的final类。
      其枚举值(RED,BLUE.。.)都是Color类型实例化对象。
2、 构造器只能私有private,绝对不允许有public构造器。 这样可以保证外部代码无法新构造枚举类的实例。

回复 使用道具 举报
枚举就是将集合中的对象元素一个个提取出来。枚举有7中常见用法:     用法一:常量
  • 在JDK1.5 之前,我们定义常量都是: publicstaticfianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

    Java代码
    public enum Color {  
      RED, GREEN, BLANK, YELLOW  
    }   

    用法二:switch
    JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

    Java代码
    enum Signal {  
        GREEN, YELLOW, RED  
    }  
    public class TrafficLight {  
        Signal color = Signal.RED;  
        public void change() {  
            switch (color) {  
            case RED:  
                color = Signal.GREEN;  
                break;  
            case YELLOW:  
                color = Signal.RED;  
                break;  
            case GREEN:  
                color = Signal.YELLOW;  
                break;  
            }  
        }  
    }   

    用法三:向枚举中添加新方法
    如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

    Java代码
    public enum Color {  
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
        // 成员变量  
        private String name;  
        private int index;  
        // 构造方法  
        private Color(String name, int index) {  
            this.name = name;  
            this.index = index;  
        }  
        // 普通方法  
        public static String getName(int index) {  
            for (Color c : Color.values()) {  
                if (c.getIndex() == index) {  
                    return c.name;  
                }  
            }  
            return null;  
        }  
        // get set 方法  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public int getIndex() {  
            return index;  
        }  
        public void setIndex(int index) {  
            this.index = index;  
        }  
    }  

    用法四:覆盖枚举的方法
    下面给出一个toString()方法覆盖的例子。

    Java代码
    public enum Color {  
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
        // 成员变量  
        private String name;  
        private int index;  
        // 构造方法  
        private Color(String name, int index) {  
            this.name = name;  
            this.index = index;  
        }  
        //覆盖方法  
        @Override  
        public String toString() {  
            return this.index+"_"+this.name;  
        }  
    }  

    用法五:实现接口
    所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。

    Java代码
    public interface Behaviour {  
        void print();  
        String getInfo();  
    }  
    public enum Color implements Behaviour{  
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
        // 成员变量  
        private String name;  
        private int index;  
        // 构造方法  
        private Color(String name, int index) {  
            this.name = name;  
            this.index = index;  
        }  
    //接口方法  
        @Override  
        public String getInfo() {  
            return this.name;  
        }  
        //接口方法  
        @Override  
        public void print() {  
            System.out.println(this.index+":"+this.name);  
        }  
    }   

    用法六:使用接口组织枚举

    Java代码
    public interface Food {  
        enum Coffee implements Food{  
            BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO  
        }  
        enum Dessert implements Food{  
            FRUIT, CAKE, GELATO  
        }  
    }   
    用法七:关于枚举集合的使用
    java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档



              以上7中方法引自百度。
在我们现阶段主要掌握前5中方法就可以了。



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马