Java Enum(枚举)的用法
Enum: 用来表示一组相同类型的常量
定义一个枚举:
public enum WeekDay { //最好全大写,因为枚举类型的值是public static final的 MON("Monday"), TUE("Tuesday"), WED("Wednesday"), THU("Thursday"), FRI("Friday"), SAT("Saturday"), SUN("Sunday"); //定义枚举类型的属性 private final String day; /* * 构造器只能是private,不允许有public构造器,这样可以保证外部代码无法新 构造枚举类的实例, * 因为我们知道枚举值是public static final的常量 */ private WeekDay(String day) { this.day = day; //验证获取枚举常量时会被调用 System.out.println("The constructor is invoked !"); } //普通方法 public String getDay() { return day; } }
WeekDayTest 测试类:
public class WeekDayTest { public static void main(String[] args) { //通过WeekDay.枚举常量 获取枚举常量,此时会初始化所有枚举常量,会调用构造器 WeekDay weekDay = WeekDay.WED;//调用构造方法,输出结果:七句 The constructor is invoked ! //获取枚举属性,通过普通方法getDay() System.out.println(weekDay.getDay());//输出结果:Wednesday //enum常用方法 //1.toString()方法,返回枚举常量的名称 System.out.println(weekDay.toString());//输出结果:WED System.out.println(weekDay);//会调用toString()方法,输出结果:WED //2.name()方法,返回枚举常量的名称 System.out.println(weekDay.name());//输出结果:WED //上面两种方法都是返回枚举常量的名称,但是API推荐使用toString()方法 //3.values()静态方法,返回全部枚举常量的数组 for (WeekDay wd : WeekDay.values()) { System.out.print(wd + " ");//输出结果:MON TUE WED THU FRI SAT SUN } //4.ordinal()方法返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零) System.out.println(weekDay.ordinal());//输出结果:2 //5.1 valueOf(String name)静态方法,返回带指定名称的指定枚举类型的枚举常量(完全匹配) System.out.println(WeekDay.valueOf("SUN"));//输出结果:SUN //5.2 valueOf((Class<T> enumType,String name)静态方法,返回带指定名称的指定枚举类型的枚举常量(完全匹配) //使用方法1(类.class方法) System.out.println(WeekDay.valueOf(WeekDay.class, "MON")); //使用方法2(枚举常量.getgetDeclaringClass()方法返回与此枚举常量的枚举类型相对应的 Class 对象) //不能使用枚举常量.getClass()方法 注:java官方api有说明 System.out.println(WeekDay.valueOf(weekDay.getDeclaringClass(), "SUN"));//输出结果:SUN //6.compareTo(E o) 比较此枚举与指定对象的顺序 System.out.println(WeekDay.MON.compareTo(weekDay));//输出结果:-2 //枚举类型可以在switch语句中使用 下面的输出结果:WED switch (weekDay) { case MON: System.out.println("MON"); break; case TUE: System.out.println("TUE"); break; case WED: System.out.println("WED"); break; default: System.out.println("default"); } } }
枚举作为类的属性,给类中的枚举属性赋值问题
Clothes类有枚举类型的color属性
/** * * @author * @date 2013-12-18 */ public class Clothes { private Color color; public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4); // 成员变量 private final String name; private final int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } public String getName() { return name; } public int getIndex() { return index; } } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } //返回枚举类型的name属性 public String getColorName() { return color != null ? this.color.getName() : ""; } public static void main(String[] args) { Clothes clothes = new Clothes(); //Color c = Color.BLANK; //1.使用枚举常量给Clothes的color属性赋值 String s = "blank"; //Boolean flag = false; clothes.setColor(Color.valueOf(s.toUpperCase())); //clothes.setColor(Color.valueOf(Color.class, s.toUpperCase())); System.out.println(clothes.getColor().toString());//BLANK System.out.println(clothes.getColorName());//白色 System.out.println(clothes.getColor().getIndex());//3 /* for (Color c : Color.values()) { //忽略大小写匹配枚举常量名称 if (s.equalsIgnoreCase(c.toString())) { clothes.setColor(Color.valueOf(s.toUpperCase())); //clothes.setColor(Color.valueOf(Color.class, s.toUpperCase())); System.out.println(clothes.getColor().toString());//BLANK System.out.println(clothes.getColorName());//白色 System.out.println(clothes.getColor().getIndex());//3 flag = true; } } if (flag.equals(Boolean.FALSE)) { System.out.println("参数和枚举常量的名称不匹配"); } //2.使用枚举常量的index属性来标识进行赋值 int i = 1; flag = false; for (Color c : Color.values()) { if (i == c.getIndex()) { clothes.setColor(Color.valueOf(c.toString())); //clothes.setColor(Color.valueOf(c.class, color.toString())); System.out.println(clothes.getColor().toString());//RED System.out.println(clothes.getColorName());//红色 System.out.println(clothes.getColor().getIndex());//1 flag = true; } } if (flag.equals(Boolean.FALSE)) { System.out.println("参数和枚举常量的index属性不匹配"); } //3.使用枚举常量的name属性来标识进行赋值,略...... */ } }
其他类可以直接引入Clothes类的枚举类型
import cxl.Clothes.Color; public class TestImportEnum { public static void main(String[] args) { for(Color color : Color.values()) { System.out.println(color.toString() + " : " + color.getName()); } } }
输出结果
RED : 红色 GREEN : 绿色 BLANK : 白色 YELLOW : 黄色
相关推荐
下面我们将详细探讨Java enum的四种常见用法。 1. 定义常量: 在Java 1.5之前,我们通常使用`public static final`关键字来定义常量,但这种方式存在一些局限。枚举提供了一种将相关常量分组的方式,例如定义颜色:...
综上所述,`java enum 枚举的spring boot2.x完美实现demo源码`示例主要展示了如何在Spring Boot 2.x项目中使用枚举类型,包括枚举的定义、属性和方法的添加,以及如何在实际业务场景中应用枚举,如与数据库的交互和...
Java枚举(enum)是Java语言提供的一种特殊的数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中是类的子类型,因此,它们具备类的一些特性,比如可以有方法、变量以及实现接口。...
下面我们将深入探讨enum的使用方法、特性以及常见的操作。 1. **枚举定义** 创建枚举类型的语法非常简洁,只需使用`enum`关键字,如下所示: ```java public enum Color { RED, GREEN, BLUE } ``` 这里定义...
以下是对`javaenum学习.pdf`中提到的Java枚举相关知识点的详细说明: 1. **枚举元素定义**: - 枚举元素的列表必须写在枚举类的开头,元素之间用逗号分隔。如果元素列表后面没有其他内容,可以不加分号;如果有...
在Java编程中,中文乱码问题是一个常见的困扰,尤其是在处理文件读写、网络传输或数据库操作时。本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中...
以下将详细介绍7种常见的Java枚举用法: 1. **常量用法**: 在JDK 1.5之前,我们通常使用`public static final`关键字来定义常量。但自从引入枚举后,我们可以将相关联的常量组织到同一个枚举类型中,如`Color {...
枚举(Enum)在Java中是一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的常量表示方式。以下是对Enum的详细讲解: 1. **基本枚举定义**: ```java enum Color {BLUE, RED, GREEN;} ``` 这是...
下面是Java枚举的七种常见用法的详细说明: 1. 常量用法: 在Java中,枚举可以用于组织一组相关的常量。在JDK 1.5之前,我们通常使用`public static final`关键字来定义常量,但这种方式不够灵活。枚举提供了一种...
* 在 Java 7 之前,Switch 语句只能使用 byte、short、char、int 或其对应的封装类和 Enum 类型作为参数 * 从 Java 7 开始,String 也可以作为 Switch 语句的参数 三、Equals 和 == 的区别 * == 比较的是两个变量...
在 Java 中,使用枚举类型(enum)来表示状态或状态值是一种非常常见的做法。但是,在将枚举类型用于传输时,需要注意一些问题。在本文中,我们将探讨 Java 中是否可以直接使用 enum 进行传输,并分析其原因。 首先...
以下是对标题和描述中提及的Java枚举七种常见用法的详细说明: 1. 常量定义: 在Java中,枚举可以用来组织相关常量,提升代码的可读性和可维护性。例如,我们可以定义一个`Color`枚举,包含`RED`, `GREEN`, `BLANK`...
Java编程是软件开发领域中广泛使用的编程语言,尤其在企业级应用中占据着主导地位。本资源"java编程常见50例"包含了50个Java编程的经典实例,旨在帮助开发者深入理解和掌握Java语言的核心概念与实用技巧。这些例子...
在Android中,如果想要在Intent中传递enum,有以下几种常见的策略: 1. **通过ordinal值传递**:每个enum实例都有一个唯一的ordinal值,从0开始递增。可以将enum的ordinal值作为一个int类型的数据传递给Intent,...
### Java程序员常见笔试题知识点详解 #### 一、final, finally, finalize的区别 - **final**: 这个关键字用于声明不可变的实体。当应用于类时,表示该类不能被继承;应用于方法时,表示该方法不能被重写;应用于...
在Java中,枚举的定义使用关键字`enum`。例如: ```java enum Color {RED, GREEN, BLUE} ``` 这里定义了一个名为Color的枚举,包含三个常量:RED、GREEN和BLUE。 2. **用普通类模拟枚举**: 在早期的Java版本...
下面我们将深入探讨Java枚举类型的常见用法。 首先,枚举类型在本质上等同于定义了一组静态常量。创建枚举类型的语法如下: ```java public enum Belle { para1, para2, para3, para4; } ``` 这会创建一个名为`...
7. **ENUM的用法**:ENUM是预定义值的字符串类型,常用于创建表时限制特定列的取值范围。 8. **CHAR与VARCHAR的区别**:CHAR长度固定,VARCHAR长度可变。CHAR存储时会用空格填充到指定长度,检索时会删除尾随空格,...
下面是Java常见面试题汇总,涵盖了Java基础知识、数据类型、运算符、循环、数组、方法结构、方法重载和重写、面向对象编程等方面的知识点。 一、Java基础知识 1. JDK和JRE的区别:JDK是Java开发工具集,包含JRE...