IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Java枚举一看就懂 -> 正文阅读

[移动开发]Java枚举一看就懂

枚举

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


前言

编写季节类(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 {
	/**
	 * 枚举案例--状态机
	 * 
	 * 通过Switch判断枚举对象,执行不同的功能。
	 */
	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 {
	/**
	 * 枚举案例--组织枚举
	 * 
	 * 把相同意义的枚举类组织在类或接口中,一般使用接口
	 * 
	 * 使用类组织枚举:该枚举默认使用static修饰
	 * 使用接口组织枚举:该枚举默认使用public static修饰
	 */
	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;
		}
	
	}
}


总结

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 12:06:28  更:2021-10-17 12:08:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:04:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码