Java基础之枚举类--详解

Java基础之枚举类–详解

在这里插入图片描述

1.自定义枚举类

引入概念:

我们什么时候开始使用枚举类呢?

引入一个小案例:

我们生活中有春夏秋冬

那么这些属性都是固定的 这些名称都是不允许被修改的,那么我们可以自己定义一个类进行操作,这个类,

是不允许被外界访问,不允许被修改,是由我们自己创建的。

下面是代码演示

class Seasons{
    
    
    private String name;
    private String desc;
      ///这样一写的话 就可以使我们的这个数据变得不可以被外部修改了
    private Seasons(String name, String desc) {
    
    
        this.name = name;
        this.desc = desc;
    }
    public static final Seasons spring=new Seasons("春天","温暖");//我们在内部去使用,不会被修改 优化一下可以加入final修饰符
    //以此类推的书写下去  实现自定义枚举类的操作处理 枚举类型的名字使用大写  不要提供get/set方法 因为枚举对象通常只是可读的
    //1.构造器私有化 2.本类内部创建一组对象 3.对外暴漏对象 4.可以提供get方法,但是不要提供set,就是为了我们的代码不被外界修改。
}
2.enum

这个其实就是帮助我们简化了的一个类,这个类是在我们自己写的自定义的基础进行了,优化,帮助我们用户更好的体验,只需要将,类名改为enum就行

代码演示

enum Seasons02{
    
    
    SPRING("春天","温暖的"),//这句话等同于 public static final Seasons spring=new Seasons("春天","温暖");
    WINTER("冬天","寒冷"),
    private String name;
    private String desc;
    private Seasons02(String name,String desc){
    
    
        this.name=name;
        this.desc=desc;
    }
3.枚举注意事项

1.我们要进行书写的时候,我们的声明必须放在最前面

2.最好采用大写,符合我们的规范。

3.隐藏了public static final关键字

4.默认继承Enum这个类,这个我们会在后面讲一下这个类的方法。

5.如果是无参,我们可以省去后面的括号,比如说SUMMER 我们直接书写就行。

我们使用javap采取反编译,可以查看我们的隐藏内容 大家可以可以清楚的看到我们是隐藏了public static final 我们这里采用反编译

按照正常的流程来说的话,我们是可以直接由源文件到字节码文件 现在我们使用了这个反编译的话,我们可以使得我们由class文件变为源文件,这样可以更加清楚的看到我们的细节。

在这里插入图片描述

4.Enum里面的一些方法
简单概述

简单概述一下这个是我们enum类继承的,可以相当于说是一个父类的存在形式,

我们可以直接使用里面的方法,下面给大家先看一下由哪些

在这里插入图片描述

1.name();
 Seasons02 spring = Seasons02.SPRING;//这边就代表一个对象
 System.out.println(spring.name());//这个就会打印枚举的名字出来

这个是会打印出我们当时定义枚举常量的名称 比如说我们现在就是SPRING

2.ordinal();

这个函数是帮助我们打印出我们当前这个枚举对象位于第几号,

我先给大家看一下我们的定义顺序

在这里插入图片描述

那么按照我们定义的顺序,我们的系统会从0开始给他们进行赋值

System.out.println(spring.ordinal());//输出的是该枚举对象的次序 是第几个的意思 其实就是编号的意思 我们的编号从0开始
3.values();

这个方法就比较的有意思,这个可以返回我们的全部枚举对象,

我们看一下这个函数的使用

Seasons02[] values = Seasons02.values();//也即是说这个方法会返回我们的value值 会帮助我们返回数值出来

我们会使用一个数组来接收他的返回值,他其实是返回这个类中所有进行定义过的数据出来

然后这个方法依次配合增强for循环来使用

增强for循环

我们先看一下这个写法

int[]arr={
    
    1,2,3,4};
for(int i:arr){
    
    //这个代码比较简洁 先说一下这个代码作用是把数组里面的每一个元素输出出来 第一个代表的意思是我们数组里面每一个元素都是int类型 我们给他们取名为i,这个i从arr里面取出来 依次去取直到没有
//输出
}

那么我们来看一下 这个for循环 就是遍历枚举类的 其实只是类型变一下,其他基本和整形数组无关。

  Seasons02[] values = Seasons02.values();//也即是说这个方法会返回我们的value值 会帮助我们返回数值出来
        for(Seasons02 seasons02:values){
    
    //这个就是增强版for循环//这个会将一下
            System.out.println(seasons02);//这里是默认调用我们的tostring方法(我们父类的tosting方法)
        }


4.valueOf();

这个就是另一种创建

//valueOf: 将字符串转化为枚举对象,要求字符串必须为我们定义的才行
Seasons02 seasons02 = Seasons02.valueOf("SPRING");//这样直接创建一个对象,只要你的字符串是我们的枚举类就行
System.out.println(seasons02.name());
5.compareTo();

这个函数会配合我们之前说的ordinal();函数使用,这个就是一个做差的函数

我们先看一下这个如何操作

 System.out.println(Seasons02.SPRING.compareTo(Seasons02.WINTER));//0-3=-3 这个就是我们的输出结果 -3

我们首先写出一个对象调用这个compareTo函数,然后里面的参数我们写上我们要比较的另一个对象。

结果是第一个减第二个

小小练习

描述:

/声明week枚举类,其中包含的是星期一至星期日的定义,Monday 。。。。。
    //要求大家使用values返回所有的枚举数组,遍历

代码演示

大家可以看看会不会写 提示tosting父类的不好用就自己重写,到时候会调用自己重写的

public class EnumExerisice02 {
    
    
    public static void main(String[] args) {
    
    
        Week[] values = Week.values();
        for(Week week:values){
    
    
            System.out.println(week.toString());
        }
    }
}

enum Week{
    
    
    MONDAY("星期一"),
    TUESDAY("星期二"),
    WEDNESDAY("星期三"),
    THURSDAY("星期四"),
    FRIDAY("星期五");

    Week(String name) {
    
    
        this.name = name;
    }

    private String name;

    @Override
    public String toString() {
    
    //就是如果达不到预期的输出效果我们可以考虑一下重写的操作处理
        return "Week{" +
                "name='" + name + '\'' +
                '}';
    }
}
enum注意事项

就是这个类是默认继承Enum的所有,这个类是不能继承其他类了,大家注意一下,因为Java里面不允许多继承,但是还是可以依旧实现接口的,因为我们可以实现多个接口。

结语

今天枚举类的知识点比较少,但是还是比较基础,后续应该也是会使用到的,

我认为的枚举类是一个不允许被改变的 也即是为什么我们要是有public static final的操作

就是一种常量,大家可以这样认为,然后输出的时候大家可以重写tostring,因为name();这个打印的是你的那个自己写的名字,所以说我们还是要重写tostring。

我们大家一起加油!!!大家觉得不错可以点赞支持下。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/SpongeBob_shouse/article/details/122628123
今日推荐