枚举类(自定义实现枚举类)

news/2025/3/30 16:19:30/

枚举概述:

        是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等

        回想单例设计模式:单例类是一个类只有一个实例

        那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例,这才能是枚举类

自己实现枚举:

        自定义枚举类

        案例1:                        无参构造

        案例2:                        带参构造,get方法,toString方法

        案例3:                        抽象方法

发现自己定义一个枚举类,比较麻烦,所有java就提供了枚举类供我们使用

格式是:只有枚举项的枚举了

        public enum 枚举类名{

                        枚举项1,枚举项2,枚举项3...;

}

自定义枚举类代码实现:

package com.aynu3;public class Light {//创建三个实例public static final Light RED = new Light();public static final Light GREEN = new Light();public static final Light YELLOW = new Light();private Light(){}
}
package com.aynu3;public class Light2 {//创建三个实例public static final Light2 RED = new Light2("红");public static final Light2 GREEN = new Light2("绿");public static final Light2 YELLOW = new Light2("黄");private String name;private Light2(String name){this.name=name;}public String getName(){return name;}public String toString(){return "Light2{"+"name='"+name +'\''+'}';}
}
package com.aynu3;public abstract class Light3 {//创建三个实例public static final Light3 RED = new Light3("红"){@Overridepublic void show() {System.out.println("红");}};public static final Light3 GREEN = new Light3("绿"){@Overridepublic void show() {System.out.println("绿");}};public static final Light3 YELLOW = new Light3("黄"){@Overridepublic void show() {System.out.println("黄");}};private String name;private Light3(String name) {this.name = name;}public String getName() {return name;}public String toString() {return "Light3{" +"name='" + name + '\'' +'}';}public abstract void show();
}
package com.aynu3;public class LightDemo {public static void main(String[] args) {Light r = Light.RED;System.out.println(r);  //com.aynu3.Light@27d6c5e0System.out.println("--------");Light2 r2 = Light2.RED;System.out.println(r2); //Light2{name='红'}System.out.println(r2.getName());   //红r2 = Light2.YELLOW;System.out.println(r2); //Light2{name='黄'}System.out.println(r2.getName());   //黄System.out.println("--------");Light3 r3 = Light3.RED;System.out.println(r3); //Light3{name='红'}System.out.println(r3.getName());   //红r3.show();  //红}
}

com.aynu3.Light@27d6c5e0
--------
Light2{name='红'}

Light2{name='黄'}

--------
Light3{name='红'}

 通过enum实现枚举类:

package com.aynu4;public enum Light {RED, GREEN, YELLOW;}
package com.aynu4;public enum Light2 {RED("红"), GREEN("绿"), YELLOW("黄");private String name;private Light2(String name){this.name=name;}public String getName() {return name;}@Overridepublic String toString() {return "Light2{" +"name='" + name + '\'' +'}';}
}
package com.aynu4;public enum Light3 {RED("红"){@Overridepublic void show() {System.out.println("红");}},GREEN("绿"){@Overridepublic void show() {System.out.println("绿");}},YELLOW("黄"){@Overridepublic void show() {System.out.println("黄");}};private String name;private Light3(String name){this.name=name;}public String getName() {return name;}@Overridepublic String toString() {return "Light3{" +"name='" + name + '\'' +'}';}public abstract void show();
}
package com.aynu4;public class LightDemo {public static void main(String[] args) {Light r = Light.RED;System.out.println(r);  //REDSystem.out.println("----------");Light2 r2=Light2.RED;System.out.println(r2);System.out.println(r2.getName());r2 = Light2.YELLOW;System.out.println(r2);System.out.println(r2.getName());System.out.println("----------");Light3 r3= Light3.RED;System.out.println(r3);System.out.println(r3.getName());r3.show();}
}

 RED
----------
Light2{name='红'}

Light2{name='黄'}

 枚举的注意事项

定义枚举类要用关键字enum

所有枚举类都是Enum的子类

枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略

枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举("");

枚举类也可以有抽象方法但是枚举项必须重写该方法

枚举在switch语句中的使用

 

 

 

 

 


http://www.ppmy.cn/news/44616.html

相关文章

办公必备!不再被格式问题困扰,轻松搞定文档转换!

大家平时在工作中会需要将文档转换为其他格式吗? 日常工作中,经常碰到需要文件格式转换的情况,对于掌握了一些转换技能的朋友说,文件格式转换自然不在话下 对于不熟练的朋友来说,想要轻松转换文件格式,就…

如何在TypeScript中使用泛型

介绍 泛型是静态类型语言的基本特征,允许开发人员将类型作为参数传递给另一种类型、函数或其他结构。当开发人员使他们的组件成为通用组件时,他们使该组件能够接受和强制在使用组件时传入的类型,这提高了代码灵活性,使组件可重用…

HTML5 Input 类型

文章目录HTML5 Input 类型Input 类型: colorInput 类型: dateInput 类型: datetimeInput 类型: datetime-localInput 类型: emailInput 类型: monthInput 类型: numberInput 类型: rangeInput 类型: searchInput 类型: telInput 类型: timeInput 类型: urlInput 类型: weekHTML…

安全运营之资产安全信息管理

安全风险管理的三要素分别是资产、威胁和脆弱性,脆弱性的存在将会导致风险,而威胁主体利用脆弱性产生风险。网络攻击主要利用了系统的脆弱性。由于网络管理对象(资产)自身的脆弱性,使得威胁的发生成为可能,…

Map和object和set的区别:

1.Map: 对象使用方法: set(key, val): 向Map中添加新元素get(key): 通过键值查找特定的数值并返回has(key): 判断Map对象中是否有Key所对应的值,有返回true,否则返回falsedelete(key): 通过键值从Map中移除对应的数据clear(): 将这个Map中的…

c++string相关内容

1. string基本概念本质:string是C风格的字符串,而string本质上是一个类string和 char *区别:char * 是一个指针string 是一个类,类内部封装了char *,管理这个字符串,是一个char*型的容器 特点:string类内部封装了很多成员方法例如…

“Missing privilege separation directory: /run/sshd“的一个原因记录

问题 使用ssh的过程中出现了一个奇怪的问题。 使用putty远程连接ssh,没有出现问题。 但是使用python的Paramiko的库调用的时候会出现: Error reading SSH protocol banner[WinError 10054] 而且偶尔还没有报错,这下整不明白了。 使用&a…

入行 4 年,跳槽 2 次,我摸透了软件测试这一行

最近几年行业在如火如荼的发展壮大,以及其他传统公司都需要大批量的软件测试人员,但是20年的疫情导致大规模裁员,让人觉得行业寒冬已来,软件测试人员的职业规划值得我们深度思考。 大家都比较看好软件测试行业,只是因为…