全面掌握java枚举类型

合集下载

java枚举类型enum用法 switch-概述说明以及解释

java枚举类型enum用法 switch-概述说明以及解释

java枚举类型enum用法switch-概述说明以及解释1.引言1.1 概述在计算机编程中,枚举类型(enum)是一种特殊的数据类型,用于表示一组具名的常量。

与普通的变量不同,枚举类型的取值是有限且固定的,它将一系列具有相似属性或关联关系的常量进行分组,方便在程序中进行使用和管理。

在Java编程语言中,枚举类型是一种独立的类,它可以包含多个枚举常量,并且允许定义属性和方法。

枚举类型的定义方式简单明了,可以帮助程序员更好地组织和管理常量。

本文将重点介绍Java中枚举类型enum的用法,并阐述枚举类型在switch语句中的应用。

首先,我们将讨论枚举类型的定义和声明,包括如何创建枚举类型以及如何给枚举常量赋值。

接着,我们将探讨枚举类型的属性和方法,包括如何为枚举常量定义属性和方法,以及如何在程序中使用它们。

最后,我们将重点关注枚举类型在switch语句中的应用,介绍如何使用switch语句处理枚举类型的不同取值。

通过本文的学习,读者将能够更好地掌握枚举类型enum的用法,进一步提升自己的编程能力。

接下来,我们将详细介绍枚举类型的定义和声明。

1.2 文章结构本文将按照以下结构来探讨Java枚举类型(enum)以及其在switch 语句中的应用。

1. 引言1.1 概述在引言部分,我们将简要介绍Java枚举类型(enum)的基本概念和作用,以及本文的目的和重要性。

1.2 文章结构(当前部分)在文章结构部分,我们将详细介绍本文的整体结构,让读者对接下来的内容有一个清晰的认知。

1.3 目的在目的部分,我们将阐述本文的目标是为读者提供全面了解Java 枚举类型(enum)及其在switch语句中应用的知识,以帮助读者在实际开发中更好地运用这些概念。

2. 正文在这一节中,我们将介绍如何定义和声明枚举类型,以及枚举类型的特点和用法。

2.2 枚举类型的属性和方法这一节将介绍枚举类型可以拥有属性和方法,以及如何使用这些属性和方法来对枚举类型进行操作和使用。

详细介绍java中的枚举类型

详细介绍java中的枚举类型

详细介绍java中的枚举类型枚举其实就是一种类型,跟int, char 这种差不多,就是定义变量时限制输入的,你只能够赋enum 里面规定的值。

枚举类型是JDK5.0的新特征。

Sun引进了一个全新的关键字enum来定义一个枚举类。

下面就是一个典型枚举类型的定义:Java代码:public enum Color{RED,BLUE,BLACK,YELLOW,GREEN}显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类。

而这些类都是类库中Enum 类的子类(ng.Enum)。

它们继承了这个Enum中的许多有用的方法。

我们对代码编译之后发现,编译器将enum类型单独编译成了一个字节码文件:Color.class。

