×

java 枚举 枚举类型

java 枚举(Java语言中的枚举类型如何使用)

admin admin 发表于2024-08-22 08:57:30 浏览6 评论0

抢沙发发表评论

大家好,如果您还对java 枚举不太了解,没有关系,今天就由本站为大家分享java 枚举的知识,包括Java语言中的枚举类型如何使用的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

Java语言中的枚举类型如何使用

    Java语言中的枚举类型的使用方法如下:

    用法一:常量;

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;        }        // 普通方法        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;        }    }

    用法四:覆盖枚举的方法;

public class Test {    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;        }    }    public static void main(String args) {        System.out.println(Color.RED.toString());    }}

    用法五:实现接口;

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);        }    }

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

public interface Food {    enum Coffee implements Food {      BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO   }  enum Dessert implements Food {      FRUIT, CAKE, GELATO  }}

    以上就是Java语言中枚举类型的基本使用方法。

java中的枚举到底有什么作用

枚举是一种规范它规范了参数的形式,这样就可以不用考虑类型的不匹配并且显式的替代了int型参数可能带来的模糊概念 枚举像一个类,又像一个数组。Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。 1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。 2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。 3.Enum默认实现了java.lang.Comparable接口。 4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”. 5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。 6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。 7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。 了解了这些基本特性,我们来看看如何使用它们。 1.遍历所有有枚举值. 知道了有values方法,我们可以轻车熟路地用ForEach循环来遍历了枚举值了。 for (Color c: Color.values()) System.out.println(“find value:” + c); 2.在enum中定义方法和变量,比如我们可以为Color增加一个方法随机返回一个颜色。 public enum Color { Red, Green, Blue; private static int number = Color.values().length ; public static Color getRandomColor(){ long random = System.currentTimeMillis() % number; switch ((int) random){ case 0: return Color.Red; case 1: return Color.Green; case 2: return Color.Blue; default : return Color.Red; } } } 可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。 3.覆载(Override)toString, valueOf方法 前面我们已经知道enum提供了toString,valueOf等方法,很多时候我们都需要覆载默认的toString方法,那么对于enum我们怎么做呢。其实这和覆载一个普通class的toString方法没有什么区别。 …. public String toString(){ switch (this){ case Red: return "Color.Red"; case Green: return "Color.Green"; case Blue: return "Color.Blue"; default: return "Unknow Color"; } } …. 这时我们可以看到,此时再用前面的遍历代码打印出来的是 Color.Red Color.Green Color.Blue 而不是 Red Green Blue. 可以看到toString确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法,以保持它们相互的一致性。 4.使用构造函数 虽然enum不可以有public的构造函数,但是我们还是可以定义private的构造函数,在enum内部使用。还是用Color这个例子。 public enum Color { Red("This is Red"), Green("This is Green"), Blue("This is Blue"); private String desc; Color(String desc){ this.desc = desc; } public String getDesc(){ return this.desc; } } 这里我们为每一个颜色提供了一个说明信息, 然后定义了一个构造函数接受这个说明信息。 要注意这里构造函数不能为public或者protected, 从而保证构造函数只能在内部使用,客户代码不能new一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。 5.实现特定的接口 我们已经知道enum可以定义变量和方法,它要实现一个接口也和普通class实现一个接口一样,这里就不作示例了。 6.定义枚举值自己的方法。 前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载 toString的例子可以被改写成这样。 public enum Color { Red { public String toString(){ return "Color.Red"; } }, Green { public String toString(){ return "Color.Green"; } }, Blue{ public String toString(){ return "Color.Blue"; } }; } 从逻辑上来说这样比原先提供一个“全局“的toString方法要清晰一些。 总的来说,enum作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂,个人觉得一般也不需要过多的使用enum的一些高级特性,否则就和简单易懂的初衷想违背了。

java中的枚举是什么意思

Java的Enumeration(枚举,注释②)便是具有这些限制的一个反复器的例子。除下面这些外,不可再用它做其他任何事情: (1) 用一个名为elements()的方法要求集合为我们提供一个Enumeration。我们首次调用它的nextElement()时,这个Enumeration会返回序列中的第一个元素。 (2) 用nextElement()获得下一个对象。 (3) 用hasMoreElements()检查序列中是否还有更多的对象。 ②:“反复器”这个词在C++和OOP的其他地方是经常出现的,所以很难确定为什么Java的开发者采用了这样一个奇怪的名字。Java 1.2的集合库修正了这个问题以及其他许多问题。

Java 枚举型为什么是静态的,以及是怎么实现的

