尚硅谷_java零基础教程(常用类——枚举类enum)--学习笔记(代码片段)

JMW1407 JMW1407     2022-12-27     157

关键词:

一、Enum

一.枚举类的使用

  1. 枚举类的理解: 类的对象只有有限个,确定的,我们称此类为枚举类
  2. 当需要定义一组常量时,强烈建议使用枚举类
  3. 如果枚举类中只有一个对象,则可以作为单例模式的实现方式

如何定义枚举类

  • 方式一:jdk5.0之前,自定义枚举类
  • 方式二:jdk5.0,可以使用enum关键字定义枚举类

1、自定义枚举类

属性:private final
对象:private static final

注意事项:

  • a:构造器私有化。
  • b:本类内部,创建一组对象。
  • c:对外暴露对象。(通过 为对象添加 public static final 修饰符)
  • d:可以提供 get 方法,但是不提供 set 方法。防止修改。
package com.atguigu.java;

/**
 * 一、枚举类的使用
 * 1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类
 * 2.当需要定义一组常量时,强烈建议使用枚举类
 * 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
 *
 * 二、如何定义枚举类
 * 方式一:jdk5.0之前,自定义枚举类
 * 方式二:jdk5.0,可以使用enum关键字定义枚举类
 *
 * 三、Enum类中的常用方法:
 *    values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
 *    valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
 *    toString():返回当前枚举类对象常量的名称
 *
 * 四、使用enum关键字定义的枚举类实现接口的情况
 *   情况一:实现接口,在enum类中实现抽象方法
 *   情况二:让枚举类的对象分别实现接口中的抽象方法
 *
 */
public class SeasonTest 

    public static void main(String[] args) 
        Season spring = Season.SPRING;
        System.out.println(spring);

    


//自定义枚举类
class Season
    //1.声明Season对象的属性:private final修饰
    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;
    
    //4.其他诉求1:提供toString()
    @Override
    public String toString() 
        return "Season" +
                "seasonName='" + seasonName + '\\'' +
                ", seasonDesc='" + seasonDesc + '\\'' +
                '';
    


2、使用关键字enum定义枚举类

JDK 1.5 之后,如何使用 关键字 Enum 关键字 定义枚举类:
-1.使用关键字 enum ,替代 class。
-2.public static final AA spring = new AA(“春天”, 10); --简化成-> spring(“春天”, 10);
-3.提供当前 枚举类的对象,多个对象之间用 “,” 隔开,末尾对象 “;” 结束
-4.如果使用 enum,要求将 定义的常量对象,(spring(“春天”, 10);)

package com.atguigu.java;

/**
 * 使用enum关键字定义枚举类
 * 说明:定义的枚举类默认继承于java.lang.Enum类
 *
 */
public class SeasonTest1 
    public static void main(String[] args) 
        Season1 summer = Season1.SUMMER;
        //toString():返回枚举类对象的名称
        System.out.println(summer.toString());
        
        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]);
        

        //valueOf(String objName):返回枚举类中对象名是objName的对象。
        Season1 winter = Season1.valueOf("WINTER");
        //如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
//        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.声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;

    //2.私有化类的构造器,并给对象属性赋值

    private Season1(String seasonName,String seasonDesc)
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    

    //4.其他诉求1:获取枚举类对象的属性
    public String getSeasonName() 
        return seasonName;
    

    public String getSeasonDesc() 
        return seasonDesc;
    
//    //4.其他诉求1:提供toString()
//
//    @Override
//    public String toString() 
//        return "Season1" +
//                "seasonName='" + seasonName + '\\'' +
//                ", seasonDesc='" + seasonDesc + '\\'' +
//                '';
//    


//    @Override
//    public void show() 
//        System.out.println("这是一个季节");
//    

Enum 关键字注意事项:
1、当我们使用 enum 关键字开发一个枚举类时,默认继承 Enum 类,而且是一个 final 类。

  • 单继承,但可实现其他的接口,
  • enum 类,在编译时,编译成为 final java 类

