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,而且他们的排列是出生就决定了的,所以是常量不懂在问我,手机打字就打这点吧
对了,他们的数据默认是整型常量.