是的,Java枚举型是静态常量,隐式地用static final修饰过。确切地说,Java枚举型是“静态常量”,这里面包含了两层意思:枚举型中的实例隐式地用static final修饰过。枚举型作为某个类中的成员字段也隐式地用static final修饰过。public class Traffic{ public enum Light{GREEN,YELLOW,RED}}还是你上面这个代码,反编译一下,你就能看到--编译器背着你偷偷做了哪些手脚:/* * Decompiled with CFR 0_118. */package com.ciaoshen.thinkinjava.chapter19;public class Traffic { public static final class Light extends Enum《Light》 { public static final /* enum */ Light GREEN = new Light(); public static final /* enum */ Light YELLOW = new Light(); public static final /* enum */ Light RED = new Light(); private static final /* synthetic */ Light $VALUES; public static Light values() { return (Light)$VALUES.clone(); } public static Light valueOf(String string) { return Enum.valueOf(Light.class, string); } private Light() { super(string, n); } static { $VALUES = new Light{GREEN, YELLOW, RED}; } }}首先,枚举型Light是个实实在在的类。继承自基类Enum《Light》。然后在你不知情的情况下,偷偷加了static final修饰词。然后三个枚举实例GREEN, YELLOW, RED也确确实实是Light的实例。然而前面也加上了static final。然后构造器也被偷偷地阉割成private。这种实例控制手段,是不是在单例器模式里也见过?所以枚举也是实现单例器的一种方法。然后编译器还偷偷合成了Light数组,一个values( )方法,一个valueOf( )方法。这个values( )在Enum的文档里都找不到。如果在Enum里定义一个相关方法,你还会看到一个匿名内部类:public enum Light{ GREEN{public void show(){System.out.println("Green");}}, YELLOW{public void show(){System.out.println("Yellow");}}, RED{public void show(){System.out.println("Red");}};}反编译的结果如下:/* * Decompiled with CFR 0_118. */package com.ciaoshen.thinkinjava.chapter18;import java.io.PrintStream;public class Lightextends Enum《Light》 { public static final /* enum */ Light GREEN = new Light("GREEN", 0){ public void show() { System.out.println("Green"); } }; public static final /* enum */ Light YELLOW = new Light("YELLOW", 1){ public void show() { System.out.println("Yellow"); } }; public static final /* enum */ Light RED = new Light("RED", 2){ public void show() { System.out.println("Red"); } }; private static final /* synthetic */ Light $VALUES; public static Light values() { return (Light)$VALUES.clone(); } public static Light valueOf(String string) { return Enum.valueOf(Light.class, string); } private Light() { super(string, n); } static { $VALUES = new Light{GREEN, YELLOW, RED}; }}总之,Java的Enum枚举型整个就是一个大大的“语法糖”。明明是一个完整的类,但只向用户暴露几个静态常量,隐藏掉大部分实现的细节。

java中枚举可以用中文吗

可以。在java的枚举中,写代码是可以用中文的,系统可以检测出来。Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念。

java枚举是什么意思举个最简单的例子

枚举是一种类型,用于定义变量,以限制变量的赋值 赋值时通过"枚举名.值"来取得相关枚举中的值public enum Season { winter, spring, summer, fall;}表示Season(季节)的值只能是枚举里面定义的 winter, spring, summer, fall(春夏秋冬);

JAVA中枚举是什么意思,怎么用

枚举就是把集合里的对象元素 一个一个提取出来!比如说 你买了一合巧克力 里面有草莓味的 有香草口味的 有苹果口味的 你想把他们拿出来 就必须用“手”一个一个把他们拿出来 并且一次只能取一个哦 这里的手就是枚举器 你取的动作就是枚举的过程具体的用法 这个我就不好说了 推荐 你看看JDK1.5的API和参考别人的范例看完了 基本可以理解 枚举几种选择(有迭代器和枚举器2种)和如何判断是否已经取完了对象元素 等等 我不是很喜欢讲语法 所以不好意思我就不给你丢代码了~

java怎么定义枚举

在Java中,枚举(enum)与类(class)、接口(interface)属于同一个级别。

使用枚举的Java程序:

public class Main {public static void main(String args) {Week w = Week.Monday;System.out.println(w);}}//定义枚举enum Week {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}

运行测试:

Monday

java中的枚举类型指的是什么啊

枚举你就把他看做一个在list这堆数据里面找出想要数据的一只手,通常枚举的实例都从list这个类里面来实例,其作用说白了就是用来循环这个list(通常的使用目的),list里面存放的是一个类。所以用枚举而不是用像数组一样的数字下标

OK,关于java 枚举和Java语言中的枚举类型如何使用的内容到此结束了,希望对大家有所帮助。