栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

枚举的理解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

枚举的理解

目的

了解枚举


问题

声明一个学生类,包含学号、姓名、性别字段,其中性别字段定义成枚举类型。


分析

定义一个变量来表示性别的分类?请问该变量的类型使用什么?

使用int和String类型,且先假设使用int类型,因为分类情况是固定的,为了防止调用者乱创建类型,可
以把三种情况使用常量来表示。常量使用final修饰,并且使用大写字母组成,如果是多个单词组成,使用下划线分割。此时调用setSex方法传递的值应该是Sex类中三个常量之一。但是此时依然存在一个问题——依然可以乱传入参数比如100,此时就不合理了。

同理如果使用String类型,还是可以乱设置数据。那么说明使用int或String是类型不安全的。那么如果
使用对象来表示三种情况呢?

public class Sex{ 
	public static final Sex MEN = new Sex(); 
	public static final Sex WOMEN = new Sex(); 
	public static final Sex NEUTRAL = new Sex(); 
	private Sex() {} 
	}

此时为了防止调用者私自创建出新的对象,我们把Sex的构造器私有化起来,外界就访问不了
了,此时调用setSex方法只能传入Sex类中的三个常量

枚举是一种特殊的类,专门用于声明可罗列的常量值,定义格式:

public enum 枚举类名{
常量对象A,----逗号
常量对象B,
常量对象C; ----分号
}

枚举中都是全局公共的静态常量,可以直接使用枚举类名调用。


解答
public class Student {​    
	private String id,name;    
	private SexEnum sexEnum;​    
	public Student(String id, String name, SexEnum sexEnum) {  //有参构造      
		this.id = id;        
		this.name = name;        
		this.sexEnum = sexEnum;    
	}​  
	
	  
	public String getId() {     //getter  and   setter   
		return id;    
	}​    
	public void setId(String id) {        
		this.id = id;    
	}​    
	public String getName() {        
		return name;    
	}​    
	public void setName(String name) {        
		this.name = name;    
	}​    
	public SexEnum getSexEnum() {        
		return sexEnum;    
	}​    
	public void setSexEnum(SexEnum sexEnum) {        
		this.sexEnum = sexEnum;    
	}​ 
	
	   
	@Override    
	public String toString() {        //重写toString
		return "Student{" +                
		        "id='" + id + ''' +                
			", name='" + name + ''' +               
		  ", sexEnum=" + sexEnum +                
	 		'}';    
	 }
	}
public enum SexEnum {	//枚举声明性别变量
    男,
    女,
    保密;
}

我们自定义的枚举类在底层都是直接继承了java.lang.Enum类的

public class EnumDemo {
    public static void main(String[] args) {
        Student student1 = new Student("1001","张三", SexEnum.男);
        String str = student1.toString();//枚举中都是全局公共的静态常量,可以直接使用枚举类名调用
        System.out.println(str);
    }
}

java.lang.Enum类是所有枚举类的父类,所以所有的枚举对象可以调用Enum类中的方法.
int ordinal = 枚举对象.ordinal(); // 返回枚举对象的序号,从0开始
注意:枚举类不能使用创建对象


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760631.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号