栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java枚举一看就懂

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java枚举一看就懂

枚举 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

文章目录
  • 枚举
  • 前言
  • 一、枚举是什么?
    • 1.特点
    • 2.优势
      • 枚举的方法
      • values(), ordinal() 和 valueOf() 方法
      • 枚举类成员
  • 二、使用步骤
      • 枚举案例--状态机
      • 枚举案例--组织枚举
  • 总结


前言

编写季节类(Season),该类只有四个对象(spring,summer,autumn,winter)


提示:以下是本篇文章正文内容,下面案例可供参考

一、枚举是什么?

枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

1.特点
  • 枚举就是一个受限制的类,默认继承Enum;
  • 枚举的第一行必须定义该枚举类型的对象
  • 枚举类型对象默认添加: public static final 类型
  • 枚举没有继承明确类(自定义枚举类默认继承Enum,Enum默认继承Object)
  • 枚举类不能被继承
  • 枚举里可以有构造方法、成员方法、静态方法、抽象方法
  • 枚举可以实现接口
  • 枚举里没有定义方法,可以在最后一个对象后面加逗号、分号或什么都不加
2.优势
  • 增强代码可读性
  • 枚举型可直接与数据库交互
  • switch语句优势
  • 编译优势(枚举类编译时,没有把常量值编译到代码中,即使常量值发生改变,也不会影响引用常量的类 )
  • 将常量组织起来,统一管理
  • 去除equals两者判断 由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所提高
枚举的方法
方法名解释
Enum.valueOf(Class enumType, String name)根据字符串找到该枚举类中的对象
public static void values()获取该枚举类对象数组
public static void valueOf(String args0)根据字符串获取该枚举类中的对象
public final String name()获取该枚举对象名字
public final Class getDeclaringClass()获取枚举对象的枚举类型相对应的Class对象
public final int hashCode()获取该枚举对象的hash值
public final int compareTo(E o)两个枚举对象进行比较
public final boolean equals(Object other)比较两个枚举对象是否相同
values(), ordinal() 和 valueOf() 方法

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口。

values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:

  • values() 返回枚举类中所有的值。
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
  • valueOf()方法返回指定字符串值的枚举常量。
枚举类成员
  • 枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。

  • 枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。

二、使用步骤 枚举案例–状态机
package com.dream.enum_class04;

import java.util.Scanner;

public class Test01 {
	
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入信号灯:RED,YELLOW,GREEN");
		String str = scan.next();
		Signal signal = Signal.valueOf(str);// 通过字符串找到该信号灯的对象

		getTrafficInstruct(signal);
	}

	public static void getTrafficInstruct(Signal signal) {
		switch (signal) {
		case RED:
			System.out.println("红灯停");
			break;
		case YELLOW:
			System.out.println("黄灯等待");
			break;
		case GREEN:
			System.out.println("路灯行");
			break;

		default:
			break;
		}
	}
}

// 信号灯的枚举类
enum Signal {
	RED, YELLOW, GREEN
}
枚举案例–组织枚举

代码如下(示例):

package com.dream.enum_class05;

public class Test01 {
	
	public static void main(String[] args) {
		System.out.println(ICode.LoginCode.OK);
		System.out.println(ICode.LoginCode.ERROR_A);
		System.out.println(ICode.LoginCode.ERROR_B);

		System.out.println(ICode.RegisterCode.OK);
		System.out.println(ICode.RegisterCode.ERROR_A);
		System.out.println(ICode.RegisterCode.ERROR_B);
	}
}

ICode.java代码如下(示例):

package com.dream.enum_class05;

public interface ICode {
	
	enum LoginCode{
		OK(1,"登录成功"),ERROR_A(-1,"登录失败-账号或密码错误"),ERROR_B(-2,"登录失败-验证码错误");

		private int code;
		private String info;

		private LoginCode() {
		}

		private LoginCode(int code, String info) {
			this.code = code;
			this.info = info;
		}

		public int getCode() {
			return code;
		}

		public void setCode(int code) {
			this.code = code;
		}

		public String getInfo() {
			return info;
		}

		public void setInfo(String info) {
			this.info = info;
		}

		@Override
		public String toString() {
			return code + " -- " + info;
		}
	}

	enum RegisterCode{
		OK(1, "注册成功"), ERROR_A(-1, "注册失败-账号或密码错误"), ERROR_B(-2, "注册失败-验证码错误");

		private int code;
		private String info;

		private RegisterCode() {
		}

		private RegisterCode(int code, String info) {
			this.code = code;
			this.info = info;
		}

		public int getCode() {
			return code;
		}

		public void setCode(int code) {
			this.code = code;
		}

		public String getInfo() {
			return info;
		}

		public void setInfo(String info) {
			this.info = info;
		}

		@Override
		public String toString() {
			return code + " -- " + info;
		}
	
	}
}


总结
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328140.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号