Java 与 C 的枚举

枚举是什么,用我自己的话说就是一个变量可能不仅仅只有一个值,而枚举则可以把它们存在的情况都一一列举出来
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有 enumEnum ,那么它们区别是什么?
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脸)。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值