`

Java Enum的常见用法

    博客分类:
  • enum
 
阅读更多

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的用法详解.docx

    下面我们将详细探讨Java enum的四种常见用法。 1. 定义常量: 在Java 1.5之前,我们通常使用`public static final`关键字来定义常量,但这种方式存在一些局限。枚举提供了一种将相关常量分组的方式,例如定义颜色:...

    java enum 枚举的spring boot2.x完美实现demo源码

    综上所述,`java enum 枚举的spring boot2.x完美实现demo源码`示例主要展示了如何在Spring Boot 2.x项目中使用枚举类型,包括枚举的定义、属性和方法的添加,以及如何在实际业务场景中应用枚举,如与数据库的交互和...

    java enum枚举教程学习资料

    Java枚举(enum)是Java语言提供的一种特殊的数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中是类的子类型,因此,它们具备类的一些特性,比如可以有方法、变量以及实现接口。...

    javaenum(枚举)使用详解+总结.pdf

    下面我们将深入探讨enum的使用方法、特性以及常见的操作。 1. **枚举定义** 创建枚举类型的语法非常简洁,只需使用`enum`关键字,如下所示: ```java public enum Color { RED, GREEN, BLUE } ``` 这里定义...

    javaenum学习.pdf

    以下是对`javaenum学习.pdf`中提到的Java枚举相关知识点的详细说明: 1. **枚举元素定义**: - 枚举元素的列表必须写在枚举类的开头,元素之间用逗号分隔。如果元素列表后面没有其他内容,可以不加分号;如果有...

    Java关于中文乱码问题的多种解决方法

    在Java编程中,中文乱码问题是一个常见的困扰,尤其是在处理文件读写、网络传输或数据库操作时。本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中...

    Java枚举(enum) 详解7种常见的用法

    以下将详细介绍7种常见的Java枚举用法: 1. **常量用法**: 在JDK 1.5之前,我们通常使用`public static final`关键字来定义常量。但自从引入枚举后,我们可以将相关联的常量组织到同一个枚举类型中,如`Color {...

    Enum汇总大全详细讲解

    枚举(Enum)在Java中是一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的常量表示方式。以下是对Enum的详细讲解: 1. **基本枚举定义**: ```java enum Color {BLUE, RED, GREEN;} ``` 这是...

    Java枚举的七种常见用法总结(必看)

    下面是Java枚举的七种常见用法的详细说明: 1. 常量用法: 在Java中,枚举可以用于组织一组相关的常量。在JDK 1.5之前,我们通常使用`public static final`关键字来定义常量,但这种方式不够灵活。枚举提供了一种...

    面试常见问题-Java

    * 在 Java 7 之前,Switch 语句只能使用 byte、short、char、int 或其对应的封装类和 Enum 类型作为参数 * 从 Java 7 开始,String 也可以作为 Switch 语句的参数 三、Equals 和 == 的区别 * == 比较的是两个变量...

    浅谈Java中是否直接可以使用enum进行传输

    在 Java 中,使用枚举类型(enum)来表示状态或状态值是一种非常常见的做法。但是,在将枚举类型用于传输时,需要注意一些问题。在本文中,我们将探讨 Java 中是否可以直接使用 enum 进行传输,并分析其原因。 首先...

    Java枚举的七种常见用法.doc

    以下是对标题和描述中提及的Java枚举七种常见用法的详细说明: 1. 常量定义: 在Java中,枚举可以用来组织相关常量,提升代码的可读性和可维护性。例如,我们可以定义一个`Color`枚举,包含`RED`, `GREEN`, `BLANK`...

    java编程常见50例

    Java编程是软件开发领域中广泛使用的编程语言,尤其在企业级应用中占据着主导地位。本资源"java编程常见50例"包含了50个Java编程的经典实例,旨在帮助开发者深入理解和掌握Java语言的核心概念与实用技巧。这些例子...

    enum类型被intent所携带时各种情况的示例代码

    在Android中,如果想要在Intent中传递enum,有以下几种常见的策略: 1. **通过ordinal值传递**:每个enum实例都有一个唯一的ordinal值,从0开始递增。可以将enum的ordinal值作为一个int类型的数据传递给Intent,...

    Java程序员常见笔试题

    ### Java程序员常见笔试题知识点详解 #### 一、final, finally, finalize的区别 - **final**: 这个关键字用于声明不可变的实体。当应用于类时,表示该类不能被继承;应用于方法时,表示该方法不能被重写;应用于...

    java枚举ppt和详细代码

    在Java中,枚举的定义使用关键字`enum`。例如: ```java enum Color {RED, GREEN, BLUE} ``` 这里定义了一个名为Color的枚举,包含三个常量:RED、GREEN和BLUE。 2. **用普通类模拟枚举**: 在早期的Java版本...

    JAVA枚举类型的用法详解

    下面我们将深入探讨Java枚举类型的常见用法。 首先,枚举类型在本质上等同于定义了一组静态常量。创建枚举类型的语法如下: ```java public enum Belle { para1, para2, para3, para4; } ``` 这会创建一个名为`...

    java常见面试题(史上最全最经典)

    7. **ENUM的用法**:ENUM是预定义值的字符串类型,常用于创建表时限制特定列的取值范围。 8. **CHAR与VARCHAR的区别**:CHAR长度固定,VARCHAR长度可变。CHAR存储时会用空格填充到指定长度,检索时会删除尾随空格,...

    Java常见面试题汇总

    下面是Java常见面试题汇总,涵盖了Java基础知识、数据类型、运算符、循环、数组、方法结构、方法重载和重写、面向对象编程等方面的知识点。 一、Java基础知识 1. JDK和JRE的区别:JDK是Java开发工具集,包含JRE...

Global site tag (gtag.js) - Google Analytics