java什么是类枚举类_Java 枚举类 详解
1、枚举是什么?
Java中的枚举其实是一种语法糖,在 JDK 1.5之后出现,用来表示固定且有限个的对象。比如一个季节类有春、夏、秋、冬四个对象;一个星期有星期一到星期日七个对象。这些明显都是固定的,且有限个。
2、枚举类和普通类的区别
①、使用 enum 定义的枚举类默认继承 java.lang.Enum 类,即枚举类是不能再继承别的类了。而普通类的一般父类默认是 Object
②、枚举类的构造器只能使用 private 定义,而普通类的还可以用 public 修饰
③、枚举类的所有实例必须在枚举类中显示列出(,分隔 ;结尾),列出的实例系统会默认自动添加 public static final 修饰
④、所有的枚举类都提供了一个 values() 方法,可以用来遍历枚举值
3、怎么用枚举?
首先我们看,以一个季节类有春、夏、秋、冬四个对象为例:在 JDK 1.5以前是怎么表示的呢?
创建一个 季节类:
public class Season {
//属性不能修改,用 final 修饰
private final String name;
private final String desc;
//因为枚举类的对象是有限的,即我们不能再外面 new Season(),所以构造器私有化
private Season(String name,String desc) {
this.name = name;
this.desc = desc;
}
//不能再外面new Season(),那么内部必须创建出对象
//外界直接通过类名来访问,用 static 修饰
//外界不能修改,用 final 修饰
public static final Season SPRING = new Season("春天", "春暖花开");
public static final Season SUMMER = new Season("夏天", "炎炎盛夏");
public static final Season FALL = new Season("秋天", "秋高气爽");
public static final Season WINTER = new Season("冬天", "大雪纷飞");
@Override
public String toString() {
return "Season [name=" + name + ", desc=" + desc + "]";
}
}
测试:
public class SeasonTest {
public static void main(String[] args) {
System.out.println(Season.SPRING);
System.out.println(Season.SUMMER);
System.out.println(Season.FALL);
System.out.println(Season.WINTER);
}
}
结果为:
Season [name=春天, desc=春暖花开]
Season [name=夏天, desc=炎炎盛夏]
Season [name=秋天, desc=秋高气爽]
Season [name=冬天, desc=大雪纷飞]
使用 Enum 来表示季节类:
public enum SeasonEnum {
//必须在第一行写出有哪些枚举值
SPRING("春天", "春暖花开"),
SUMMER("夏天", "炎炎盛夏"),
FALL("秋天", "秋高气爽"),
WINTER("冬天", "大雪纷飞");
private final String name;
private final String desc;
private SeasonEnum(String name, String desc) {
this.name = name;
this.desc = desc;
}
}
测试:
public static void main(String[] args) {
System.out.println(SeasonEnum.SPRING); //SPRING
//用 values() 来获取所有的枚举值
for(SeasonEnum s : SeasonEnum.values()){
System.out.println(s);
}
}
枚举类还能实现接口:
第一步:定义一个接口,方法是返回季节的月份
public interface SeasonEnumImpl {
//用来返回季节的月份
String getMonth();
}
第二步:季节类实现接口,并实现接口中的方法
public enum SeasonEnum implements SeasonEnumImpl{
//必须在第一行写出有哪些枚举值
SPRING("春天", "春暖花开"){
@Override
public String getMonth() {
return "12-2";
}
},
SUMMER("夏天", "炎炎盛夏"){
@Override
public String getMonth() {
return "3-5";
}
},
FALL("秋天", "秋高气爽"){
@Override
public String getMonth() {
return "6-8";
}
},
WINTER("冬天", "大雪纷飞"){
@Override
public String getMonth() {
return "9-11";
}
};
private final String name;
private final String desc;
private SeasonEnum(String name, String desc) {
this.name = name;
this.desc = desc;
}
}
测试:
public static void main(String[] args) {
System.out.println(SeasonEnum.SPRING); //SPRING
//用 values() 来获取所有的枚举值
for(SeasonEnum s : SeasonEnum.values()){
System.out.println(s.getMonth());
}
}
结果为:
SPRING
12-2
3-5
6-8
9-11
注意:
①、枚举类可以作为 switch--case 的表达式(JDK 1.5以后)
②、如果枚举类的对象只有一个,那么可以作为单例模式的实现
java什么是类枚举类_Java 枚举类 详解相关推荐
- java嵌套类型 无法隐藏外层类型_java内部类深入详解 内部类的分类 特点 定义方式 使用...
java内部类 内部类的分类 特点 定义方式 使用 外部类调用内部类 多层嵌套内部类 内部类访问外部类属性 接口中的内部类 内部类的继承 内部类的覆盖 局部内部类 成员内部类 静态内部 ...
- java里加载是什么意思_Java 类加载机制详解
什么是 Java 类加载机制? Java 虚拟机一般使用 Java 类的流程为:首先将开发者编写的 Java 源代码(.java文件)编译成 Java 字节码(.class文件),然后类加载器会读取这 ...
- java 找不到环境变量_java环境变量详解---找不到或无法加载主类
默认安装在C:\ProgramFiles\Java\jdk1.7.0目录下 环境变量配置为 PATH=.;%JAVA_HOME%\bin CLASSPATH=.;%JAVA_HOME%\lib\dt. ...
- java怎么对作者名排序_Java 对象排序详解
很难想象有Java开发人员不曾使用过Collection框架.在Collection框架中,主要使用的类是来自List接口中的ArrayList,以及来自Set接口的HashSet.TreeSet,我 ...
- java 枚举类型enum的用法详解
Java Enum原理 public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要 ...
- JAVA中的类和对象之this的详解
系列文章目录 第一章 JAVA中的类和对象之this的详解 目录 前言 一.为什么要有this引用 二.this的三种用法 1.this.成员变量 2.this.成员方法 3.this()调用其它的构 ...
- python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...
- moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解
☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...
- USB CCID类协议中的APDU命令详解
出处:http://blog.chinaunix.net/uid-29124653-id-4573075.html 原文地址:USB CCID类协议中的APDU命令详解 作者:jeffasdasd 最 ...
- decimal类型对象里面定义什么类型_MySQL中Decimal类型和Float Double的区别(详解)
MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...
最新文章
- 030_vue命名路由
- blockingdeque java_Java BlockingDeque解决生产者与消费者问题
- 移动端双指缩放、旋转
- 做人:失信是最大的破产!
- Objectc 基础类型
- java 路径通配符_java实现路径通配符*,**,?
- 应物联网要求而生 美国团队研发出零功耗红外探测器
- 消防信号总线原理_AFPM100/B消防设备电源监控系统在百色市人民医院消防设备电源监控系统的应用-安科瑞 华梅超...
- jmap查看java进程占用的数据库连接数
- 在win10下安装Linux双系统
- 屏幕共享技术及相关软件使用测评
- PDCA过程模式在信息安全管理体系的应用
- hprose-php教程,Swoole学习笔记(六):Hprose入门
- 4个很 丝滑 的 Veu 路由过渡动效
- java robust_Java的鲁棒性(Robust)
- 连接计算机和网络传输介质的接口,最常用的网络传输介质和连接设备
- 从五个方面来讲一下平面设计颜色搭配知识——黎乙丙
- 怎样隐藏Word内容?这样操作只需30秒!
- 渔翁、魔鬼和四色鱼的故事
- ELK环境部署(一)--基础环境配置
热门文章
- ERP的主要功能模块简介
- 小说app开发功能及盈利方式
- 点计算机管理没反应,电脑任务栏没反应怎么办 任务栏没反应解决方法
- BZOJ 3669 luogu 2387 魔法森林
- NLP中文句子类型判别和分类实现
- python安装包时报错Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools
- 汽车之家网站为例-爬虫的编写,爬取图片
- STM32单线串口对总线舵机的控制
- 视频教程-CoreIDraw 2019零基础到精通-CorelDraw
- Android10 mockLocation 模拟定位