枚举是什么,用我自己的话说就是一个变量可能不仅仅只有一个值,而枚举则可以把它们存在的情况都一一列举出来
enum关键字,来定义枚举的
1.C的枚举
//C
#include <stdio.h>
#include <stdlib.h>
int main()
{
enum color{red,green,blue};
enum color test ;
test = red ;
switch(test)
{
case red:
printf("red");
break;
case green:
printf("green");
break;
case blue:
printf("blue");
break;
default :
printf("error");
break;
}
return 0;
}
2.java的枚举
1.枚举的简介
//java
enum Color { //定义枚举类
RED,GREEN,BLUE ; //表示此处为实例化对象
}
public class Nice {
public static void main(String args[]) {
Color color = Color.BLUE ;
System.out.println(color);
}
}
//java使用枚举可以简化的替代多例设计模式
一般的枚举就这样,但是java虽然枚举支持的晚,但是java的枚举不仅仅只有这些
Enum是一个抽象类,构造如下:protected Enum(String name,int ordinal)
Enum类里面定义两个方法:
取得枚举的索引:public final int ordinal() ;
取得枚举的名字:public final String name() ;还有使用enum关键字定义的枚举里,还有一个values()方法,将枚举对象以对象数组的形式全部返回
enum Color {
RED ,GREEN,BLUE ;
}
public class Nice {
public static void main(String args[]) {
//foreach循环
for(Color c : Color.values()) { //以对象数组形式全部返回
System.out.println(c.ordinal() + "-" + c.name());
}
}
}
那么java有 enum 和 Enum ,那么它们区别是什么?
1.enum是一个关键字,而Enum是一个抽象类
2.使用enum定义的枚举就相当于一个类继承Enum这个抽象类
2.枚举定义其他结构
其实不止是多例设计模式里可以定义属性和方法,枚举也可以,只是有点要求
1.枚举中定义的构造方法不能够使用public声明(其余都可以),如果没有无参构造,请手工调用传递参数
2.枚举对象必须放在首行,随后才可以定义属性、构造、普通方法
例:
//和C语言一样,也支持switch判断
enum Color {
RED,GREEN,BLUE;
}
public class Nice {
public static void main(String args[]) {
Color c = Color.BLUE ;
switch(c) { //枚举判断
case RED :
System.out.println("you like red");
break;
case GREEN :
System.out.println("you like green");
break;
case BLUE :
System.out.println("you like blue");
break;
default :
System.out.println("error");
break;
}
}
}
//实现与多例模式操作方式相同,代码更简洁
enum Color {
RED("红色"),GREEN("绿色"),BLUE("蓝色") ; //最上面
private String title; //属性
private Color(String title) {
this.title = title ;
}
public String toString() {
return this.title ;
}
}
public class Nice {
public static void main(String args[]) {
for(Color c : Color.values()) {
System.out.println(c); //直接输出对象调用toString
}
}
}
//枚举实现接口
interface IMessage {
public String getTitle() ;
}
enum Color implements IMessage{
RED("红色"),GREEN("绿色"),BLUE("蓝色") ; //最上面
private String title; //属性
private Color(String title) {
this.title = title ;
}
public String toString() {
return this.title ;
}
public String getTitle() {
return this.title ;
}
}
public class Nice {
public static void main(String args[]) {
IMessage msg = Color.BLUE ;
System.out.println(msg.getTitle());
}
}
//枚举可以在每个对象后面使用匿名内部类的形式实现抽象方法
interface IMessage {
public String getTitle() ;
}
enum Color implements IMessage{
RED("红色"){
public String getTitle() {
//为什么要加字符串呢,因为不加就会无法转换为String
return "为了转换String," + this ; //这是另外一个结构,所以不可以使用this.title
}
},GREEN("绿色"){
public String getTitle() {
return "为了转换String," + this ;
}
},BLUE("蓝色") {
public String getTitle() {
return "为了转换String," + this ;
}
};
private String title; //属性
private Color(String title) {
this.title = title ;
}
public String toString() {
return this.title ;
}
}
public class Nice {
public static void main(String args[]) {
IMessage msg = Color.BLUE ;
System.out.println(msg.getTitle());
}
}
//枚举里直接定义抽象方法
interface IMessage {
public String getTitle() ;
}
enum Color implements IMessage{
RED("红色"){
public String getTitle() {
return "you like " + this ;
}
},GREEN("绿色"){
public String getTitle() {
return "you like " + this ;
}
},BLUE("蓝色"){
public String getTitle() {
return "you like " + this ;
}
};
private String title; //属性
private Color(String title) {
this.title = title ;
}
public String toString() {
return this.title ;
}
public abstract String getTitle() ;//抽象方法,每一个枚举对象必须覆写抽象方法
}
public class Nice {
public static void main(String args[]) {
System.out.println(Color.RED.getTitle());
}
}
恩,功能很多,用不用随你(doge脸)。。。