Color字节码代码final enum hr.test.Color {// 所有的枚举值都是类静态常量public static final enum hr.test.Color RED;public static final enum hr.test.Color BLUE;public static final enum hr.test.Color BLACK;public static final enum hr.test.Color YELLOW;public static final enum hr.test.Color GREEN;private static final synthetic hr.test.Color[] ENUM$VALUES;// 初始化过程,对枚举类的所有枚举值对象进行第一次初始化static {0new hr.test.Color [1]3 dup4 ldc [16]//把枚举值字符串“RED”压入操作数栈6 iconst_0 // 把整型值0压入操作数栈7 invokespecial hr.test.Color(ng.String,int)[17]//调用Color类的私有构造器创建Color对象RED10 putstatic hr.test.Color.RED : hr.test.Color [21]//将枚举对象赋给Color的静态常量RED。

Java枚举(enum)详解

Java枚举(enum)详解

Java枚举(enum)详解Java 枚举知识点概念enum的全称为 enumeration,是 JDK 1.5 中引⼊的新特性。

在Java中,被enum关键字修饰的类型就是枚举类型。

形式如下:enum Color { RED, GREEN, BLUE }如果枚举不添加任何⽅法,枚举值默认为从0开始的有序数值。

以 Color 枚举类型举例,它的枚举常量依次为RED:0,GREEN:1,BLUE:2。

枚举的好处:可以将常量组织起来,统⼀进⾏管理。

枚举的典型应⽤场景:错误码、状态机等。

枚举类型的本质尽管enum看起来像是⼀种新的数据类型,事实上,enum是⼀种受限制的类,并且具有⾃⼰的⽅法。

创建enum时,编译器会为你⽣成⼀个相关的类,这个类继承⾃ng.Enum。

ng.Enum类声明public abstract class Enum<E extends Enum<E>>implements Comparable<E>, Serializable { ... }枚举的⽅法在enum中,提供了⼀些基本⽅法:values():返回 enum 实例的数组,⽽且该数组中的元素严格保持在 enum 中声明时的顺序。

name():返回实例名。

ordinal():返回实例声明时的次序,从0开始。

getDeclaringClass():返回实例所属的 enum 类型。

equals():判断是否为同⼀个对象。

可以使⽤==来⽐较enum实例。

此外,ng.Enum实现了Comparable和Serializable接⼝,所以也提供compareTo()⽅法。

例:展⽰enum的基本⽅法public class EnumMethodDemo {enum Color {RED, GREEN, BLUE;}enum Size {BIG, MIDDLE, SMALL;}public static void main(String args[]) {System.out.println("=========== Print all Color ===========");for (Color c : Color.values()) {System.out.println(c + " ordinal: " + c.ordinal());}System.out.println("=========== Print all Size ===========");for (Size s : Size.values()) {System.out.println(s + " ordinal: " + s.ordinal());}Color green = Color.GREEN;System.out.println(<span class="hljs-string">"green name(): "</span> + ());System.out.println(<span class="hljs-string">"green getDeclaringClass(): "</span> + green.getDeclaringClass());System.out.println(<span class="hljs-string">"green hashCode(): "</span> + green.hashCode());System.out.println(<span class="hljs-string">"green compareTo Color.GREEN: "</span> + pareTo(Color.GREEN));System.out.println(<span class="hljs-string">"green equals Color.GREEN: "</span> + green.equals(Color.GREEN));System.out.println(<span class="hljs-string">"green equals Size.MIDDLE: "</span> + green.equals(Size.MIDDLE));System.out.println(<span class="hljs-string">"green equals 1: "</span> + green.equals(<span class="hljs-number">1</span>));System.out.format(<span class="hljs-string">"green == Color.BLUE: %b\n"</span>, green == Color.BLUE);}输出=========== Print all Color ===========RED ordinal: 0GREEN ordinal: 1BLUE ordinal: 2=========== Print all Size ===========BIG ordinal: 0MIDDLE ordinal: 1SMALL ordinal: 2green name(): GREENgreen getDeclaringClass(): class org.zp.javase.enumeration.EnumDemo$Colorgreen hashCode(): 460141958green compareTo Color.GREEN: 0green equals Color.GREEN: truegreen equals Size.MIDDLE: falsegreen equals 1: falsegreen == Color.BLUE: false枚举的特性枚举的特性,归结起来就是⼀句话:除了不能继承,基本上可以将enum看做⼀个常规的类。

java,enum(枚举)使用详解+,总结 enum枚举java

java,enum(枚举)使用详解+,总结 enum枚举java

java,enum(枚举)使用详解+,总结 enum枚举javaenum的全称为enumeration,是jdk1.5中引入的新特性,存放在ng包中。

下面是我在使用enum过程中的一些经验和总结。

完整的接口定义常量语法(定义)建立枚举类型必须采用enum关键字,暗含了所建立的类型都就是ng.enum类的子类(ng.enum就是一个抽象类)。

枚举类型合乎通用型模式classenum这段代码实际上调用了7次enum(stringname,intordinal):结点、switch等常用操作方式对enum进行遍历和switch的操作示例代码:输入结果:enum对象的常用方法介绍intcompareto(eo)比较此枚举与指定对象的顺序。

classgetdeclaringclass()返回与此枚举常量的枚举类型相对应的class对象。

stringname()返回此枚举常量的名称,在其枚举声明中对其进行声明。

intordinal()返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

stringtostring()返回枚举常量的名称,它包含在声明中。

static输出结果:给enum自定义属性和方法给enum对象加一下value的属性和getvalue()的方法:输入结果:enumset,enummap的应用原理分析enum的语法结构尽管和class的语法不一样,但是经过编译器编译之后产生的是一个class文件。

该class文件经过反编译可以看到实际上是生成了一个类,该类继承了ng.enum。

enumtest经过反编译(javapcohmw.test.enumtest命令)之后得到的内容如下:所以,实际上enum就是一个class,只不过java编译器帮忙我们搞了语法的解析和编程而已。

总结可以把enum看作就是一个普通的class,它们都可以定义一些属性和方法,不同之处就是:enum无法采用extends关键字承继其他类,因为enum已经承继了ng.enum (java就是单一承继)。

全面掌握java枚举类型(enum_type)

全面掌握java枚举类型(enum_type)

全面掌握java枚举类型(enum type)1背景在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。

之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表示夏天,3表示秋天,4表示冬天。

public class Season {public static final int SPRING = 1;public static final int SUMMER = 2;public static final int AUTUMN = 3;public static final int WINTER = 4;}这种方法称作int枚举模式。

可这种模式有什么问题呢,我们都用了那么久了,应该没问题的。

通常我们写出来的代码都会考虑它的安全性、易用性和可读性。

首先我们来考虑一下它的类型安全性。

当然这种模式不是类型安全的。

比如说我们设计一个函数,要求传入春夏秋冬的某个值。

但是使用int类型,我们无法保证传入的值为合法。

代码如下所示:private String getChineseSeason(int season){StringBuffer result = new StringBuffer();switch(season){case Season.SPRING :result.append("春天");break;case Season.SUMMER :result.append("夏天");break;case Season.AUTUMN :result.append("秋天");break;case Season.WINTER :result.append("冬天");break;default :result.append("地球没有的季节");break;}return result.toString();}public void doSomething(){System.out.println(this.getChineseSeason(Season.SPR ING));//这是正常的场景System.out.println(this.getChineseSeason(5));//这个却是不正常的场景,这就导致了类型不安全问题}程序getChineseSeason(Season.SPRING)是我们预期的使用方法。

java基础篇---枚举详解

java基础篇---枚举详解

java基础篇---枚举详解在JDK1.5之前,JAVA可以有两种⽅式定义新类型:类和接⼝,对于⼤部分⾯向对象编程,有这两种似乎就⾜够了,但是在⼀些特殊情况就不合适。

例如:想要定义⼀个Color类,它只能有Red,Green,Blue三种,其他值则是错误,在JDK1.5之后便引⼊枚举类型。

枚举其实就是⼀种类型,跟int, char 这种差不多,就是定义变量时限制输⼊的,你只能够赋enum⾥⾯规定的值。

public enum Color{RED,GREEN,BLUE ; // 定义三个枚举的类型};枚举中有三个取值,以后再取的时候,只能从这三个内容取public class GetEnumContent{public static void main(String args[]){Color c = Color.BLUE ; // 取出蓝⾊System.out.println(c) ;}};可以直接使⽤在Switch语句上public class SwitchPrintEnum{public static void main(String args[]){for(Color c:Color.values()){ // 输出枚举中的全部内容print(c) ;}}public static void print(Color color){switch(color){case RED:{System.out.println("红颜⾊") ;break ;}case GREEN:{System.out.println("绿颜⾊") ;break ;}case BLUE:{System.out.println("蓝颜⾊") ;break ;}default:{System.out.println("未知颜⾊") ;break ;}}}};使⽤enum关键字可以定义⼀个枚举,也可以定义⼀个Eunm类枚举类的操作⽅法:在枚举已经实现Comparable接⼝,所以在枚举中的内容可以排序。

Java枚举类

Java枚举类

Java枚举类Java 枚举类枚举是⼀个被命名的整型常数的集合,⽤于声明⼀组带标识符的常数。

枚举在⽈常⽣活中很常见,例如⼀个⼈的性别只能是“男”或者“⼥”,⼀周的星期只能是 7 天中的⼀个等。

类似这种当⼀个变量有⼏种固定可能的取值时,就可以将它定义为枚举类型。

在 JDK 1.5 之前没有枚举类型,那时候⼀般⽤接⼝常量来替代。

⽽使⽤ Java 枚举类型 enum 可以更贴近地表⽰这种常量。

声明枚举声明枚举时必须使⽤ enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。

枚举声明的语法如下:enum-modifiers enum enumname:enum-base {enum-body,}其中,enum-modifiers 表⽰枚举的修饰符主要包括 public、private 和 internal;enumname 表⽰声明的枚举名称;enum-base 表⽰基础类型;enum-body 表⽰枚举的成员,它是枚举类型的命名常数。

任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使⽤逗号分隔。

提⽰:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。

例 1下⾯代码定义了⼀个表⽰性别的枚举类型 SexEnum 和⼀个表⽰颜⾊的枚举类型 Color。

public enum SexEnum {male,female;}public enum Color {RED,BLUE,GREEN,BLACK;}之后便可以通过枚举类型名直接引⽤常量,如 SexEnum.male、Color.RED。

使⽤枚举还可以使 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;}}}枚举类Java 中的每⼀个枚举都继承⾃ ng.Enum 类。

JAVA之enum类详解

JAVA之enum类详解

JAVA之enum类详解⽬录⼀、简介1、枚举类代表⼀组常量;2、枚举常量隐性声明为final static类型;3、每⼀个枚举常量代表了⼀个枚举类的对象;4、枚举类隐性实现了parable接⼝和java.io.Serializable接⼝5、枚举类可以包涵多个构造函数⼆、默认枚举类枚举类⾸先定义常量,其次才是属性、构造函数和⽅法。

(注:常量名要⼤写)//创建默认枚举类public enum DefaultEnum {DEMOENUM1, DEMOENUM2, DEMOENUM3;}//访问枚举对象public class client {public static void main(String[] args) {DefaultEnum demoEnum = DefaultEnum.DEMOENUM1;System.out.println(demoEnum);//输出:DEMOENUM1}}三、多值枚举对象枚举对象可以包涵⼀个或多个值,值的类型可以任意基本类型。

枚举对象的值在枚举类中定义后可定义setter⽅法修改,但是如⾮必要不要这么做,因为这会违背枚举对象常量的本质。

//创建枚举类public enum MutiValueEnum {DEMOENUM1(1, "hello"),DEMOENUM2(2, "enum");//枚举对象的变量private int id;private String value;//重写枚举类的默认构造器MutiValueEnum(int id, String value) {this.id = id;this.value = value;}//获得id属性的值public int getId() { return this.id; }//获得value属性的值public String getValue() { return this.value; }}//访问枚举对象public class client {public static void main(String[] args) {MutiValueEnum mutiValueEnum = MutiValueEnum.DEMOENUM1;System.out.println(mutiValueEnum);//输出:DEMOENUM1System.out.println(mutiValueEnum.getId());//输出:1System.out.println(mutiValueEnum.getValue());//输出:hello}}四、属性和⽅法枚举类⾥的属性和⽅法是属于枚举常量的,所以枚举常量可以调⽤这些⽅法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

枚举类型是JDK5.0的新特征。

Sun引进了一个全新的关键字enum来定义一个枚举类。

下面就是一个典型枚举类型的定义:
Java代码
1.public enum Color{
2. RED,BLUE,BLACK,YELLOW,GREEN
3.}
显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类。

而这些类都是类库中Enum类的子类(ng.Enum<E>)。

它们继承了这个Enum中的许多有用的方法。

下面我们就详细介绍enum定义的枚举类的特征及其用法。

(后面均用Color举例)
1、Color枚举类是特殊的class,其枚举值(RED,BLUE...)是Color的类对象(类实例):
Color c=Color.RED;
而且这些枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写。

2、即然枚举类是class,当然在枚举类型中有构造器,方法和数据域。

但是,枚举类的构造器有很大的不同:
(1) 构造器只是在构造枚举值的时候被调用。

Java代码
1.enum Color{
2. RED(255,0,0),BLUE(0,0,255),BLACK(0,0,0),YELLOW(2
55,255,0),GREEN(0,255,0);
3. //构造枚举值,比如RED(255,0,0)
4. private Color(int rv,int gv,int bv){
5. this.redValue=rv;
6. this.greenValue=gv;
7. this.blueValue=bv;
8. }
9.
10. public String toString(){ //自定义的public方

11. return super.toString()+"("+redValue+","+greenVa
lue+","+blueValue+")";
12. }
13.
14. private int redValue; //自定义数据域,private为
了封装。

15. private int greenValue;
16. private int blueValue;
17. }
(2) 构造器只能私有private,绝对不允许有public构造器。

这样可以保证外部代码无法新构造枚举类的实例。

这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。

但枚举类的方法和数据域可以允许外部访问。

Java代码
1.public static void main(String args[])
2.{
3. // Color colors=new Color(100,200,300); //wrong
4. Color color=Color.RED;
5. System.out.println(color); // 调用了toString()方

6.}
3、所有枚举类都继承了Enum的方法,下面我们详细介绍这些方法。

(1) ordinal()方法: 返回枚举值在枚举类种的顺序。

这个顺序根据枚举值声明的顺序而定。

Color.RED.ordinal(); //返回结果:0
Color.BLUE.ordinal(); //返回结果:1
(2) compareTo()方法: Enum实现了parable接口,因此可以比较象与指定对象的顺序。

Enum中的compareTo返回的是两个枚举值的顺序之差。

当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常。

(具体可见源代码)
pareTo(Color.BLUE); //返回结果 -1
(3) values()方法:静态方法,返回一个包含全部枚举值的数组。

Color[] colors=Color.values();
for(Color c:colors){
System.out.print(c+",");
}//返回结果:RED,BLUE,BLACK YELLOW,GREEN,
(4) toString()方法:返回枚举常量的名称。

Color c=Color.RED;
System.out.println(c);//返回结果: RED
(5) valueOf()方法:这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。

Color.valueOf("BLUE"); //返回结果: Color.BLUE
(6) equals()方法:比较两个枚举类对象的引用。

Java代码
1.//JDK源代码:
2.public final boolean equals(Object other) {
3. return this==other;
4.}
4、枚举类可以在switch语句中使用。

Java代码
1.Color color=Color.RED;
2.switch(color){
3. case RED: System.out.println("it's red");break;
4. case BLUE: System.out.println("it's blue");break;
5. case BLACK: System.out.println("it's blue");break;
6.}。

相关文档
最新文档