×

枚举valueof 如何调用

枚举valueof(Java中如何调用枚举类中的数组)

admin admin 发表于2024-04-13 03:16:10 浏览25 评论0

抢沙发发表评论

其实枚举valueof的问题并不复杂,但是又很多的朋友都不太了解Java中如何调用枚举类中的数组,因此呢,今天小编就来为大家分享枚举valueof的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

Java中如何调用枚举类中的数组

values()是枚举定义的一个静态方法。示例代码:enum A{b,a;}static final class A extends Enum{public static A values(){A aa;int i;A aa1;System.arraycopy(aa = ENUM$VALUES, 0, aa1 = new A, 0, i);return aa1;}public static A valueOf(String s){return (A)Enum.valueOf(com/taobao/et/biz/Test$A, s);}public static final A b;public static final A a;private static final A ENUM$VALUES;static {b = new A("b", 0);a = new A("a", 1);ENUM$VALUES = (new A {b, a});}private A(String s, int i) {super(s, i);}}两个静态方法“隐藏”在所有枚举类型声明中。因为它们是枚举子类上的静态方法,而不是Enum本身的方法,所以它们在java.lang.Enum的javadoc中没有出现。第一个是values(),返回一个枚举类型所有可能值的数组。第二个是valueOf(String arg0),为提供的字符串返回一个枚举类型,该枚举类型必须精确地匹配源代码声明。

枚举是什么

