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

解决办法:

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. C++语言之类class

    在现实世界中,经常有属于同一类的对象.例如,你的自行车只是世界上很多自行车中的一辆.在面向对象软件中,也有很多共享相同特征的不同的对象:矩形.雇用记录.视频剪辑等.可以利用这些对象的相同特征为它们建立 ...

  2. DB Query Analyzer 5.05 is released, 65 articles concerned have been published

    DB Query Analyzer 5.05 is released, 65 articles concerned have been published DB Query Analyzer is p ...

  3. 图像处理程序框架—MFC相关知识点

    CDC:Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 . MFC基础类库定义了设备环境对象类----CDC类. CDC与CGdiObject的关系 说道 ...

  4. unix设计哲学

    说到Unix为我们所带来的软件开发的哲学,我必需要说一说.Unix遵循的原则是KISS(Keep it simple, stupid).在http://en.wikipedia.org/wiki/Un ...

  5. C++——虚函数问题小集

    学习C++ 不可避免地会遇到虚函数的问题,下面几个问题在学习初期或多或少会存在一些疑惑,所以便将其总结了下来. 1.为什么静态成员函数.构造函数不能定义为虚函数? 因为静态成员函数是一个大家共享的一个 ...

  6. Java 深度克隆 clone()方法重写 equals()方法的重写

    1.为什么要重写clone()方法? 答案:Java中的浅度复制是不会把要复制的那个对象的引用对象重新开辟一个新的引用空间,当我们需要深度复制的时候,这个时候我们就要重写clone()方法. 2.为什 ...

  7. JavaScript脚本放在哪里

    在HTML body部分中的JavaScripts会在页面加载的时候被执行. 在HTML head部分中的JavaScripts会在被调用的时候才执行. ----------------------- ...

  8. JQuery DOM操作 、属性和CSS样式操作、其他函数

    DOM操作 1.在div1内部最后追加一个节点 $("#div1").append("<img src='../01-HTML基本标签/img/Male.gif'/ ...

  9. Visual Studio Live Share不完全指北

    Visual Studio Live Share是什么? 是VS的一个实时协作开发的扩展工具. github地址:https://github.com/MicrosoftD...文档地址:https: ...

  10. 鼠标拖拽定位和DOM各种尺寸详解

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...