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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周素强 中级黑马   /  2012-5-6 00:24  /  2781 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看论坛有用到枚举的,没有看懂什么意思,基础视频我都看到IO了也没有怎么讲到枚举,只是之前视频里提了一下说是跟迭代器相似,但一直不明白到底是什么东东,是怎么运用的?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 加油 十期见

查看全部评分

6 个回复

倒序浏览
基础视频是不是还没到讲的时候呢?如果是那我就再等等向后接着慢慢看 慢慢学习,请给个提示,谢谢了。。。。。
回复 使用道具 举报
JDK5以后,enum被引入,本质上就是一个类,所以可以被继承,
枚举就是把集合里的对象元素 一个一个提取出来!
比如说 你买了一合巧克力 里面有草莓味的 有香草口味的 有苹果口味的 你想把他们拿出来 就必须用“手”一个一个把他们拿出来 并且一次只能取一个哦 这里的手就是枚举器 你取的动作就是枚举的过程
枚举的用法有很多,下面给你举几个常见用法:
用法一:常量
public enum Color {   
  RED, GREEN, BLANK, YELLOW   
}  
用法二:switch
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;   
        }   
    }   
}  
用法三:覆盖枚举的方法
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;   
    }   
}  
只知道这些了,如果视频中没有讲到,你可以再网上找找相关资料自己看看,应该很容易懂的。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 补充一个, 如果枚举只有一个成员时,就可.

查看全部评分

回复 使用道具 举报
DK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。
用法一:常量
在JDK1.5 之前,我们定义常量都是: publicstaticfianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
Java代码
1.public enum Color {   
2.  RED, GREEN, BLANK, YELLOW   
3.}  
public enum Color {
  RED, GREEN, BLANK, YELLOW
}
用法二:switch
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
Java代码
1.enum Signal {   
2.    GREEN, YELLOW, RED   
3.}   
4.public class TrafficLight {   
5.    Signal color = Signal.RED;   
6.    public void change() {   
7.        switch (color) {   
8.        case RED:   
9.            color = Signal.GREEN;   
10.            break;   
11.        case YELLOW:   
12.            color = Signal.RED;   
13.            break;   
14.        case GREEN:   
15.            color = Signal.YELLOW;   
16.            break;   
17.        }   
18.    }   
19.}  
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代码
1.public enum Color {   
2.    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);   
3.    // 成员变量   
4.    private String name;   
5.    private int index;   
6.    // 构造方法   
7.    private Color(String name, int index) {   
8.        this.name = name;   
9.        this.index = index;   
10.    }   
11.    // 普通方法   
12.    public static String getName(int index) {   
13.        for (Color c : Color.values()) {   
14.            if (c.getIndex() == index) {   
15.                return c.name;   
16.            }   
17.        }   
18.        return null;   
19.    }   
20.    // get set 方法   
21.    public String getName() {   
22.        return name;   
23.    }   
24.    public void setName(String name) {   
25.        this.name = name;   
26.    }   
27.    public int getIndex() {   
28.        return index;   
29.    }   
30.    public void setIndex(int index) {   
31.        this.index = index;   
32.    }   
33.}  
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代码
1.public enum Color {   
2.    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);   
3.    // 成员变量   
4.    private String name;   
5.    private int index;   
6.    // 构造方法   
7.    private Color(String name, int index) {   
8.        this.name = name;   
9.        this.index = index;   
10.    }   
11.    //覆盖方法   
12.    @Override  
13.    public String toString() {   
14.        return this.index+"_"+this.name;   
15.    }   
16.}  
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代码
1.public interface Behaviour {   
2.    void print();   
3.    String getInfo();   
4.}   
5.public enum Color implements Behaviour{   
6.    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);   
7.    // 成员变量   
8.    private String name;   
9.    private int index;   
10.    // 构造方法   
11.    private Color(String name, int index) {   
12.        this.name = name;   
13.        this.index = index;   
14.    }   
15.//接口方法   
16.    @Override  
17.    public String getInfo() {   
18.        return this.name;   
19.    }   
20.    //接口方法   
21.    @Override  
22.    public void print() {   
23.        System.out.println(this.index+":"+this.name);   
24.    }   
25.}  
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代码
1.public interface Food {   
2.    enum Coffee implements Food{   
3.        BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO   
4.    }   
5.    enum Dessert implements Food{   
6.        FRUIT, CAKE, GELATO   
7.    }   
8.}  
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则可以是任意类型。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
后期方老师的JavaWeb视频有讲枚举,张孝祥老师的高新技术视频也提到了枚举,交通灯那个项目就是用的枚举。先简单一说吧。
枚举的作用:一些程序在运行时,它需要的数据不能是任意的,而必须是一定范围的值,jdk1.5以前采用自定义类来解决,jdk1.5之后直接采用枚举解决。
enum关键字定义一个枚举。
一个枚举也可以有构造函数、字段、方法。
示例(交通灯只有三种颜色,为了防止别人乱实例对象,我们先定义这三种颜色的灯,让使用者去选):
(1)自定义类解决方法:
public class TrafficLamp {
        private TrafficLamp(){}
        public static final TrafficLamp red = new TrafficLamp();
        public static final TrafficLamp green = new TrafficLamp();
        public static final TrafficLamp yellow = new TrafficLamp();
}
(2)枚举
public enum TrafficLamp {
        red, green, yellow;
}
两种代码效果一样,可以看出枚举更简化
回复 使用道具 举报
同楼上,另外补充
枚举是1.5之后出现的通过楼上的举例可以看出主要作用是为了简化代码,在后面讲解到交通灯的时候你会了解到,
个人建议。
在第一次看视频的时候,耐心将视频全部看完有很多前面不懂的后面思路打开就自然而然了解了,待视频全部看完一遍以后了解到什么是重量级的知识的时候在深入研究
回复 使用道具 举报
1  枚举(Enum):我们所定义的每个枚举类型都继承自java.lang.Enum 类,枚举中的每个成员默认都是public static final的。
2  而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance)。换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举类型有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间就已经完全确定下来了。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

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