2、传统的 public static final AA spring = new AA("春天", 10),简化成-> spring("春天", 10);,要知道调用哪个构造器。

3、如果使用 无参构造器 创建枚举对象,则实参列表 和 小括号 都可以省略。

4、当有多个 枚举对象时,使用 ,间隔,最后有一个 ;结尾。

enum BB 
    A, B, C;

5、枚举对象,必须放在枚举类的行首。(spring(“春天”, 10);)

3、Enum 类的主要方法

values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。

valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。

toString():返回当前枚举类对象常量的名称

demo1

public class SeasonTest1 
    public static void main(String[] args) 
        Season1 summer=Season1.SUMMER;
        //toString():返回枚举类对象的名称
        System.out.println(summer.toString());
        //不重写tostring方法,返回对象名称:SUMMER
        System.out.println(Season1.class.getSuperclass());
        //class java.lang.Enum
        System.out.println("****************");
        //values():返回所有的枚举类对象构成的数组
        Season1[] values=Season1.values();
        for (int i = 0; i <values.length ; i++) 
            System.out.println(values[i]);
        
//SPRING
//SUMMER
//AUTUMN
//WINTER
        System.out.println("****************");
        Thread.State[] values1=Thread.State.values();
        for (int i = 0; i <values1.length ; i++) 
            System.out.println(values1[i]);
        
// NEW
//RUNNABLE
//BLOCKED
//WAITING
//TIMED_WAITING
//TERMINATED
        System.out.println("****************");
        //valueOf(String objName):返回枚举类中对象名是objName的对象。
        Season1 winter=Season1.valueOf("WINTER");
        //如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
        //Season1 winter=Season1.valueOf("WINTER1");
        System.out.println(winter);//WINTER

    



demo2

    public static void main(String[] args) 
 
        // 返回所有枚举类对象 的数组。例:(查看线程的 所有状态)
        Thread.State[] values = Thread.State.values();
        // 输出:[NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED]
        System.out.println(Arrays.toString(values));
 
        // 根据 传入 obj 名字,返回枚举类中 名字 为 obj 的对象(找 指定名 枚举的对象)
        // 如果没有找到,则抛出异常
        Thread.State waiting = Thread.State.valueOf("WAITING");
        System.out.println(waiting); //WAITING
 
 
        //返回 当前枚举类对象 常量的名称
        String s1 = Thread.State.WAITING.toString();
        System.out.println(s1);  //WAITING
    


4、实现接口的枚举类

情况一:实现接口,在enum类中实现抽象方法

情况二:让枚举类的对象分别实现接口中的抽象方法

情况一

public class SeasonTest1 
    public static void main(String[] args) 
        Season1 summer=Season1.SUMMER;
        //toString():返回枚举类对象的名称
        System.out.println(summer.toString());
        //不重写tostring方法,返回对象名称:SUMMER
        System.out.println(Season1.class.getSuperclass());
        //class java.lang.Enum
        System.out.println("****************");
        //values():返回所有的枚举类对象构成的数组
        Season1[] values=Season1.values();
        for (int i = 0; i <values.length ; i++) 
            System.out.println(values[i]);
            values[i].show();
        
//        SPRING
//        这是一个季节
//        SUMMER
//        这是一个季节
//        AUTUMN
//        这是一个季节
//        WINTER
//        这是一个季节
        System.out.println("****************");
        //valueOf(String objName):返回枚举类中对象名是objName的对象。
        Season1 winter=Season1.valueOf("WINTER");
        //如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
        //Season1 winter=Season1.valueOf("WINTER1");
        System.out.println(winter);//WINTER
        winter.show();//这是一个季节

    

interface Info
    void show();

enum Season1 implements Info
    //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
    SPRING("春天","春暖花开"),
    SUMMER("夏天","夏日炎炎"),
    AUTUMN("秋天","秋高气爽"),
    WINTER("冬天","冰天雪地");
    //2.声明Season对象的属性:private 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;
    

    @Override
    public void show() 
        System.out.println("这是一个季节");
    

情况二

