枚举完整讲解实例.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
枚举完整讲解实例

枚举 问题引入:如何限制用户输入? class Student{ private String name; // 考试等级 private String grade; //等级只能是ABCDE五个等级之一 // .. 省略get/set } // 程序调用 public static void main(String[] args) { Student stu = new Student(); stu.setGrade(Effff); // 这样也可以,符合语法要求,但不符合需求 // 输出 System.out.println(stu.getGrade()); } 此时,可以优化下程序, 在set方法中加入逻辑判断,即限制用户输入: // 限制等级的值 public void setGrade(String grade) { if (!grade.matches([ABCDE])){ throw new RuntimeException(等级输出错误!); } this.grade = grade; } 此时,执行 stu.setGrade(Effff); 就会在运行时期报错! 思考: 有没有更好的解决办法呢? 手动实现枚举类 private 将构造器隐藏起来 把这个类的所有可能实例都使用 public static final 修饰 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(); } class Student{ // 考试等级, 类型为Grade private Grade grade; //ABCDE public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } } 这样,赋值是只能为指定的值,如其他值,编译时就会报错: 如下: 这样做,麻烦, 使用枚举类可以轻松实现这一点! 枚举类 概念 为什么需要枚举? 一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决 JDK 5新增的 enum 关键字用于定义一个枚举类 默认构造函数枚举 按下面步骤,读下面案例: // 1. 枚举类定义 enum Grade{ A,B,C,D,E; } class Student{ private String name; // 2. 使用枚举类型 private Grade grade; //ABCDE public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } } public class Demo1 { public static void main(String[] args) { Student stu = new Student(); // 3. 给枚举类型赋值,只能是枚举类定义的值(第1步中所定义) stu.setGrade(Grade.A); System.out.println(stu.getGrade()); } } 上述定义的枚举为默认构造函数枚举, 也可以这样写 // 1. 枚举类定义 enum Grade{ A(),B(),C(),D(),E(); // 必须为私有 private Grade(){ } } 此时,Grade类中有一个默认无参数构造函数 有参构造函数枚举定义 // 1. 带参数构造函数的枚举定义 enum Grade{ A(100-90),B(90-80),C(80-70),D(70-60),E(60-0); private String value; // 定义get方法返回数据 public S

文档评论(0)

gangshou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档