首页 > 编程语言 > 详细

Java_枚举类

时间:2017-02-03 12:21:56      阅读:187      评论:0      收藏:0      [点我收藏+]

枚举类

枚举类不出来的时候只能如下写代码

 1 //Student.java
 2 package cn.itcast.enumeration;
 3 
 4 public class Student {
 5     private String name;
 6     private String grade;//A B C D E
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public String getGrade() {
14         return grade;
15     }
16     public void setGrade(String grade) {
17         if(!grade.matches("[ABCDE]")){
18             throw new RuntimeException("成绩输入错误");
19         }
20         this.grade = grade;
21     }
22 }

第17行代码使用了正则表达式。

 1 //Test.java
 2 package cn.itcast.enumeration;
 3 
 4 public class Test {
 5 
 6     public static void main(String[] args) {
 7         // TODO Auto-generated method stub
 8         Student s = new Student();
 9         s.setGrade("H");
10     }
11 }

这个代码有一点不好,就是给赋值了,但是程序运行是才报错。如何让写代码的时候就报错?看如下代码。

 1 //Student.java
 2 package cn.itcast.enumeration2;
 3 
 4 public class Student {
 5     private String name;
 6     private Grade grade;//A B C D E
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public Grade getGrade() {
14         return grade;
15     }
16     public void setGrade(Grade grade) {
17         this.grade = grade;
18     }
19 }
20 
21 class Grade{
22     private Grade(){}
23     
24     public static Grade A = new Grade();
25     public static Grade B = new Grade();
26     public static Grade C = new Grade();
27     public static Grade D = new Grade();
28     public static Grade E = new Grade();
29 }

定义一个自己使用的类,再赋值的时候只能赋指定的值,其他值都报错。

 1 //Test.java
 2 package cn.itcast.enumeration2;
 3 
 4 public class Test {
 5 
 6     public static void main(String[] args) {
 7         // TODO Auto-generated method stub
 8         Student s = new Student();
 9         s.setGrade(Grade.A);
10     }
11 }

这种方法太复杂,下面使用枚举,只要三行就能取代21-29行的代码

 1 //Student.java
 2 package cn.itcast.enumeration3;
 3 
 4 public class Student {
 5     private String name;
 6     private Grade grade;//A B C D E
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public Grade getGrade() {
14         return grade;
15     }
16     public void setGrade(Grade grade) {
17         this.grade = grade;
18     }
19 }
20 /*
21 class Grade{
22     private Grade(){}
23     
24     public static Grade A = new Grade();
25     public static Grade B = new Grade();
26     public static Grade C = new Grade();
27     public static Grade D = new Grade();
28     public static Grade E = new Grade();
29 }
30 */
31 enum Grade{//也是定义了一个类
32     A,B,C,D,E;//对应的是Grade类的对象
33 }

使用枚举类取代21-29行的代码。

 1 package cn.itcast.enumeration3;
 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         Student s = new Student();
 8         s.setGrade(Grade.A);
 9     }
10 }

这种方法比较好,但是如何在枚举类里面封装更多的信息?看下面的代码

 1 //Student.java
 2 package cn.itcast.enumeration4;
 3 
 4 public class Student {
 5     private String name;
 6     private Grade grade;//A B C D E
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public Grade getGrade() {
14         return grade;
15     }
16     public void setGrade(Grade grade) {
17         this.grade = grade;
18     }
19 }
20 /*
21 class Grade{
22     private Grade(){}
23     
24     public static Grade A = new Grade();
25     public static Grade B = new Grade();
26     public static Grade C = new Grade();
27     public static Grade D = new Grade();
28     public static Grade E = new Grade();
29 }
30 */
31 //如何让枚举封装更多的信息(如何让枚举对象拥有自己的属性)
32 enum Grade{//也是定义了一个类
33     A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");//对应的是Grade类的对象
34     
35     private String value;
36     private Grade(String value){
37         this.value = value;
38     }
39     public String getValue(){
40         return value;
41     }
42 }

封装成绩的同时,可以封装分数段,增加属性。

 1 //Test.java
 2 package cn.itcast.enumeration4;
 3 
 4 public class Test {
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         Student s = new Student();
 8         s.setGrade(Grade.A);
 9         System.out.println(Grade.A.getValue());
10     }
11 }

那么如何在枚举类里面封装各自的方法呢?看下面的代码。

 1 //Student.java
 2 package cn.itcast.enumeration6;
 3 
 4 public class Student {
 5     private String name;
 6     private Grade grade;//A B C D E
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public Grade getGrade() {
14         return grade;
15     }
16     public void setGrade(Grade grade) {
17         this.grade = grade;
18     }
19 }
20 /*
21 class Grade{
22     private Grade(){}
23     
24     public static Grade A = new Grade();
25     public static Grade B = new Grade();
26     public static Grade C = new Grade();
27     public static Grade D = new Grade();
28     public static Grade E = new Grade();
29 }
30 */
31 //如何让枚举对象拥有自己的属性和各自的方法
32 enum Grade{//也是定义了一个类
33     A("100-90"){
34         public String toLocalString(){
35             return "优";
36         }
37     },B("89-80"){
38         public String toLocalString(){
39             return "良";
40         }
41     },C("79-70"){
42         public String toLocalString(){
43             return "中";
44         }
45     },D("69-60"){
46         public String toLocalString(){
47             return "一般";
48         }
49     },E("59-0"){
50         public String toLocalString(){
51             return "差";
52         }
53     };//对应的是Grade类的对象
54     
55     private String value;
56     private Grade(String value){
57         this.value = value;
58     }
59     public String getValue(){
60         return value;
61     }
62     public abstract String toLocalString();
63 }

返回成绩的中文表示。

 1 package cn.itcast.enumeration6;
 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         Student s = new Student();
 8         s.setGrade(Grade.A);
 9         System.out.println(Grade.A.getValue());
10         System.out.println(Grade.A.toLocalString());
11     }
12 }

注意:枚举类的对象的方法必须是私有的,不能公有。

Java_枚举类

原文:http://www.cnblogs.com/LoganChen/p/6362269.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!