java高级编程之枚举

 接下来本章的重点来了,就是枚举;

枚举是什么?

Java中的枚举是一种特殊的类,不但可以添加字段,构造方法,普通方法,甚至可以添加main()方法,

为什么需要枚举?

一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。

 

JDK 5新增的 enum 关键字用于定义一个枚举类。

 

枚举类也是一种特殊形式的Java类。

枚举类和普通类的区别:

使用 enum 定义的枚举类默认继承了 java.lang.Enum

枚举类的构造器只能使用 private 访问控制符

枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾). 列出的实例系统会自动添加 public static final 修饰

JDK5中扩展了switch语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型

若枚举只有一个成员, 则可以作为一种单例模式的实现方式

 


//枚举类1(没有参数的构造方法)
        package com.hbsi.enum2;

public class Student {
	
	private String name;
	private Grade grade;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Grade getGrade() {
		return grade;
	}
	public void setGrade(Grade grade) {
		this.grade = grade;
	}
	
	
	

}

enum Grade{
	A,B,C,D,E;//无参数
}
/*//手动实现枚举类代码
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();
}*/
枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
枚举类的使用 private final 修饰的属性应该在构造器中为其赋值
若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数
//有参数的枚举类
enum Grade{
	A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");
	
	private String value;
	
	private Grade(String value){
		this.value=value;
	}

	public String getValue() {
		return value;
	}
	
}


枚举类3(使用内部类)
enum Grade{
	A("100-90") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "优";
		}
	},
	B("89-80") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "良";
		}
	},
	C("79-70") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "中";
		}
	},
	D("69-60") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "可";
		}
	},
	E("59-0") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "差";
		}
	};
	
	private String value;
	
	private Grade(String value){
		this.value=value;定义构造方法,传参;
	}

	public String getValue() {
		return value;//获取value值
	}
	
	public abstract String toLocalGrade();//定义抽象方法
	
}
获取各个等级对应的中文
   A(“100-90”),   优
   B(“89-80”),     好 
   C(“79-70”),     良好
   D(“69-60”),     及格
   E(“59-0”);      不及格

 


要求:学生的grade只能是a,b,c,d,e五个级别。可以给学生设置成绩,并可以输出学生成绩情况(优,良,中,可,差)


package com.hbsi.enum4;

public class Student {
	
	private String name;
	private Grade grade;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Grade getGrade() {
		return grade;
	}
	public void setGrade(Grade grade) {
		this.grade = grade;
	}
	
	
	

}

enum Grade{
	A("100-90") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "优";
		}
	},
	B("89-80") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "良";
		}
	},
	C("79-70") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "中";
		}
	},
	D("69-60") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "可";
		}
	},
	E("59-0") {
		@Override
		public String toLocalGrade() {
			// TODO Auto-generated method stub
			return "差";
		}
	};
	
	private String value;
	
	private Grade(String value){
		this.value=value;
	}

	public String getValue() {
		return value;
	}
	
	public abstract String toLocalGrade();
	
}


package com.hbsi.enum4;

public class Demo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Student s=new Student();
		s.setName("张三");
		s.setGrade(Grade.A);
		
		
	   String str=Grade.B.getValue();
	   String str1=Grade.B.toLocalGrade();
	   System.out.println(str+"...."+str1);

	}

}


结果::
89-80....良

 

Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法。常用方法:

name():返回此枚举常量的名称,在其枚举声明中对其进行声明

ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

valueof(Class enumClass, String name):返回带指定名称的指定枚举类型的枚举常量。 静态方法

values() 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章