Java基础之JDK三大主要特性—枚举4月打卡day05
Java基础之JDK三大主要特性—枚举4月打卡day05
关于作者
- 作者介绍
🍓 博客主页:作者主页
🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。
🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨💻。
4、JDK三大主要特性——枚举
在讲解枚举之前回顾一个概念:多例设计模式,构造方法私有化(非public),之后在类的内部存在若干个指定的对象,通过一个方法返回指定对象。
4.1 多例与枚举
定义一个描述颜色基色的多例设计类
package com.demo;
class Color {
private static final Color RED = new Color("红色");
private static final Color GREEN = new Color("绿色");
private static final Color BLUE = new Color("蓝色");
private String title;
private Color(String title){
this.title=title;
}
public String toString(){
return this.title;
}
public static Color getColor(int num){
switch(num){
case 0:
return RED;
case 1:
return GREEN;
case 2:
return BLUE;
default:
return null;
}
}
}
public class ColorDemo {
public static void main(String[] args) {
Color c = Color.getColor(0);
System.out.println(c);
}
}
基于枚举开发
package com.demo;
enum Color {
RED,BULE,PINK;
}
public class ColorDemo {
public static void main(String[] args) {
System.out.println(Color.RED);
}
}
4.2 Enum类
很明显,现在可以发现,利用枚举实现多例设计会更加的简单直白一些,但是在Java之中,枚举并不是一个新的类型,严格来讲,每一个使用enum定义的类实际上都属于一个类继承了Enum父类而已,而java.lang.Enum类定义如下:
public abstract class Enum<E extends Enum<E>>
extends Object
implements Comparable<E>, Serializable
而在Enum类种子红定义了两个方法:
- 取得枚举的序号:public final int ordinal();
- 取得枚举的名称:public final String name()。
package com.demo;
enum Color {
RED,BULE,PINK;
}
public class ColorDemo {
public static void main(String[] args) {
//0===RED
System.out.println(Color.RED.ordinal() + "===" + Color.RED.name());
}
}
取得所有颜色数据
package com.demo;
enum Color {
RED,BULE,PINK;
}
public class ColorDemo {
public static void main(String[] args) {
/*0===RED
1===BULE
2===PINK*/
for (Color c : Color.values()) {
System.out.println(c.ordinal() + "===" + c.name());
}
}
}
面试题:请解释enum和Enum的区别?
enum是一个关键字,使用enum定义的枚举类本质上相当于一个类继承了Enum类而已。
4.3 枚举中定义其它结构
按照之前所理解,枚举就属于多例设计模式,那么既然是多例设计模式,对于类之中就肯定有多种组成,包括属性,方法,构造方法,在枚举之中也同样可以定义以上的内容,不过需要注意的是,枚举类之中定义的构造方法绝对不能是public,必须私有化。
除了这些要求之外枚举之中每一个定义的对象必须定义在第一行。
package com.demo;
enum Color {
RED("红色"),BULE("蓝色"),PINK("粉色");
private String c;
private Color(String c){
this.c = c;
}
public String toString(){
return this.c;
}
}
public class ColorDemo {
public static void main(String[] args) {
/*红色*/
System.out.println(Color.RED);
}
}
枚举接口
package com.demo;
interface IColor{
public String getColor();
}
enum Color implements IColor{
RED("红色"),BULE("蓝色"),PINK("粉色");
private String c;
private Color(String c){
this.c = c;
}
public String toString(){
return this.c;
}
@Override
public String getColor() {
// TODO Auto-generated method stub
return this.c;
}
}
public class ColorDemo {
public static void main(String[] args) {
/*红色*/
System.out.println(Color.RED);
}
}
4.4 枚举应用
只有指定的几个对象
性别
package com.demo;
class Person{
private String name;
private int age;
private Sex sex;
public Person(String name, int age, Sex sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
enum Sex{
MALE("男"),FEMALE("女");
private String sex;
private Sex(String sex) {
this.sex = sex;
}
public String toString(){
return this.sex;
}
}
public class MaleDemo {
public static void main(String[] args) {
Person person = new Person("jack", 10, Sex.MALE);
System.out.println(person.toString());
}
}
枚举还可以进行switch语句进行编写和判断。
后语
厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。
对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!
- 点赞
- 收藏
- 关注作者
评论(0)