public class SeasonTest1 
    public static void main(String[] args) 
        Season1 summer=Season1.SUMMER;
        //toString():返回枚举类对象的名称
        System.out.println(summer.toString());
        //不重写tostring方法,返回对象名称:SUMMER
        System.out.println(Season1.class.getSuperclass());
        //class java.lang.Enum
        System.out.println("****************");
        //values():返回所有的枚举类对象构成的数组
        Season1[] values=Season1.values();
        for (int i = 0; i <values.length ; i++) 
            System.out.println(values[i]);
            values[i].show();
        
//SPRING
//这是春天
//SUMMER
//这是夏天
//AUTUMN
//这是秋天
//WINTER
//这是冬天
        System.out.println("****************");
        //valueOf(String objName):返回枚举类中对象名是objName的对象。
        Season1 winter=Season1.valueOf("WINTER");
        //如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
        //Season1 winter=Season1.valueOf("WINTER1");
        System.out.println(winter);//WINTER
        winter.show();//这是冬天

    

interface Info
    void show();

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.声明Season对象的属性:private 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;
    

5、枚举使用场景举例

Java 枚举类的基本使用

尚硅谷_java零基础教程(常用类——string)--学习笔记(代码片段)

JavaString一、String1、String的特性2、String对象的创建3、字符串对象是如何存储的?4、字符串拼接细节5、String使用陷阱6、String的常用方法7、String与基本包装类的转换8、StringBuffer和StringBuilder的介绍一、String1、String的特性String... 查看详情

尚硅谷_java零基础教程(集合collection:list,set;map)--学习笔记(代码片段)

Java集合一、Java集合框架概述1.理解2.集合框架涉及到的API二、Collection接口中的方法三、Iterator迭代器接口1.理解2.主要方法3.foreach四、Collection子接口一:List接口1.概述2.List接口的常用实现类3.接口方法五、Collection子接口二ÿ... 查看详情

尚硅谷_java零基础教程(异常处理)--学习笔记(代码片段)

Java异常处理一、异常概述与异常体系结构1.定义2.分类3.异常体系结构4.常见异常实例二、异常处理机制try-catch-finally1.理解和格式2.举例throws+异常类型1.理解2.格式3.重写方法声明抛出异常的原则开发中如何选择这两种处理机制... 查看详情

尚硅谷_java零基础教程(多线程)--学习笔记(代码片段)

Java多线程一、基本概念1、程序、进程、线程2、单核CPU和多核CPU、并行与并发3、使用多线程的优点二、线程的创建和使用1、API中创建线程的两种方式1.1、方式一:继承Thread类1.2、方式二:实现Runnable接口1.3、Thread类的调... 查看详情

尚硅谷_java零基础教程(泛型generics)--学习笔记(代码片段)

Java泛型一、为什么要有泛型1、为什么要有泛型(Generic)2、泛型的概念二、在集合中使用泛型三、自定义泛型结构1、自定义泛型结构1.1、泛型类、泛型接口1.2、泛型方法2、自定义泛型demo四、泛型在继承上的体现五、通配符的使用... 查看详情

java学习路线

...学会Linux(27h01m153集)3.2Git与MySQL廖雪峰_Git教程尚硅谷_Git教程(4h52m45集)廖雪峰_SQL教程老杜_MySQL教程(17h41m151集)3.4开发框架尚硅谷_JavaWeb教程(45h54m325集)尚硅谷_Spring5教程(15h19m62集)... 查看详情

java枚举类

