java 枚举报错_Java枚举的应用
为什么要用枚举?
比如要定义星期几,有的人用1-7,而有的用0-6,这就很容易导致问题的出现
枚举就是要让某个类型的变量的取值只能为若干个值中的一个,否则,编译器报错,枚举可以让编译器在编译时期就可以检测出源程序填写的非法值,而用普通变量模拟枚举的方法无法实现这一目标
用普通类来模拟实现枚举功能:
1.将构造方法私有
2.每个元素分别有一个公用的静态成员变量
3.可以有若干个公有方法或抽象方法,而采用抽象方法定义的nextDay就将大量的if..else变换成一个一个独立的类
class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay();
public final static WeekDay MON = new WeekDay();
public WeekDay nextDay(){
return (this==SUN)?MON:SUN;
}
public String toString(){
return (this==MON)?"MON":"SUN";
}
}
public class EnumDemo {
public static void main(String[] args) {
System.out.println(WeekDay.SUN.nextDay());
}
}
也可以是将方法定义为抽象的,每个固定的WeekDay对象的子类去复写的
在一个类中编写完各个枚举类和测试调用类,那么就可以将枚举类定义成调用类的内部类
public abstract class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay(){
public WeekDay nextDay() {
return MON;
};
};
public final static WeekDay MON = new WeekDay(){//匿名内部类,子类来写nextDay方法
public WeekDay nextDay() {
return SUN;
};
};
public abstract WeekDay nextDay();
public String toString(){
return (this==MON)?"MON":"SUN";
}
}
顺便复习一下:
class Demo{}
new Demo(){} ->new 一个Demo的子类,{}中是子类的代码,这个表示,子类调用的是父类的无参的构造方法
new Demo(20){} ->new子类的实例对象,调用父类的有参的构造方法
枚举的基本应用:
定义一个Week的枚举
枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以用WeekDay.SUN.getClass().getName();
public class EnumDemo {
public static void main(String[] args) {
System.out.println(WeekDay.SUN.nextDay());
Week w = Week.SUN;
System.out.println(w);
System.out.println(w.name());
System.out.println(w.ordinal());//排第几
System.out.println(w.getClass());
System.out.println(Week.valueOf("SUN"));//将字符串变换成对应的枚举元素
System.out.println(Week.values().length);//将枚举中的每一个元素,都装进数组
}
public enum Week{//定义一个枚举类
SUN,MON;
}
}
实现带有构造方法的枚举
public enum Week{//定义一个枚举类
SUN,MON;//所有的东西都必须放在枚举值列表下面
private Week(){System.out.println("WU");};//枚举类的构造方法必须是private
private Week(int i){System.out.println("I");};
}
按照上面main执行,执行的都是无参的Week构造函数,因为只要用到Week枚举类,它里面的静态成员变量都会被初始化
如果非要用有参的那个构造函数那么,枚举值就必须指定参数
public enum Week{
SUN(5),MON();
private Week(){System.out.println("WU");};
private Week(int i){System.out.println("I");};
}
带有抽象方法的枚举:
public class EnumDemo {
public static void main(String[] args) {
System.out.println(Month.March.nextMonth());
}
public enum Month{
//January,February,March,April;
January(31){
public Month nextMonth() { return February;}
},February(28) {
public Month nextMonth() {return March; }
},March(30) {
public Month nextMonth() {return April; }
},April(31) {
public Month nextMonth() { return January; }
};
public abstract Month nextMonth();//抽象方法,返回类型是自己类型
private int time ;
private Month(int time){ this.time = time ;}
public String toString(){
if(this==January)return "January";
else if(this==February) return "February";
else if(this==March) return "March";
else return "April";
}
}
} 当枚举只有一个成员时,就可以作为一种单例的实现方式。
java 枚举报错_Java枚举的应用相关推荐
- java 枚举报错_java 枚举
枚举: 就是要让某个类型的变量的取值只能为若干个固定值的一个,否则,编译器就会报错.枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标. 用普通类实现枚举 ...
- java枚举报错_java枚举类
枚举就是要让某个类型的变量取值只能为若干个固定值中的一个,否则,编译器就会报错. 枚举可以让编译器在编译是就可以控制源程序中填写的非法值,普通变量的方式在开发阶段 例如,你定义路路灯这个对象,就只希望 ...
- java test报错_Java 单元测试报错
«Java 单元测试报错:Test class should have exactly one public zero-argument constructor» public class Test{ ...
- 电脑配置java编译报错_java 编译错误
我有两个简单的代码,ClickMe.java代码为:importjava.applet.Applet;importjava.awt.*;importjava.awt.event.*;publiccla ...
- java override报错_java @override 报错处理
转载自:http://blog.sina.com.cn/s/blog_9c7605530101kl9r.html 一.java @override 报错处理 做项目的时候,同事那边电脑上编译通过的ja ...
- java package报错_Java从入门到精通(一)
标识符 Java语言中,为各种变量.方法和类等起的名字称为标识符 Java标识符的命名规则: 应以字母.下划线.美元符开头 后跟字母.下划线.美元符或数字 Java标识符大小写敏感,长度无限制 jav ...
- java package报错_Java基础知识总结 - 超详细篇(上)
1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre. 2,JRE:Java Runtime Environment,java程序的运行环境,ja ...
- java sendredirect报错_java 中sendredirect()和forward()方法的区别
HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重定向,forw ...
- java resourse 报错_java.nio.file.InvalidPathException: Illegal char :
一.报错: java.nio.file.InvalidPathException: Illegal char <:>at sun.nio.fs.WindowsPathParser.norm ...
最新文章
- requests+正则爬取猫眼电影前100
- 使用 nginx 同域名下部署多个 vue 项目,并使用反向代理
- Py之prettytable:prettytable的简介、安装、使用方法之详细攻略
- ODBC驱动,没装怎么办
- php中可以实现多态的是继承,PHP设计模式通过继承实现多态
- linux下python版本升级,linux下升级python版本
- 关于request.getRequestDispatcher()的两个方法
- php mb开启,windows环境下如何为php开启mb_string函数库功能
- HDU 4622 求解区间字符串中的不同子串的个数
- 《设计模式详解》创建型模式 - 工厂模式
- windows安装php和mysql
- 如何提取明细表头_BIM/Revit常用技巧——如何添加项目参数
- 威纶触摸屏和台达b2伺服通讯,含程序案例资料
- 海康威视网络摄像头SDK中Demo的二次开发(运行)
- web大作业:基于html+css+javascript+jquery实现智能分控网站
- Self-supervised Heterogeneous Graph Neural Network with Co-contrastive Learning
- 基于51单片机的RFID一卡通刷卡扣费充值系统设计原理图程序设计
- flannel 介绍(UTP、VXLAN、Host Gateway模式详解)
- 卡马克在光线追踪,id tech6,射线跟踪,控制台,物理学等的谈话 第一部分
- Verilog HDL语言要素
热门文章
- Android Wallpaper之设置壁纸流程
- Lecture4 神经网络与反向传播(1)
- 计算机提升三年计划教师,教师个人发展三年工作计划3篇
- 操作系统重要概念——虚拟性
- AttributeError: 'bytes' object has no attribute '__dict__'
- windows程序设计读书笔记四
- python爬虫之获取资源----urllib,requests
- Java笔记——数据库05
- 苏宁java二面,苏宁二面面试
- 09-微服务版的单点登陆系统设计及实现(2105~2106)