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