问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个

解决办法:

1)  在setGrade方法中做判断,不符合格式要求就抛出异常

2)  直接限定用户的选择,通过自定义类模拟枚举的方式来限定用户的输入

写一个Grade类,私有构造函数,对外提供5个静态的常量表示类的实例

3)  jdk5中新定义了枚举类型,专门用于解决此类问题

4)  枚举就是一个特殊的java类,可以定义属性、方法、构造函数、实现接口、继承类

packagecn.itcast.enumeration;

import org.junit.Test;

publicclass Demo1 {

@Test

public void test() {

print(Grade.B);

}

public void print(Grade g) // A B C D E

{

String value=g.getValue();

System.out.println(value);

}

}

/*

* class Grade{ private Grade(){ }

* public static final Grade A=new Grade();

* public static final Grade B=new Grade();

* public static final Grade C=new Grade();

* public static final Grade D=new Grade();

* public static final Grade E=new Grade();

*  }

*/

//如何定义枚举的构造函数、方法、字段

enumGrade {// class A 100-90 B 89-80 C 79-70 D 69-60 E 59-0

A("100-90"), B("89-80"),C("79-70"), D("69-60"), E("59-0");// object

private String value;

private Grade(String value){

this.value=value;

}

public String getValue(){

return this.value;

}

}

publicclass Demo1 {

@Test

public void test() {

print(Grade.B);   //89-80,良

}

public void print(Grade g) // A B C D E

{

String value=g.getValue();

String value2=g.localeValue();

System.out.println(value+","+value2);

}

}

//带抽象方法的枚举

enumGrade {// class A 100-90优 B89-80良 C 79-70 一般D 69-60差 E 59-0不及格

A("100-90"){

public String localeValue(){

return "优";

}

},

B("89-80"){

public String localeValue(){

return "良";

}

},

C("79-70"){

public String localeValue(){

return "一般";

}

},

D("69-60"){

public String localeValue(){

return "差";

}

},

E("59-0"){

public String localeValue(){

return "不及格";

}

};// object

private String value;

private Grade(String value){

this.value=value;

}

public String getValue(){

return this.value;

}

public abstract String localeValue();

}

//枚举类就是一个java类,也可以声明属性,方法,构造函数

public enum Grade4 {

A("90-100"),B("80-89"),C("70-79"),D("60-69"),E("0-59");

privateString value;

privateGrade4(String value) {

this.value= value;

}

publicString getValue() {

returnvalue;

}

}

//枚举类就是一个java类, 也可以继承抽象和实现接口

public enum Grade5 {

// 抽象类不能创建实例对象

A("90-100"){

//new了一个Grade5的子类实例

publicString toLocaleString() {

return"优";

}

}

,B("80-89"){

//new了一个Grade5的子类实例

publicString toLocaleString() {

return"良";

}

}

,C("70-79"){

//new了一个Grade5的子类实例

publicString toLocaleString() {

return"中";

}

}

,D("60-69"){

//new了一个Grade5的子类实例

publicString toLocaleString() {

return"差";

}

}

,E("0-59"){

//new了一个Grade5的子类实例

publicString toLocaleString() {

return"不及格";

}

};

privateString value;

privateGrade5(String value) {

this.value= value;

}

publicString getValue() {

returnvalue;

}

// 对外提供一个方法,返回枚举的本地信息

// 一个方法不知道如何实现,可以定义为抽象的

publicabstract String toLocaleString();

}

版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

