您的位置:首页 > 编程语言 > Java开发

JAVA补强系列======枚举

2014-09-03 23:33 162 查看
-------枚举一---------------------------------------------------------------------------------------------------------------------------------------------------------

注意:

1】构造函数不能为public,只能是private,如果公有的话,就会出现可以new出来,不符合枚举初衷

2】理解:所谓的枚举就是枚举的类的每个私有对象,原理在enum1中已经很好的体现

/**
* 枚举 enum
*
* 原理:一些方法在运行时,<strong><span style="color:#ff0000;">它需要的数据不能是任意的,而必须是一定范围内的值</span></strong>,比如礼拜
*
* 下面就是枚举最简单的应用举例,以及枚举等同于的类,功能一样
*
*/

public class Enum01 {

public static void main(String[] args) {
Student student = new Student();
student.setGrade(Grade.A);
}

}

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;
}
}

// <span style="color:#ff0000;">enum相当于定义了一个类(下面的GradeClass类一样功能),enum就是枚举</span>
enum Grade {
A, B, C, D, E;//相当于Grade的对象
}

/*
class GradeClass {

// 私有构造方法就不能new
private GradeClass() {
}

public static GradeClass A = new GradeClass();
public static GradeClass B = new GradeClass();
public static GradeClass C = new GradeClass();
public static GradeClass D = new GradeClass();

}
*/


-------枚举二---------------------------------------------------------------------------------------------------------------------------------------------------------

枚举讲白就是类的对象,没有什么复杂的说法

package com.sysweal.demo02;

/**
* enum:封装更复杂的信息
* 在设计枚举的时候,要求可能比前面我们的简单的成员更为复杂,设计如下:
*
* 使用:<span style="color:#ff0000;"><strong>如何让枚举封装更多信息,如何让枚举对象拥有自己的属性</strong></span>
*/

public class Enum02 {

public static void main(String[] args) {
Student2 stu = new Student2();
stu.setGrade2(Grade2.A);

//取得枚举中的值
String value = stu.getGrade2().getValue();
System.out.println(value);
}

}

class Student2{
private Grade2 grade2;

public Grade2 getGrade2() {
return grade2;
}

public void setGrade2(Grade2 grade2) {
this.grade2 = grade2;
}
}
//这里必须注意把枚举对象放在格式的最上面,下面再声明属性和构造函数,不然会报错
enum Grade2 {
A("100-90"), B("89-80"), C("79-70");

private String value;

private Grade2(String value){
this.value = value;
}

public String getValue() {
return value;
}

}


-------枚举三---------------------------------------------------------------------------------------------------------------------------------------------------------

最强版本,枚举对象如何封装更多信息:属性,以及方法

package com.sysweal.demo02;

/**
* enum1介绍了简单的枚举,enum2介绍了枚举的成员变量
*
* enum3:枚举的方法
*
*/

public class Enum03 {

public static void main(String[] args) {
Student3 stu = new Student3();
stu.setGrade3(Grade3.A);

String str = stu.getGrade3().toLocaleString();
System.out.println(str);
}

}

class Student3 {
private Grade3 grade3;

public Grade3 getGrade3() {
return grade3;
}

public void setGrade3(Grade3 grade3) {
this.grade3 = grade3;
}

}

enum Grade3 {
A("100-90") {
@Override
public String toLocaleString() {
return "优秀";
}
},
B("89-80") {
@Override
public String toLocaleString() {
return "良好";
}
},
C("79-70") {
@Override
public String toLocaleString() {
return "及格";
}
};

private String value;

private Grade3(String value) {
this.value = value;
}

public String getValue() {
return value;
}

// 将方法写成抽象方法,这里枚举对象new出来的时候就必须实现
public abstract String toLocaleString();

}


-------枚举四---------------------------------------------------------------------------------------------------------------------------------------------------------
枚举类的常用方法:

枚举类是有父类的,枚举类的父类就是枚举,它有一些常用的方法,比如valueoft()转成枚举对象, name()得到枚举名称,values,得到枚举对象数组

public class Enum03 {

public static void main(String[] args) {
Student3 stu = new Student3();
stu.setGrade3(Grade3.A);

String str = stu.getGrade3().toLocaleString();
System.out.println(str);
System.out.println(stu.getGrade3().B.name());
}

public void test(){
//枚举类常用方法
String name = "B";
Grade3 g = Grade3.valueOf(Grade3.class, name);

//values(),方法返回枚举类的所有对象
Grade3 gs[] = Grade3.values();

//取得枚举的对象的名字
String nameXXX = Grade3.A.name();
}

}


理论补充

枚举类具有如下特性:

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

枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。

枚举类也可以实现接口、或继承抽象类。

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

若枚举类只有一个枚举值,则可以当作单态设计模式使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: