java基础篇2之枚举
2024-09-29 06:58:25
1、为什么要有枚举
问题:要定义星期几或者性别的变量,该怎么定义?
假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0;
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错,
枚举可以让编译器在编译时就可以控制源程序中填写的非法制,普通变量的方式在开发阶段无法实现这一目标
2、用普通类如何实现枚举功能,定义一个WeekDay的类来模拟枚举功能
- 私有的构造方法
- 每个元素分别用一个公有的静态成员变量表示
- 可以有弱冠公有方法或者抽象方法,例如,要提供nextDay方法必须使抽象的
采用抽象方法定义nextDay就将大量的if else语句庄毅成一个个独立的类。
public class WeekDay{
private WeekDay(){}
public final static WeekDay SUN = new WeekDay(){
@Override
public WeekDay nextDay(){
return MON;
}
}; public final static WeekDay MON = new WeekDay(){
@Override
public WeekDay nextDay(){
return SUN;
}
}; public abstract WeekDay nextDay(); /*public WeekDay nextDay(){
if(this == SUN){
return MON;
}else{
return SUN;
}
}*/ public String toString(){
return this ==SUN?"SUN":"MON";
}
} public class EnumTest{
WeekDay weekday = WeekDay.SUN;
System.out.println(weekday.toString());
System.out.println(weekday.nextDay());
}
3、枚举的基本应用
扩展:枚举类的values,valueOf,name,toString,ordinal方法
总结:枚举是一种特殊的类,其中每个元素都是该类的一个实例对象,例如 调用WeekDay.SUN.getClass().getName
public class EnumTest{ public static void main(String[] args){
WeekDay weekday2 = WeekDay.FRI;
System.out.println(weekday2);
WeekDay.valueOf("SUN").toString();
WeekDay.values().length;
} public enum WeekDay{
SUN,MON,TUE,WED,THI,FRI,SAT
}
}
4、带有构造方法的枚举
public class EnumTest{
public static void main(String[] args){
WeekDay weekday2 = WeekDay.FRI;
System.out.println(weekday2);
WeekDay.valueOf("SUN").toString();
WeekDay.values().length;
} public enum WeekDay{
SUN(1),MON,TUE,WED,THI,FRI,SAT;
//放在参数列表之后
private WeekDay(){...};
private WeekDay(int day){...};
}
}
5、带有抽象方法的枚举
//子类实现父类的抽象方法
public enum TrafficLamp(){
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time = time;
}
}
枚举只有一个成员时,就可以作为一个单例的实现方式
最新文章
- HSSFWorkBooK用法
- ApacheServer-----关于443端口被占用的解决方法
- Visual Studio 启动修复命令
- BootStrap图标
- WBS说明
- redis 验证消息队列也是写磁盘的
- symfony2-创建提交表单生成数据过程
- 定位--position属性
- 一些JQuery使用技巧
- loadrunner下载资源时步骤下载超时 (120 seconds) 已过期
- shell编程练习-打印九九乘法表(附:awk编程)
- 第二部分之RDB持久化(第十章)
- Kubernetes之POD
- halcon应用案例探究
- SNF快速开发平台MVC-EasyUI3.9之-WebApi身份验证问题解决方案
- android检测手机是否安装某个app
- 【LeetCode刷题】SQL-Second Highest Salary 及扩展以及Oracle中的用法
- liunx trac 插件使用之DateFieldPlugin
- JVM内部细节之三:字符串及字符串常量池
- ubuntu/centos网络配置
热门文章
- CSU-1980 不堪重负的树
- importlib模块和split的结合使用
- 理解机器为什么可以学习(四)---VC Dimension
- 链表的问题,ListNode问题
- Java精确测量代码运行时间 代码执行时间 纳秒 nanoTime
- webform登陆界面样式丢失
- [Cocos2dx Bug] [win32] Function CCFileUtils::fullPathFromRelativeFile forget consider the path separated by '\\'
- 【bzoj4386】[POI2015]Wycieczki 矩阵乘法
- linux下头文件
- inux监控平台搭建-监控项