java 基础之枚举的更多相关文章

  1. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  2. 黑马程序员:Java基础总结----枚举

    黑马程序员:Java基础总结 枚举   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...

  3. Java基础之枚举类型Enum的使用

    Java基础之枚举类型Enum的使用 定义 public enum AccruedCleanEnum { SPREAD("1","发票"),OTHER(&quo ...

  4. Java基础之枚举

    Java基础之枚举 作为1.5才增加的特性,枚举的使用并不是很多. 枚举其实就是一个比较特殊的类,就如同注解其实也是个特殊的接口一样(注解反编译之后没有了@符号).枚举使用enum关键字声明,通过反编 ...

  5. Java 基础之-枚举

      目录(?)[-] 用法一常量 用法二switch 用法三向枚举中添加新方法 用法四覆盖枚举的方法 用法五实现接口 用法六使用接口组织枚举 用法七关于枚举集合的使用   DK1.5引入了新的类型-- ...

  6. Java 基础 enum枚举类 的创建/使用/接口继承 ,以及手动创建枚举类的对象为:public static final

    笔记: import java.lang.*; /**一:枚举类 : enum Season implements info { s1(),s2(),s3(),s4() }; //s1--s4 放在S ...

  7. Java基础_枚举类型

    作用:让数据更简洁,更易读,增加代码可读性. 为了用1,2,3,4,5分别表示老师,学生,小组,班主任,后勤,可以直接设置一个变量,让roleType = 1,但这样写代码可读性差. 也可以定义一个成 ...

  8. java基础(十一) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

  9. Java基础之枚举妙用

    对于枚举,初学Java的时候可能我们就已经接触过了,但是在毕业前,其实一直都不知道真正工作里面枚举是怎么用的,枚举有什么用?接下来,博主就介绍枚举在实际工作中的一种使用场景,本文只适合初级的小菜鸟看哈 ...

随机推荐

  1. Java学习网站大全

    Java学习网站 http://www-900.ibm.com/developerWorks/cn/java/index.shtml IBM的JAVA专题--永远的蓝色巨人 http://www.hu ...

  2. winform编程设定listview选中行

    在做项目中,需要用到listview显示数据.同时,项目要求,通过检索用户输入的数据,程序通过搜索,确定数据所在的行并通过程序设定为选中状态并高亮显示.同时,正常响应鼠标单击响应的效果,单击时,程序设 ...

  3. 那些年Android开发中遇到的坑

    使用静态变量来缓存数据时,不管是在Application类还是其他类,都要注意因应用重建而引发的问题. 使用DecorView作为PopupWindow的anchorView时,在华为P7中它是显示在 ...

  4. 如何在服务器上配置ODBC来访问本机DB2 for Windows服务器

    如何在服务器上配置ODBC来访问本机 DB2 for Windows服务器                         马根峰             (广东联合电子服务股份有限公司, 广州 51 ...

  5. myeclipse10破解

    原本一直使用eclipse,但是写起web还是不太方便,由于idea使用不太顺手不太爱用.原来一直不能破解,今天迫不得已又拿起myeclipse仔细搞一番.下面是遇到的问题的总结. 不成功原因一:.原 ...

  6. 大数据小视角1:从行存储到RCFile

    前段时间一直在忙碌写毕设与项目的事情,很久没有写一些学习心得与工作记录了,开了一个新的坑,希望能继续坚持写作与记录分布式存储相关的知识.为什么叫小视角呢?因为属于随想型的内容,可能一个由小的视角来审视 ...

  7. 一个简单的例子搞懂ES6之Promise

    ES5中实现异步的常见方式不外乎以下几种: 1. 回调函数 2. 事件驱动 2. 自定义事件(根本上原理同事件驱动相同) 而ES6中的Promise的出现就使得异步变得非常简单.promise中的异步 ...

  8. Storyboard的几点缺憾

    Storyboard作为iOS主推的UI开发方式,不管接受也好,不接受也好,在未来几年,都会逐渐在产业界流行,之前bignerd在其ios开发第四版中,作者曾经说过一节的Storyboard优缺点分析 ...

  9. 得到Android keystore签名的命令方法

    keytool -list -v -keystore keyfile.jks 上面这个命令是用来得到一些签名字符串,这些字符串用来在各种平台上填资料的 再来个手动签名的命令: jarsigner -v ...

  10. java文件传输之文件编码和File类的使用

    ---恢复内容开始--- 我们知道,在用户端和服务端之间存在一个数据传输的问题,例如下载个电影.上传个照片.发一条讯息.在这里我们 就说一下文件的传输. 1.文件编码 相信大家小时候玩过积木(没玩过也 ...