java基础41 枚举(类)

1、概述

    枚举:一些方法在运行时,它需要数据不能是任意的,而必须是一定范围内的值,可以使用枚举解决

2、枚举的格式

enum 类名{
     枚举值
}

例子

 1 package com.dhb.enumeration;
 2 
 3 /**
 4  * @author DSHORE / 2018-6-21
 5  *
 6  */
 7 enum Sex{//枚举类
 8     //相当于:public static final Sex man=new Sex("男");
 9     man("") {
10         @Override
11         public void run() {
12             System.out.println("男人正在跑步");
13         }
14     //相当于:public static final Sex woman=new Sex("女");
15     },woman("") {
16         @Override
17         public void run() {
18             System.out.println("女人正在游泳");
19         }
20     };
21     String value;
22     private Sex(String value){
23         this.value=value;
24     }
25     //成员函数
26     public void getValue(){
27         System.out.println("Value:"+value);
28     }
29     public abstract void run();
30 }
31 
32 public class Demo2 {
33     public static void main(String[] args) {
34         Sex sex=Sex.man;//获取枚举类对象
35         sex.value="";
36         sex.getValue(); //返回值:男
37         sex.run(); //返回值:男人正在跑步
38     }
39 }

3、枚举要注意的细节(上面例子的总结)

   1.枚举类也是一个特殊的类.
   2.枚举值默认的修饰符是public static final
   3.枚举值就是枚举值所属的类的类型,枚举值指向的是本类的对象
   4.枚举类构造方法默认修饰符private
   5.枚举类可以定义自己的成员变量与成员函数
   6.枚举类可以定义自己的构造函数,单是构造函数修饰符必须是private
   7.枚举类可以存在抽象的方法,但是枚举值必须去实现抽象方法
   8.枚举值必须要位于枚举类的第一个语句

4、实例

需求:定义一个用户的性别不能随意更改/实例化

方式1:(不用枚举)

 1 package com.dhb.enumeration;
 2 
 3 /**
 4  * @author DSHORE / 2018-6-21
 5  *
 6  */
 7 class Gender{ //自定义一个性别类
 8     String value;
 9     public static final Gender man=new Gender("");
10     public static final Gender woman=new Gender("");
11 
12     private Gender(String value){
13             this.value=value;
14     }
15 }
16 
17 class Person{//人员类
18     private String name;
19     private Gender sex;
20     public String getName() {
21         return name;
22     }
23     public void setName(String name) {
24         this.name = name;
25     }
26     public Gender getSex() {
27         return sex;
28     }
29     public void setSex(Gender sex) {
30         this.sex=sex;
31     }
32 }
33 
34 public class Demo1 {
35     public static void main(String[] args) {
36         Person p=new Person();
37         p.setName("张三");
38         p.setSex(Gender.woman);
39         System.out.println("姓名:"+p.getName()+"\t,"+p.getSex().value);//返回值:姓名:张三    ,女
40     }
41 }

方式2:(用了枚举)

 1 package com.dhb.enumeration;
 2 
 3 /**
 4  * @author DSHORE / 2018-6-21
 5  *
 6  */
 7 enum Gender{ //枚举类
 8     man(""),woman("");
 9     String value;
10     private Gender(String value){
11         this.value=value;
12     }
13 }
14 
15 class Person{//人员类
16     private String name;
17     private Gender sex;
18     public String getName() {
19         return name;
20     }
21     public void setName(String name) {
22         this.name = name;
23     }
24     public Gender getSex() {
25         return sex;
26     }
27     public void setSex(Gender sex) {
28         this.sex=sex;
29     }
30 }
31 
32 public class Demo1 {
33     public static void main(String[] args) {
34         Person p=new Person();
35         p.setName("张三");
36         p.setSex(Gender.woman);
37         System.out.println("姓名:"+p.getName()+"\t,"+p.getSex().value);//返回值:姓名:张三    ,女
38     }
39 }

 

 

 附:

 1 package com.dhb.enumeration;
 2 
 3 /**
 4  * @author DSHORE / 2018-6-21
 5  *
 6  */
 7 /*
 8  * switch适用的数据类型:byte\short\int\char\String\枚举类型
 9  * 
10  * 注意:
11  * case后面跟的是枚举值,只需要单写枚举值即可,不需要在声明该枚举值是属于哪个枚举类的.
12  * */
13 enum Season{
14     spring("春季"),summer("夏季"),autumn("秋季"),winter("冬季季");
15     
16     String value;
17     private Season(String value) {
18         this.value = value;
19     }
20 }
21 
22 enum Persons{
23     student("张三"),worker("劳动者");
24     
25     String values;
26     private Persons(String values) {
27         this.values = values;
28     }
29 }
30 
31 public class Demo3 {
32     public static void main(String[] args) {
33         Season season = Season.summer;
34         Persons person = Persons.student;
35         Persons persons = Persons.worker;
36         switch (season) {
37         case spring:
38             System.out.println(season.value+",春暖花开..."+person.values+"是个"+persons.values);
39             break;
40         case summer:
41             System.out.println(season.value+",荷塘月色..."+person.values+"是个"+persons.values);
42             break;
43         case autumn:
44             System.out.println(season.value+",果实累累..."+person.values+"是个"+persons.values);
45             break;
46         case winter:
47             System.out.println(season.value+",银装素裹....."+person.values+"是个"+persons.values);
48             break;
49         }
50     }
51 }

运行结果图

 

 

 

 

 

 

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/9210345.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

posted @ 2018-06-21 18:00  DSHORE  阅读(263)  评论(0编辑  收藏  举报