首页 > 编程语言 >36_Java中的枚举

36_Java中的枚举

时间:2023-01-07 10:35:56浏览次数:36  
标签:Java name 36 System 枚举 println public out

Java中的枚举

枚举概述

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

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

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

自己实现枚举

3版自定义枚举类(无参构造、带参构造、抽象方法(同时此类为抽象类))

案例1: 无参构造

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

案例3: 抽象方法

参考代码:

package com.itheima_01;
/*
    使用无参构造方法
 */
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.itheima_01;
/*
    使用带参构造方法
 */
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(){}   //防止外界创建对象

    private Light2(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    @Override
    public String toString() {
        return "Light2{" +
                "name='" + name + '\'' +
                '}';
    }
}
package com.itheima_01;
/*
    使用抽象类,来自定义枚举类
 */
public abstract class Light3 {
    //创建三个实例、与单例设计模式不同
    public static final Light3 RED = new Light3("红"){   //抽象类无法发直接实例化对象,使用匿名内部类的方式进行创建
        @Override
        public void show(){
            System.out.println("红");
        }
    };
    public static final Light3 GREEN = new Light3("绿"){
        @Override
        public void show(){
            System.out.println("绿");
        }
    };
    public static final Light3 YELLOW = new Light3("黄"){
        @Override
        public void show(){
            System.out.println("黄");
        }
    };

    private String name;

//    private Light2(){}   //防止外界创建对象

    private Light3(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    @Override
    public String toString() {
        return "Light3{" +
                "name='" + name + '\'' +
                '}';
    }

    //添加了一个抽象方法,所以变成了抽象类
    public abstract void show();
}
package com.itheima_01;

public class LightDemo {
    public static void main(String[] args) {
        Light r = Light.RED;
        System.out.println(r);  //com.itheima_01.Light@5594a1b5

        System.out.println("----------");

        Light2 r2 = Light2.RED;
        System.out.println(r2); //Light2{name='红'}
        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();
    }
}

从以上代码发现自己定义一个枚举类,比较麻烦,所以,Java就提供了枚举类供我们使用

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

​ public enum 枚举类名{

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

​ }

参考代码:

package com.itheima_02;
/*
    使用无参构造
 */
public enum Light {
    RED, GREEN, YELLOW;
}

/*
    //原码解析:使用XJad反编译Class文件获得Light类的内容
    public final class Light extends Enum{
        public static final Light RED;
	    public static final Light GREEN;
	    public static final Light YELLOW;

	    static{
		    RED = new Light("RED", 0);
		    GREEN = new Light("GREEN", 1);
		    YELLOW = new Light("YELLOW", 2);
	    }

	    private Light(String s, int i)
	    {
		    super(s, i);
	    }
    }

    public abstract class Enum{
            private final String name;

            protected Enum(String name, int ordinal) {
                this.name = name;
                this.ordinal = ordinal;
            }

            public String toString() {
                return name;
            }
    }
 */
package com.itheima_02;
/*
    使用带参构造
 */
public enum Light2 {
//    RED, GREEN, YELLOW;   //相当于调用无参构造
    RED("红"), GREEN("绿"), YELLOW("黄");

    private String name;

    private Light2(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    @Override
    public String toString() {
        return "Light2{" +
                "name='" + name + '\'' +
                '}';
    }
}
package com.itheima_02;
/*
    使用抽象方法
 */
public enum Light3 {
//    RED, GREEN, YELLOW;   //相当于调用无参构造
    RED("红"){
        @Override
        public void show(){
            System.out.println("红");
        }
    }, GREEN("绿"){
        @Override
        public void show(){
            System.out.println("绿");
        }
    }, YELLOW("黄"){
        @Override
        public void show(){
            System.out.println("黄");
        }
    };

    private String name;

    private Light3(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    @Override
    public String toString() {
        return "Light3{" +
                "name='" + name + '\'' +
                '}';
    }

    public abstract void show();
}
package com.itheima_02;

public class LightDemo {
    public static void main(String[] args){
        Light r = Light.RED;
        System.out.println(r);  //RED

        System.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();
    }
}

枚举的注意事项

定义枚举类要用关键字enum

所有枚举类都是Enum的子类

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

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

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

枚举在switch语句中使用

Light light = Light.RED;
        switch(light){
            case RED:
                System.out.println("红");
                break;

            case GREEN:
                System.out.println("绿");
                break;

            case YELLOW:
                System.out.println("黄");
                break;

                //没有在枚举项中出现,无法识别
            /*case BLUE:
                System.out.println("蓝");
                break;*/
        }

标签:Java,name,36,System,枚举,println,public,out
From: https://www.cnblogs.com/fragmentary/p/17032192.html

相关文章

  • 35_Java中的设计模式简单了解
    Java中的设计模式注意:只是简单了解设计模式(Designpattern)​ 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用......
  • 37_Java中的浮点数精确运算
    java中的BigDemcimal用于小数的精确运算构造方法:​ BigDecimal(Stringval)四则运算:​ add(BigDecimalb):加法​ subtract(BigDecimalb):减法​ multiply......
  • 38_Java中的注解
    java中的注解1、注解概述@Ovrride:用来修饰方法,表示该方法是重写父类的方法,如果不是,就会报错注解(Annotation):也叫元数据,一种代码级别的说明,它是JDK1.5及以后版本引......
  • 39_Java中的单元测试
    单元测试单元测试概述:​ 在程序中,一个单元可以时一个完整的模块,但它通常是一个单独的方法或者程序​ 在面向对象的编程中,一个单元通常是整个界面,例如类,但可能是......
  • 34_Java8 日期API
    Java8日期APIDate如果不格式化;输出的日期可读性差;而Java8的时间类直接输出可读性好Date存在线程安全问题;而Java8的时间类都是线程安全的JDK8新增日期类:​ Loc......
  • JAVA的方法
    什么是方法方法是语句的集合,他们在一起执行一个功能。方法是解决问题的步骤的有序组合。方法包含于类或对象中。方法在程序中被创建,在其他地方被引用。方法的组......
  • 用Java方法和循坏的计算器
    importjava.util.Scanner;publicclassPractise{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);//创建一个对象用......
  • 认识 Java 中的 StringBuilder 类
    Stringstr="hello"; System.out.println(str); System.out.println(str+"world"); }输出的结果是:hellohelloworld从运行结果中我们可以看到,程序运行时会额外创建......
  • java基于ssm的图书管理系统图书借阅管理网站图书管理网站源码
    简介本项目是图书借阅管理系统,主要实现了对图书的管理和借阅。演示视频https://www.bilibili.com/video/BV14p4y1H7GQ/?share_source=copy_web&vd_source=ed0f04fbb713......
  • java基于ssm的个人博客系统个人博客网站个人博客项目源码
    简介Javassm开发的个人博客系统,可以发布博客,照片,站长留言。演示视频https://www.bilibili.com/video/BV1sf4y1y7Ne/?share_source=copy_web&vd_source=ed0f04fbb713154......