问题一:枚举是什么意思? 枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的 *** 。举个例子,颜色也可以定义成枚举类型,它可以包含你定义的任何颜色,当需丁的时候,只需要通过枚举调用即可,另外比如说季节(春夏秋冬)、星期(星期一到星期日)等等这些具有共同投特征的数据都可以定义枚举。 问题二:枚举类型是什么意思 一般的定义方式如下: enum enum_type_name { ENUM_CONST_1, ENUM_CONST_2, ... ENUM_CONST_n } enum_variable_name; 注意:enum_type_name 是自定义的一种数据数据类型名,而enum_variable_name 为 enum_type_name类型的一个变量,也就是我们平时常说的枚举变量。实际上enum_type_name 类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即enum_type_name 类型 的变量enum_variable_name 只能取值为花括号内的任何一个值,如果赋给该类型变量的值 不在列表中,则会报错或者警告。ENUM_CONST_1、ENUM_CONST_2、...、 ENUM_CONST_n,这些成员都是常量,也就是我们平时所说的枚举常量(常量一般用大写)。 enum 变量类型还可以给其中的常量符号赋值,如果不赋值则会从被赋初值的那个常量开始 依次加1,如果都没有赋值,它们的值从0 开始依次递增1。 下面举个例子:如分别用一个常数表示不同颜 色 enum Color { GREEN = 1, RED, BLUE, GREEN_RED骸= 10, GREEN_BLUE }ColorVal; 其中各常量名代表的数值分别为: GREEN = 1 RED = 2 BLUE = 3 GREEN_RED = 10 GREEN_BLUE = 11 内容应该说的差不多了。 问题三:枚举是什么意思 “枚举窗口”、“枚举进程”之类的词中,枚举的意思就是遍历列举。这两个词也就是列举出所有的窗口场所有运行的进程的意思。作为一种数据结构,枚举用一组标识符来表示常数。 问题四:什么是枚举???? 枚举 1.枚举 (enumeration) 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称。枚举类型有名称、基础类型和一组字段。基础类型必须是一个内置的有符号(或无符号)整数类型(如 Byte、Int32 或 UInt64)。字段是静态文本字段,其中的每一个字段都表示常龚。所使用的语言给每个字段都分配一个基础类型的特定值。 2.枚举(enum) 枚举是一个被命名的整型常数的 *** , 枚举在日常生活中很常见。 例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, 就是一个枚举。 枚举的说明与结构和联合相似, 其形式为: enum 枚举名{ 标识符, 标识符, ... 标识符, } 枚举变量; 如果枚举没有初始化, 即省掉=整型常数时, 则从第一个标识符开始, 顺 次赋给标识符0, 1, 2, ...。但当枚举中的某个成员赋值后, 其后的成员按依次 加1的规则确定其值。 例如下列枚举说明后, x1, x2, x3, x4的值分别为0, 1, 2, 3。 enum string{x1, x2, x3, x4}x; 当定义改变成: enum string { x1, x2=0, x3=50, x4, }x; 则x1=0, x2=0, x3=50, x4=51 注意: 1. 枚举中每个成员(标识符)结束符是,, 不是;, 最后一个成员可省略 ,。 2. 初始化时可以赋负数, 以后的标识符仍依次加1。 3. 枚举变量只能取枚举说明结构中的某个标识符常量。 例如: enum string { x1=5, x2, x3, x4, }; enum strig x=x3; 此时, 枚举变量x实际上是7。 3.枚举(pascal) 随着计算机的不断普及,程序不仅只用于数值计算,还更广泛地用于处理非数值的数据。例如:性别、月份、星期几、颜色、单位名、学历、职业等,都不是数值数据。 在其它程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型。 问题五:java中枚举用来干什么的? 枚举是该类型的一个实例,相当于static final 类型的变量,可用于switch中, 枚举类:package .golden.test;public enum Operation { /**增*/ INSERT, /**删*/ DELETE, /**改*/ UPDATE, /**查*/ QUERY}测试类package .golden.test;public class TestEnum { public static void main(String args) { System.out.println(Operation.DELETE); System.out.println(Operation.valueOf(DELETE)); System.out.println(Operation.valueOf(DELETE)==Operation.DELETE); System.out.println(DELETE.equals(Operation.DELETE.toString())); switch (Operation.DELETE) { case INSERT: /**TODO*/break; case DELETE: /**TODO*/System.out.println(DELETE...);break; case UPDATE:/**TODO*/break; case QUERY: /**TODO*/break; default: break; } }} 问题六:枚举值是什么意思 一、类型定义   类型定义的语法格式:   type   =;   =;   ……   =;   二、枚举类型   通过预定义列出所有值的标识符来定义一个有序 *** ,这些值的次序和枚举类型说明中的标识符的次序是一致的。枚举类型的形式:(标识符1,……,标识符n)   例如: type daystype=(sunday,monday,tuesday,wednesday,thursday,friday,saturday)   枚举元素只能是标识符,而不能是数值常量或字符常量。例如以下的定义是错误的:   type daystype=(’sun’,’mon’,’tue’,’wed’,’thu’,’fri’,’sat’)   枚举元素是标识符,不要把作为枚举元素的标识符视作变量名,它不能被赋值。同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。例如以下的定义是错误的:   type daytype1=(monday,tuesday);   daytype2=(monday,wednesday);   可以将枚举类型的定义和变量的定义结合在一起。例如:var a:(monday,tuesday,sunday)   枚举类型属于顺序类型。根据定义类型时各枚举元素的排列顺序确定它们的序列,序列号从0开始   例如:已经定义daystype   ord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday   但是枚举类型中的第一个元素没有前趋,最后一个元素没有后继。Turbo Pascal不允许直接读写枚举值,所以枚举值的输出常用case语句间接的输出。枚举值的输入,则要一一判断读入字符是否是枚举类型的标识符。若是才能赋给枚举变量,否则就会出错。   例如:枚举值的输出   case day of   sunday:write(’sunday’);   monday:write(’monday’);   tuesday:write(’tuesday’);   wednesday:write(’wednesday’);   thursday:write(’thursday’);   friday:write(’friday’);   saturday:write(功saturday’);   end;   三、子界类型   子界类型是由整型、字符型、枚举型、布尔型的两个常量指定该类型的值域区间。子界类型的形式:   常量..常量 两个常量必须是同一种顺序类型。例如:a..b,要求a》 问题七:枚举是什么意思 一个一个数 问题八:c语言中的枚举型什么意思 如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。声明枚举类型用enum开头。 例如 enum weekday{sun,mon,tue,wed,thu,fri,sat}; 上面声明了一个枚举类型weekday,花括号中sun,mon,…,sat等称为枚举元素或枚举常量。 表示这个类型的变量的值只能是以上7个值之一。它们是用户自己定义的标识符。 问题九:到底什么叫做“枚举数” 枚举是一个被命名的整型常数的 *** , 枚举在日常生活中很常见。 例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,   SATURDAY, 就是一个枚举。 枚举的说明与结构和联合相似, 其形式为: enum 枚举名 { 标识符, 标识符, ... 标识符 } 枚举变量; 如果枚举没有初始化, 即省掉=整型常数时, 则从第一个标识符开始, 顺次赋给标识符0, 1, 2, ...。但当枚举中的某个成员赋值后, 其后的成员按依次加1的规则确定其值。 如定义: public enum DayOfWeek { Monday = 1, …… Sunday = 7 }

