概述
- 关键字
enum
- 枚举类型可以取代以往常量定义方式(将常量封装在类或接口中)
- 提供了安全检查功能
- 本质上还是以类的形式存在
- 定义一个枚举类型时,每一个枚举累心成员都可以看做时枚举类型的一个实例。
- 枚举类型成员默认为
final
,public
,static
【但是属性就。。】 - 枚举类构造方法必须是
private
常用方法
方法 | 说明 | 示例 |
---|---|---|
values() | 将枚举类型成员以数组形式返回 | Contents01.values() |
valueOf() | 将字符串转化成枚举实例 | Contents02.valueOf(“abc”) |
compareTo() | 比较两个枚举对象在定义上时的顺序 | Contents_a.compareTo(Contents_b) |
ordinal() | 得到枚举成员的位置索引 | Contents_a.ordinal() |
示例
1.示例01
import static java.lang.System.out;
public class OneTest {
enum Student{
// 枚举类成员
Mick(1802011, "Mick"),
Fry(1802012, "Fry"),
Leela(1802013),
Bender("Bender is GREAT!"),
NoOne();
// 属性/常量
final private int id;
private String name;
double score;
/*=========================================================*/
// 构造方法,--private--
private Student(int id, String name){
this.id = id;
this.name = name;
}
private Student(int id){
this.id = id;
this.name = "None";
}
private Student(String name){
this.id = -1;
this.name = name;
}
private Student(){
this.id = -1;
this.name = "None";
this.score = 99;
}
/*===========================End===========================*/
// ------------------get()-----------------------------------
public int get_id(){
return this.id;
}
public String get_name(){
return this.name;
}
// --------------------------------------------------------
}
public static void main(String[] args){
String[] names = {"Mick", "Fry", "Leela", "Bender"};
/* =========================================================
* 第一种遍历、获取相应对象方法
* ---------Contents.valueOf(String cont)--------------
* : 返回字符串对应的 枚举类对象
* ============================================================ */
for(String name:names)
{
Student stu = Student.valueOf(name);
out.println("id :" + stu.get_id() +
"\t name: " + stu.get_name());
}
out.println("---".repeat(8));
/* =========================================================
* 第二种遍历、获取相应对象方法
* ---------Contents.values()--------------
* : 返回枚举类对象 列表
* ============================================================ */
for(Student stu:Student.values())
{
out.println("id :" + stu.get_id() +
"\t name: " + stu.get_name());
}
// *******************************************************
Student Noone = Student.valueOf("NoOne");
// error: id 为 final 型,不能改
// Noone.id = 12;
Noone.name = "wula";
Noone.score = 98;
out.println(Noone.id + "\t" + Noone.name + "\t" + Noone.score);
}
}
id :1802011 name: Mick id :1802012 name: Fry id :1802013 name: None id :-1 name: Bender is GREAT! ------------------------ id :1802011 name: Mick id :1802012 name: Fry id :1802013 name: None id :-1 name: Bender is GREAT! id :-1 name: None -1 wula 98.0 |
- 枚举类成员须在 枚举类 开头,以
,
隔开; - 构造方法默认为
final
,public
,static
2.示例02
import static java.lang.System.out;
interface get_info{
public int get_id();
public String get_name();
}
public class Test02 {
enum Student implements get_info{
Bender(){
public String get_name(){
return "Bender";
}
public int get_id(){
return 1802011;
}
},
Fry(){
public String get_name(){
return "Fry";
}
public int get_id(){
return 1802012;
}
},
Leela(){
public String get_name(){
return "Leela";
}
public int get_id(){
return 1802015;
}
}
}
public static void main(String[] args){
String[] names = {"Bender", "Fry", "Leela"};
/* =========================================================
* 第一种遍历、获取相应对象方法
* ---------Contents.valueOf(String cont)--------------
* : 返回字符串对应的 枚举类对象
* ============================================================ */
for(String name:names)
{
Student stu = Student.valueOf(name);
out.println("id :" + stu.get_id() +
"\t name: " + stu.get_name());
}
out.println("---".repeat(8));
/* =========================================================
* 第二种遍历、获取相应对象方法
* ---------Contents.values()--------------
* : 返回枚举类对象 列表
* ============================================================ */
for(Student stu: Student.values())
{
out.println("id :" + stu.get_id() +
"\t name: " + stu.get_name());
}
}
}
id :1802011 name: Bender id :1802012 name: Fry id :1802015 name: Leela ------------------------ id :1802011 name: Bender id :1802012 name: Fry id :1802015 name: Leela |
- 枚举类可使用接口+匿名类,实现成员初始化,以及
get()
方法