啥是枚举类?

public enum Day{

    MONDAY,TUESDAY, WENDSDAY, THURSDAY, 

    FRIDAY, SATURDAY, SUNDAY

}

这个枚举类里面的MONDAY, TUESDAY……是什么东西?
如果是基本数据类型肯定要写声明,所以它们肯定不是。
如果是这个枚举类的实例化对象,为什么不用一个普通的class类解决?

枚举类里的MONDAY,TUESDAY是个枚举类的静态实例,是对象类型不是基本类型。
这是枚举类的特殊语法,自动调用枚举类的构造方法,如果用普通类,你还要自己一个一个new,麻烦。
比如
public enum day { 
mon(1),tue(2),wen(3),thu(4),fri(5),sat(6),sun(0);//自动调用构造方法创建静态实例
    private int value;//属性
    private day(int value) {this.value=value;}
    public String toString() {
        return String.format(“%d”, value);
    }
}
在main方法打印看看
System.out.println(day.mon); 

如果用普通类,mon等等就要多写一些public static调用new构造方法的代码,是不是不如用enum效率高?

枚举类的作用体现在2个方面:
1.你可以把里面的静态成员,都当成其他语言中所说的常量,常量的作用就不用多说了吧?
2.限制或强化参数类型,提升代码安全性和阅读性。
试想一下你是一个工程师,定义了这么一个函数给初级程序员调用。该函数的参数用你现在给出的枚举常量来表示星期几更好,还是和初级程序员约定整数或者使用字符串来处理更好?

你好,
mon(1)括号里的数字代表什么?
System.out.println(day.mon); 打印的还是mon,加那么多括号和数字和一个构造方法,
资源下载好像没什么用?

你好,常量也得有基本数据类型吧?比如说public final double PI = 3.14。
枚举出来那个Day.MONDAY我还是不明白它是个什么东西?用System.out.println(Day.MONDAY)打印出MONDAY,可我又没说MONDAY是一个字符串,怎么就给我打印出来了呢?
假如想让Day.MONDAY代表数字1,应该怎么办?

把所有出现的类型全部列举出来'你确定打印出来的是mon不是1?你的jdk什么版本?竟然不识别toString方法重写?
mon(1)括号里的1就是构造方法的参数,前面不是说的很清楚了吗,可以省略自己用new调用构造方法,但是参数你不能省吧,系统不知道你想传什么参数吧?

不是不识别toString重写,是String.format(“%d”, value)这句不对,然后我也不知道怎么改。
另外,我希望day.mon返回一个integer类型的数字1,day.mon返回2……麻烦写个例子给我。

不对是因为双引号的问题,改成英文的双引号就可以了
给你个完整例子,你再试试吧

enum day {

mon(1),tue(2),wen(3),thu(4),fri(5),sat(6),sun(0);//自动调用构造方法创建静态实例

    private int value;//属性

    private day(int value) {this.value=value;}

    public String toString() {

        return String.format("%d", value);

    }

}

 

public class Sample {

    public static void main(String[] args) {

        System.out.println(day.mon);

    }

}

谢谢。好了。
但是如果我要System.out.println(day.mon + day.mon) 返回2,如何写?day.mon返回1,但不能参与各种运算也没什么意义。

java不像c有运算符重载,所以除了基本类型(基本类型的封装类型)外做不到加减乘除的,要自己写方法,就跟一般类的做法一样

谢谢。这样的话,不如用一个普通类配合静态常量比较好。你说是不是?
 

public class theDay {

    public static final int mon = 1;

    public static final int tue = 2;

    public static final int wen = 3;

    public static final int thr = 4;

    public static final int fri = 5;

    public static final int sat = 6;

    public static final int sun = 7;

}

那就看你怎么考虑程序的健壮性了
如果用枚举类型,比如
methodA(day d) {} //如果传入参数不是枚举类型,编译就会报错
而如果不是枚举类型
methodB(int d) {}//如果参数传入你个8或9等等,你是不是要用额外的代码来判断参数是否合理?

是个常量我打个比方
Day就像一个小鸡,鸡妈妈,他名字叫做Day
它自己有几个孩子,分别是MONDAY TUESDAY WENDSDAY...SUNDAY,这里面呢,每次小母鸡就会让老大开始做第一个排列位置,老二做第二个,以此类推,
其中MONDAY就是第0号,值就是0,TUESDAY就是1,而且他们的排列是出生就决定了的,所以是常量不懂在问我,手机打字就打这点吧

对了,他们的数据默认是整型常量.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值