1.概念
枚举是Java的一种特殊类型,是特殊类是把class变为了enum
其作用:是为了做信息的标志和信息的分类,
通俗:相当于常量,用来做标志的,但是却比常量优雅,它是限制你一些代码乱来
2.定义格式
修饰符 enum 枚举名称{
第一行都是罗列枚举类实例的名称
}
3.利用反编译了解枚举
源码
public enum Season {
//第一行都是罗列枚举类实例的名称,也就是对象
SPARK,HADOOP,HIVE,FLUME,KAFKA;
}
随便建一个java文件夹将代码复制到文本文件,改为Season.java,打开cmd用javac,javap进行编译和反编译了解枚举
由上可以得到枚举的特征:
枚举类都是继承了枚举类型:java.lang.Enum
枚举都是最终类,不可用与继承(因为用了final修饰)
构造器都是私有的,枚举对外不能创建对象(上面没有显示,因为在底层)
枚举的第一行都是默认列举枚举对象的名称(源码可看)
枚举类相当于多例模式
4.枚举的使用场景
可用于做信息的标志和分类
优点:代码可读性好,入参约束严谨,是最好的信息分类技术
直接代码展示:
首先利用常量来作为标志
public class Text {
//定义常量
public static final int HADOOP = 1;
public static final int SPARK = 2;
public static final int HIVE = 3;
public static final int FLINE = 4;
public static void print_text(int flag){
switch (flag){
case HADOOP:
System.out.println("输出hadoop");
break;
case SPARK:
System.out.println("输出spark");
break;
case HIVE:
System.out.println("输出hive");
break;
case FLINE:
System.out.println("输出flume");
break;
}
}
public static void main(String[] args) {
//调用方法的时候我既可以输入常量名
print_text(HADOOP);
//还可以输入数据
print_text(2);
//还可以输入很多不符合代码的数据,但不报错
print_text(1111111);
//这就很尴尬
}
}
但是使用了枚举
枚举类
package com.hu.d5_enum;
/**
* 枚举类
*/
public enum Season {
//第一行都是罗列枚举类实例的名称
SPARK,HADOOP,HIVE,FLINE;
}
测试类
public class Text2 {
//使用枚举作为形参
public static void print_text(Season s){
//swith会自动识别枚举
switch (s){
case HADOOP:
System.out.println("输出hadoop");
break;
case SPARK:
System.out.println("输出spark");
break;
case HIVE:
System.out.println("输出hive");
break;
case FLINE:
System.out.println("输出flume");
break;
}
}
public static void main(String[] args) {
//调用方法的时候智能传入枚举类型,
//值得注意的是,传入参数的时候要使用 枚举.实例
print_text(Season.HADOOP);
//输入数据会报错
print_text(2);
}
}
效果图: