当前位置:网站首页>枚举类的使用和实现
枚举类的使用和实现
2022-07-23 02:49:00 【九命猫小宇】
枚举类的使用
- 类的对象只有有限个,确定的。
- 当需要定义一组常量时,强烈建议使用枚举类
枚举类的实现
- JDK1.5之前需要自定义枚举类
- JDK 1.5 新增的 enum关键字用于定义枚举类
- 若枚举只有一个对象, 则可以作为一种单例模式的实现方式。
枚举类的属性
- 枚举类对象的属性不应允许被改动,所以应该使用private final修饰
- 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值
- 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数
自定义枚举类
- 私有化类的构造器,保证不能在类的外部创建其对象
- 在类的内部创建枚举类的实例。声明为:public static final
- 对象如果有实例变量,应该声明为private final,并在构造器中初始化
使用enum定义枚举类
- 使用说明:
- 使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类
- 枚举类的构造器只能使用 private 权限修饰符
- 枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的实例系统会自动添加 public static final 修饰
- 必须在枚举类的第一行声明枚举类对象
- JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定。
Enum类的主要方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ys8WlWpV-1657712724038)(C:\Users\asus\Desktop\image-20220713164911664.png)]](/img/07/3dfd3fe7de57188b32174b6da28809.png)
- values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
- valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
- toString():返回当前枚举类对象常量的名称
实现接口的枚举类
- 和普通 Java 类一样,枚举类可以实现一个或多个接口
- 若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。
- 若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法
package com.atguigu.java;
/** * 一、枚举类的使用 * 1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类 * 2.当需要定义一组常量时,强烈建议使用枚举类 * 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方法 * * 二、如何定义枚举类 * 方式一:jdk5.0之前,自定义枚举类 * 方式二:jdk5.0,可以使用enum关键字定义枚举类 * * 三、Enum类中的常用方法: * values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。 * valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。 * 如不是,会有运行时异常:IllegalArgumentException。 * toString():返回当前枚举类对象常量的名称 * * 四、使用enum关键字定义的枚举类实现接口的情况 * 情况一:实现接口,在enum类中实现抽象方法 * 情况二:让枚举类的对象分别实现接口中的抽象方法 * * @Author damao * @Date 2022/7/13 14:51 * @Version 1.0 */
public class SeasonTest {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
}
}
//自定义枚举类
class Season{
//1.声明Season对象的属性
private final String seasonName;
private final String seasonDesc;
//2.私有化类的构造器并给对象属性赋值
private Season(String seasonName,String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3.提供当前枚举类的多个对象:public static final的
public static final Season SPRING = new Season("春天","春暖花开");
public static final Season SUMMER = new Season("夏天","夏日炎炎");
public static final Season AUTUMN = new Season("秋天","秋高气爽");
public static final Season WINTER = new Season("冬天","冰天雪地");
//4.其他诉求1:获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//其他诉求2:提供toString()
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
package com.atguigu.java;
/** * 使用enum关键字定义枚举类 * 说明:定义的枚举类默认继承于class java.lang.Enum类 * * @Author damao * @Date 2022/7/13 15:57 * @Version 1.0 */
public class SeasonTest1 {
public static void main(String[] args) {
Season1 summer = Season1.SUMMER;
System.out.println(summer);
// System.out.println(Season1.class.getSuperclass());
System.out.println("=================");
//values():
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
values[i].show();
}
System.out.println("=================");
Thread.State[] values1 = Thread.State.values();
for (int i = 0; i < values1.length; i++) {
System.out.println(values1[i]);
}
System.out.println("=================");
//valueOf(String objName):根据提供的objName,返回枚举类中对象名是objName的对象
//如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
Season1 winter = Season1.valueOf("WINTER");
// Season1 winter = Season1.valueOf("WINTER1");
System.out.println(winter);
winter.show();
}
}
interface Info{
void show();
}
//使用enum关键字定义枚举类
enum Season1 implements Info{
//1.提供当前枚举类的对象,多个对象之间用“,”隔开,末尾对象用“;”结束
SPRING("春天", "春暖花开"){
@Override
public void show() {
System.out.println("春天在哪里?");
}
},
SUMMER("夏天", "夏日炎炎"){
@Override
public void show() {
System.out.println("夏天");
}
},
AUTUMN("秋天", "秋高气爽"){
@Override
public void show() {
System.out.println("秋天");
}
},
WINTER("冬天", "冰天雪地"){
@Override
public void show() {
System.out.println("冬天");
}
};
//2.提供当前枚举类的多个对象:public static final的
private final String seasonName;
private final String seasonDesc;
//3.私有化类的构造器并给对象属性赋值
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.其他诉求1:获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
// //其他诉求2:提供toString()
//
// @Override
// public String toString() {
// return "Season1{" +
// "seasonName='" + seasonName + '\'' +
// ", seasonDesc='" + seasonDesc + '\'' +
// '}';
// }
/*@Override public void show(){ System.out.println("这是一个季节"); }*/
}
边栏推荐
- vue3用keep-alive缓存页面了,但是每次切换tab进入页面还是会进入onMounted,导致没有缓存效果,为什么呢?
- 本地提权的学习
- Is the sub database and sub table really suitable for your system? Talk about how to select sub databases, sub tables and newsql
- CMake入门教程
- 技术分享 | 大事务阻塞 show master status
- 今天的码农女孩学习了关于node下的Express框架的知识
- 【HiFlow】定期发送腾讯云短信发送群
- [BDSec CTF 2022] 部分WP
- Interviewer: explain the core principle of ThreadLocal
- 清华、AIR、腾讯 | 3D等变分子图预训练
猜你喜欢

CANopen通信----PDO与SDO

Hide the PHP version information in the response header of the website server

seatunnel 架构

毕业1年,放弃实习机会,在家自学软件测试,同学实习刚结束,我已成月薪12k测试工程师

WordPress网站SEO完整教程

MySQL数据库提权学习

【无标题】

Build the infrastructure construction of Internet of things with low code software

Peptide nucleic acid coupled polypeptide ile Glu Gly Arg PNA (s-2222) | BOC Leu Gly Arg PNA

non-Boost Asio 笔记: UDP UART SocketCAN Multicast UDS
随机推荐
The method of page Jump in PHP
MySQL数据库UDF提权学习
目前都有哪些年利率6%左右的保本理财产品?
中信期货是正规的期货公司吗,开户是否安全?
分库分表真的适合你的系统吗?聊聊分库分表和NewSQL如何选择
WordPress网站SEO完整教程
CANopen通信----PDO与SDO
Liunx上杀死一进程
南京银行提前批金融科技岗
笔记——记录一个dynamic-datasource please check the setting of primary 问题解决
PHP RSA generates public key and private key PSA2 encryption and decryption
Distributed lock optimization scheme under 100 million traffic! It works so well~
Reverse pairs in an array
Sentry的安装、配置、使用
Pytorch save and load model
PHP converts ASCII code to string, and string converts ASCII code
Hfish蜜罐的搭建与测试
How is it safe to open an account for Haitong Securities' exchange fund
用现代化的开发方法和思维,打跑遗留系统“拦路虎”
外地人在华泰开户安全吗?会被骗吗