java枚举类型

java 枚举类型enum 的使用最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum 定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义。既然不明白就抽时间研究下吧。Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。要了解枚举类型,建议大家先打开jdk 中的Enum类简单读一下,这个类里面定义了很多protected 方法,比如构造函数,如果要使用这些方法我们可以把枚举类型定义到当前类中。每个枚举类型,都有自己的名字和顺序,当我们输出一个枚举类型的时候,会输入枚举类型的name ,具体可以参考下面的例子。一、 通常定义常量方法我们通常利用public final static 方法定义的代码如下,分别用1 表示红灯,3 表示绿灯,2 表示黄灯。package com.csdn.myEnum;public class Light { /* 红灯 */ public final static int RED =1; /* 绿灯 */ public final static int GREEN =3; /* 黄灯 */ public final static int YELLOW =2;}二、 枚举类型定义常量方法枚举类型的简单定义方法如下,我们似乎没办法定义每个枚举类型的值。比如我们定义红灯、绿灯和黄灯的代码可能如下:public enum Light { RED , GREEN , YELLOW ;}我们只能够表示出红灯、绿灯和黄灯,但是具体的值我们没办法表示出来。别急,既然枚举类型提供了构造函数,我们可以通过构造函数和覆写toString方法来实现。首先给Light 枚举类型增加构造方法,然后每个枚举类型的值通过构造函数传入对应的参数,同时覆写toString 方法,在该方法中返回从构造函数中传入的参数,改造后的代码如下:public enum Light { // 利用构造函数传参 RED (1), GREEN (3), YELLOW (2); // 定义私有变量 private int nCode ; // 构造函数,枚举类型只能为私有 private Light( int _nCode) { this . nCode = _nCode; } @Override public String toString() { return String.valueOf ( this . nCode ); } }三、 完整示例代码枚举类型的完整演示代码如下:package com.csdn.myEnum; import java.util.EnumMap;import java.util.EnumSet; public class LightTest { // 1. 定义枚举类型 public enum Light { // 利用构造函数传参 RED (1), GREEN (3), YELLOW (2); // 定义私有变量 private int nCode ; // 构造函数,枚举类型只能为私有 private Light( int _nCode) { this . nCode = _nCode; } @Override public String toString() { return String.valueOf ( this . nCode ); } } /** * @param args */ public static void main(String args ) { // 1. 遍历枚举类型 System. out .println( " 演示枚举类型的遍历 ......" ); testTraversalEnum (); // 2. 演示 EnumMap 对象的使用 System. out .println( " 演示 EnmuMap 对象的使用和遍历 ....." ); testEnumMap (); // 3. 演示 EnmuSet 的使用 System. out .println( " 演示 EnmuSet 对象的使用和遍历 ....." ); testEnumSet (); } /** * 演示枚举类型的遍历 */ private static void testTraversalEnum() { Light allLight = Light.values (); for (Light aLight : allLight) { System. out .println( " 当前灯 name : " + aLight.name()); System. out .println( " 当前灯 ordinal : " + aLight.ordinal()); System. out .println( " 当前灯: " + aLight); } } /** * 演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不过 key 要是枚举类型 */ private static void testEnumMap() { // 1. 演示定义 EnumMap 对象, EnumMap 对象的构造函数需要参数传入 , 默认是key 的类的类型 EnumMap《Light, String》 currEnumMap = new EnumMap《Light, String》( Light. class ); currEnumMap.put(Light. RED , " 红灯 " ); currEnumMap.put(Light. GREEN , " 绿灯 " ); currEnumMap.put(Light. YELLOW , " 黄灯 " ); // 2. 遍历对象 for (Light aLight : Light.values ()) { System. out .println( "" ); } } /** * 演示 EnumSet 如何使用, EnumSet 是一个抽象类,获取一个类型的枚举类型内容《BR/》 * 可以使用 allOf 方法 */ private static void testEnumSet() { EnumSet《Light》 currEnumSet = EnumSet.allOf (Light. class ); for (Light aLightSetElement : currEnumSet) { System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement); } }}执行结果如下:演示枚举类型的遍历 ......当前灯 name : RED当前灯 ordinal : 0当前灯: 1当前灯 name : GREEN当前灯 ordinal : 1当前灯: 3当前灯 name : YELLOW当前灯 ordinal : 2当前灯: 2演示 EnmuMap 对象的使用和遍历 .....演示 EnmuSet 对象的使用和遍历 .....当前 EnumSet 中数据为: 1当前 EnumSet 中数据为: 3当前 EnumSet 中数据为: 2 四、 通常定义常量方法和枚举定义常量方法区别以下内容可能有些无聊,但绝对值得一窥1. 代码:public class State {public static final int ON = 1;public static final Int OFF= 0;} 有什么不好了,大家都这样用了很长时间了,没什么问题啊。首先,它不是类型安全的。你必须确保是int其次,你还要确保它的范围是0 和1最后,很多时候你打印出来的时候,你只看到 1 和0 , 但其没有看到代码的人并不知道你的企图,抛弃你所有旧的public static final 常量2. 可以创建一个enum 类,把它看做一个普通的类。除了它不能继承其他类了。(java 是单继承,它已经继承了Enum),可以添加其他方法,覆盖它本身的方法3. switch() 参数可以使用enum 了4. values() 方法是编译器插入到enum 定义中的static 方法,所以,当你将enum 实例向上转型为父类Enum 是,values() 就不可访问了。解决办法:在Class中有一个getEnumConstants() 方法,所以即便Enum 接口中没有values() 方法,我们仍然可以通过Class 对象取得所有的enum 实例5. 无法从enum 继承子类,如果需要扩展enum 中的元素,在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组。达到将枚举元素进行分组。6. 使用EnumSet 代替标志。enum 要求其成员都是唯一的,但是enum 中不能删除添加元素。7. EnumMap 的key 是enum ,value 是任何其他Object 对象。8. enum 允许程序员为eunm 实例编写方法。所以可以为每个enum 实例赋予各自不同的行为。9. 使用enum 的职责链(Chain of Responsibility) . 这个关系到设计模式的职责链模式。以多种不同的方法来解决一个问题。然后将他们链接在一起。当一个请求到来时,遍历这个链,直到链中的某个解决方案能够处理该请求。10. 使用enum 的状态机11. 使用enum 多路分发

枚举属于线程安全吗

枚举类型为什么是线程安全的?我们定义的一个枚举,在第一次被真正用到的时候,会被虚拟机加载并初始化,而这个初始化过程是线程安全的。而我们知道,解决单例的并发问题,主要解决的就是初始化过程中的线程安全问题。所以,由于枚举的以上特性,枚举实现的单例是天生线程安全的。为什么反序列化枚举类型也不会创建新的实例?枚举类型在序列化的时候Java仅仅是将枚举对象的name属性输出到结果中,反序列化的时候则是通过java.lang.Enum的valueOf方法来根据名字查找枚举对象。同时,编译器是不允许任何对这种序列化机制的定制的,因此禁用了writeObject、readObject、readObjectNoData、writeReplace和readResolve等方法。普通的Java类的反序列化过程中,会通过反射调用类的默认构造函数来初始化对象。所以,即使单例中构造函数是私有的,也会被反射给破坏掉。由于反序列化后的对象是重新new出来的,所以这就破坏了单例。(使用双重校验锁实现的单例其实是存在一定问题的,就是这种单例有可能被序列化锁破坏)普通类的反序列化是通过反射实现的,枚举类的反序列化不是通过反射实现的。所以,枚举类也就不会发生由于反序列化导致的单例破坏问题。【源码基于jdk1.8】喜欢的话可以关注一下哦

JDK 1.5新特性---枚举类型

Enum的最简单形式,即类似于:public enum Color {Red,Green,Blue;}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;/**定义一个变量表示枚举值的数目。*(我有点奇怪为什么sun没有给enum直接提供一个size方法).*/private static int number = Color.values().length ;/*** 随机返回一个枚举值@return a random enum value.*/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.RedColor.GreenColor.Blue而不是RedGreenBlue.可以看到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作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂。

service内定义枚举其他service怎么调用

service内定义枚举其他service怎么调用可以通过在其他service中实例化该枚举,然后调用相应的枚举方法。代码如下:```java// 在其他service中实例化该枚举 MyEnum myEnum = MyEnum.valueOf("VALUE1"); //根据字符串来得到对应的值 // 调用相应的枚举方法 myEnum.getValue(); //获取对应值 myEnum.getDescription(); //获取对应文本信息 ```

采用枚举类型方式,根据输入结果,计算三角形、正方形、圆形面积

首先需要定义一个枚举类型,列出所有可能的图形类型,例如:enum ShapeType { Triangle, Square, Circle};接下纳返来,需要定义一个结构体,用于表示各种类型的图形,并包含计算面积的函数。可以使用结构体内部的 switch 结构,来根据不同的图形类型进行面积计算。例如:struct Shape { ShapeType type; double a, b, c, r; double area() const { switch (type) { case Triangle: double s = (a + b + c) / 2.0; return sqrt(s*(s-a)*(s-b)*(s-c)); case Square: return a*a; case Circle: return 3.14159 * r * r; } }};在这里,a、b、c和樱正r分别表示三角形、正方形和圆形的特定参数,例如三角形的三边长、正方形的边长和圆形的半径。使用结构体的 area() 函数,可以在程序中轻松计算不同形状的图形面积。最后,需要读取用户输入,判断输入的参数,然后使用特定的值来创建各种不同类型的图形,然后调用其面积计算函数,即可得到各种类型洞颂饥的图形的面积。

枚举中的compareTo方法

package All.D13.Enum_; public enum Constants { Constants_A, Constants_B, Constants_C,Constants_D,Constants_E, } package All.D13.Enum_; import java.util.concurrent.Callable; public class Demon02 { public static void main(String args) { Constants tmp= Constants.valueOf("Constants_B"); Constants c=Constants.values(); } Constants_B在Constants_A的后1个位置 Constants_B与Constants_B是同一个值 Constants_B在Constants_C的前1个位置 Constants_B在Constants_D的前2个位置 Constants_B在Constants_E的前3个位置 该方法主要用于比较两个枚举类型对象定义时候的顺序! 如果是大于0,则说明该值在之后,如果等于0,说明两个值是相同的,如果小于零,则说明该值在之前

关于本次枚举valueof和Java中如何调用枚举类中的数组的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。