Java_枚举类
枚举类
枚举类不出来的时候只能如下写代码
//Student.java
package cn.itcast.enumeration; public class Student {
private String name;
private String grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
if(!grade.matches("[ABCDE]")){
throw new RuntimeException("成绩输入错误");
}
this.grade = grade;
}
}
第17行代码使用了正则表达式。
//Test.java
package cn.itcast.enumeration; public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade("H");
}
}
这个代码有一点不好,就是给赋值了,但是程序运行是才报错。如何让写代码的时候就报错?看如下代码。
//Student.java
package cn.itcast.enumeration2; public class Student {
private String name;
private Grade grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
} class Grade{
private Grade(){} public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
定义一个自己使用的类,再赋值的时候只能赋指定的值,其他值都报错。
//Test.java
package cn.itcast.enumeration2; public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade(Grade.A);
}
}
这种方法太复杂,下面使用枚举,只要三行就能取代21-29行的代码
//Student.java
package cn.itcast.enumeration3; public class Student {
private String name;
private Grade grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
class Grade{
private Grade(){} public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
*/
enum Grade{//也是定义了一个类
A,B,C,D,E;//对应的是Grade类的对象
}
使用枚举类取代21-29行的代码。
package cn.itcast.enumeration3; public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade(Grade.A);
}
}
这种方法比较好,但是如何在枚举类里面封装更多的信息?看下面的代码
//Student.java
package cn.itcast.enumeration4; public class Student {
private String name;
private Grade grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
class Grade{
private Grade(){} public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
*/
//如何让枚举封装更多的信息(如何让枚举对象拥有自己的属性)
enum Grade{//也是定义了一个类
A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");//对应的是Grade类的对象 private String value;
private Grade(String value){
this.value = value;
}
public String getValue(){
return value;
}
}
封装成绩的同时,可以封装分数段,增加属性。
//Test.java
package cn.itcast.enumeration4; public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade(Grade.A);
System.out.println(Grade.A.getValue());
}
}
那么如何在枚举类里面封装各自的方法呢?看下面的代码。
//Student.java
package cn.itcast.enumeration6; public class Student {
private String name;
private Grade grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
class Grade{
private Grade(){} public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
*/
//如何让枚举对象拥有自己的属性和各自的方法
enum Grade{//也是定义了一个类
A("100-90"){
public String toLocalString(){
return "优";
}
},B("89-80"){
public String toLocalString(){
return "良";
}
},C("79-70"){
public String toLocalString(){
return "中";
}
},D("69-60"){
public String toLocalString(){
return "一般";
}
},E("59-0"){
public String toLocalString(){
return "差";
}
};//对应的是Grade类的对象 private String value;
private Grade(String value){
this.value = value;
}
public String getValue(){
return value;
}
public abstract String toLocalString();
}
返回成绩的中文表示。
package cn.itcast.enumeration6; public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade(Grade.A);
System.out.println(Grade.A.getValue());
System.out.println(Grade.A.toLocalString());
}
}
注意:枚举类的对象的方法必须是私有的,不能公有。
枚举类有如下特性:
1.枚举类也是一种特殊的Java类。
2.枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
3.与Java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但是枚举类的构造函数必须为室友的(这点不难理解)。
4.枚举类也可以实现接口、或基层抽象类。
5.JDK5中扩展了switch语句,它除了可以接收int、byte、char、short外,还可以接收一个枚举类型。
6.若枚举类只有一个枚举值,则可以当做单态设计模式。
下面这样写也是单态设计模式。
enum Demo{
demo;
}
枚举类的常用方法
public void test(){
//枚举类的常用方法name,valueOf,values
String name = "B";
Grade g = Grade.valueOf(name);//把字符串转成枚举对象
System.out.println(g.name());//获取枚举对象名称 Grade gs[] = Grade.values();
for(Grade g1:gs){
System.out.println(g1.name());
}
}
Java_枚举类的更多相关文章
- java_枚举类枚举值
package ming; enum Gender{ MALE("男"),FEMALE("女"); //public static final Gender M ...
- java_包含抽象方法的枚举类
package ming; enum Operation { PLUS { public double eval(double x, double y) { return x + y; } }, MI ...
- java_实现接口的枚举类
package ming; interface GenderDoc { void info(); } enum Gender implements GenderDoc { // public stat ...
- Linq专题之提高编码效率—— 第三篇 你需要知道的枚举类
众所周知,如果一个类可以被枚举,那么这个类必须要实现IEnumerable接口,而恰恰我们所有的linq都是一个继承自IEnumerable接口的匿名类, 那么问题就来了,IEnumerable使了 ...
- 0029 Java学习笔记-面向对象-枚举类
可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...
- FastJson转换自定义枚举类
在项目中有些状态需要采用枚举类型,在数据库中保存的是name(英文),而前台需要显示的是text(中文). 所以这就需要自己去实现序列. 例如对象: import java.util.Date; im ...
- Java 枚举类
如果要定义一个枚举类: public enum Size { SAMLL, MEDIUM, LARGE, EXTRA, EXTRA_LARGE}; 实际上,这个声明定义的类型是一个类,它刚好有4个实例 ...
- SpringMVC 自动封装枚举类的方法
springmvc默认无法自动封装枚举类,解决方法如下: 1.枚举类 public enum GoodsPromoteEnum { /** * 0 精品 */ fine("精品", ...
- 枚举类valueOf方法的疑问
枚举类中valueOf方法只有一个参数而Enum类中有两个参数,请问Enum实例类中的valueOf方法是从何处继承而来? 答案:jvm进行编译的时候添加的.
随机推荐
- tensorflow中有向图(计算图、Graph)、上下文环境(Session)和执行流程
计算图(Graph) Tensorflow是基于图(Graph)的计算框架,图的节点由事先定义的运算(操作.Operation)构成,图的各个节点之间由张量(tensor)来链接,Tensorflow ...
- Audiophobia(Floyd算法)
个人心得:这在一定途径上完成查询方面还是很吃力,得多锻炼空间能力,不能再每次都看到就后退,要全力应对, 那怕被虐的不要不要的. 这题主要是求俩个端点中所有路径中最大构成的集合中最小的数值,其实开始思想 ...
- [独孤九剑]Oracle知识点梳理(三)导入、导出
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...
- [BZOJ5249][多省联测2018]IIIDX
bzoj luogu sol 首先可以把依赖关系转成一个森林.自下而上维护出每个点的\(size\),表示这关解锁以后一共有多少关. 考虑没有重复数字的情况. 直接从小往大贪心把每个数赋给当前已解锁的 ...
- [BZOJ5248][多省联测2018]双木棋chess
bzoj luogu sol 首先,要保证一个格子的左边和上方都放满了棋子,就需要这个点的左上方那个矩形都放满了棋子. 这样放棋子状态就会是一个自左下至右上的轮廓线. 状态数?\(C_{20}^{10 ...
- url出现特殊字符,需要进行编码
1) 网络访问请求:中文空格字符编码/解码 stringByAddingPercentEscapesUsingEncoding(只对 `#%^{}[]|\"<> 加空格共14个字 ...
- 备注信息的textarea 和 数据库 text类型
有时候需要用到备注信息 备注一些东西 但是它又不同于普通的输入框,要有换行啊 空格之类的,更有甚者还有其他更多的需求 1.更多需求 用富文本编辑器 2.普通需求 直接用input type=" ...
- ucos ii 百度官方介绍
μC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的.可裁剪的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处 ...
- codeforce 103B Cthulhu
B. Cthulhu time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- 用IntelliJ IDEA建maven项目,如何解决main下无法创建java源文件
一.缺少java源文件 如下图: 现在想要在main下面增加java源文件,效果图如下所示: 首先,在main目录下新建java文件夹,就是源文件目录, 然后,右键,选择Mark Directory ...