摘抄在b站尚硅谷JAVA教程  packagecom.LearnJava.enume;enumSeason{SPRING("春天","春暖花开"),SUMMER("夏天","夏日炎炎"),AUTUMO("秋天","秋高气爽"),WINTTER("冬天","白雪皑皑");privatefinalStringseasonName;privatefinalStringseasonDe 查看详情

java学习路线

...学会Linux(27h01m153集)3.2Git与MySQL廖雪峰Git教程尚硅谷_Git教程(4h52m45集)廖雪峰SQL教程老杜_MySQL教程(17h41m151集)3.4开发框架尚硅谷_JavaWeb教程(45h54m325集)尚硅谷_Spring5教程(15h19m62集)尚... 查看详情

尚硅谷大数据hadoop教程-笔记01入门(代码片段)

视频地址:尚硅谷大数据Hadoop教程(Hadoop3.x安装搭建到集群调优)尚硅谷大数据Hadoop教程-笔记01【入门】尚硅谷大数据Hadoop教程-笔记02【HDFS】尚硅谷大数据Hadoop教程-笔记03【MapReduce】尚硅谷大数据Hadoop教程-笔记04【Ya... 查看详情

尚硅谷大数据hadoop教程-笔记02hdfs(代码片段)

视频地址:尚硅谷大数据Hadoop教程(Hadoop3.x安装搭建到集群调优)尚硅谷大数据Hadoop教程-笔记01【入门】尚硅谷大数据Hadoop教程-笔记02【HDFS】尚硅谷大数据Hadoop教程-笔记03【MapReduce】尚硅谷大数据Hadoop教程-笔记04【Ya... 查看详情

尚硅谷大数据技术hadoop教程-笔记06hadoop-生产调优手册(代码片段)

视频地址:尚硅谷大数据Hadoop教程(Hadoop3.x安装搭建到集群调优)尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】尚硅谷大数据技术Hadoop教程-笔记02【Hadoop-入门】尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】尚硅... 查看详情

java零基础入门14:java枚举类(代码片段)

🍅周周有福利,周周有惊喜哪吒社区-风火轮计划🍅Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)🍅Java经典面试题大全:10万字208道Java经典面试题总结(附答案)&#... 查看详情

项目一众筹网02_1_此次项目的重要性环境搭建-创建常量类管理员登录功能开始表单都是以post方式去提交我们说的控制器就是handlerbase标签的位置实现点击浏览器的上一步

...筹网02_1文章目录系列文章目录00-此次项目的重要性01-尚硅谷-尚筹网-环境搭建-创建常量类02-尚硅谷-尚筹网-环境搭建-创建管理员登录页面03-尚硅谷-尚筹网-环境搭建-跳转到登录页面(纯页面跳转,无参数的页面跳转)... 查看详情

java入门零基础小白教程day07_继承&抽象(代码片段)

day07-JAVAOOP课程目标1.【理解】什么是继承2.【掌握】继承的使用3.【理解】继承中的成员的特点4.【理解】super和this的作用5.【理解】什么是抽象6.【掌握】抽象的使用一.继承1.1继承概述多个类中存在相同属性和行为时,将这... 查看详情

java入门零基础小白教程day07_继承&抽象(代码片段)

day07-JAVAOOP课程目标1.【理解】什么是继承2.【掌握】继承的使用3.【理解】继承中的成员的特点4.【理解】super和this的作用5.【理解】什么是抽象6.【掌握】抽象的使用一.继承1.1继承概述多个类中存在相同属性和行为时,将这... 查看详情

尚硅谷_每日一考_336+364(代码片段)

3361.static修饰的属性,相较于实例变量,有哪些特别之处?1)随着类的加载而加载。(类加载一次后会缓存起来,很长时间内可供我们使用)2)跟对象的关系:早于对象的创建,只要权限允许,可通过“对象.static属性”的方式进行调... 查看详情

尚硅谷视频学校教程1(代码片段)

1.+尚硅谷_佟刚_Ajax_概述.wmv 2.+尚硅谷_佟刚_Ajax_使用+XMLHttpRequest+实现+Ajax.wmvXMLHttpRequest对象提供了对HTTP协议的完全的访问,包括做出POST和HEAD请求以及普通的GET请求的能力。XMLHttpRequest可以同步或异步地返回Web服务器的响应,... 查看详情

尚硅谷_每日一考_239+282+309(代码片段)

2391.构造器的作用是什么?使用中有哪些注意点创建对象、初始化对象结构构造方法名与类名相同和方法并列的结构类一定有构造器不能有返回值也不能加void构造方法只能通过new运算符调用Boxbox=newBox();只有当需要进行一些特定... 查看详情