弄不懂枚举类是什么。

SilentHunter460 2020-04-11 12:37:57

public enum Day{
MONDAY,TUESDAY, WENDSDAY, THURSDAY,
FRIDAY, SATURDAY, SUNDAY
}


这个枚举类里面的MONDAY, TUESDAY……是什么东西?
如果是基本数据类型肯定要写声明,所以它们肯定不是。
如果是这个枚举类的实例化对象,为什么不用一个普通的class类解决?
...全文
321 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
1_bit 2020-04-22
  • 打赏
  • 举报
回复
引用 16 楼 1_bit的回复:
是个常量我打个比方 Day就像一个小鸡,鸡妈妈,他名字叫做Day 它自己有几个孩子,分别是MONDAY TUESDAY WENDSDAY...SUNDAY,这里面呢,每次小母鸡就会让老大开始做第一个排列位置,老二做第二个,以此类推, 其中MONDAY就是第0号,值就是0,TUESDAY就是1,而且他们的排列是出生就决定了的,所以是常量不懂在问我,手机打字就打这点吧
对了,他们的数据默认是整型常量
1_bit 2020-04-22
  • 打赏
  • 举报
回复
是个常量我打个比方 Day就像一个小鸡,鸡妈妈,他名字叫做Day 它自己有几个孩子,分别是MONDAY TUESDAY WENDSDAY...SUNDAY,这里面呢,每次小母鸡就会让老大开始做第一个排列位置,老二做第二个,以此类推, 其中MONDAY就是第0号,值就是0,TUESDAY就是1,而且他们的排列是出生就决定了的,所以是常量不懂在问我,手机打字就打这点吧
thinking code 2020-04-17
  • 打赏
  • 举报
回复
引用 14 楼 thinking code 的回复:
看一下我的第一篇博客,希望对你有帮助
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《最通俗易懂的枚举》, 一起来围观吧 https://blog.csdn.net/xy87940020/article/details/78211440
thinking code 2020-04-17
  • 打赏
  • 举报
回复
看一下我的第一篇博客,希望对你有帮助
qybao 2020-04-13
  • 打赏
  • 举报
回复
引用 12 楼 qq_16774199 的回复:
谢谢。这样的话,不如用一个普通类配合静态常量比较好。你说是不是?


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等等,你是不是要用额外的代码来判断参数是否合理?
SilentHunter460 2020-04-13
  • 打赏
  • 举报
回复
引用 11 楼 qybao 的回复:
[quote=引用 10 楼 qq_16774199 的回复:] 谢谢。好了。 但是如果我要System.out.println(day.mon + day.mon) 返回2,如何写?day.mon返回1,但不能参与各种运算也没什么意义。
java不像c有运算符重载,所以除了基本类型(基本类型的封装类型)外做不到加减乘除的,要自己写方法,就跟一般类的做法一样 [/quote] 谢谢。这样的话,不如用一个普通类配合静态常量比较好。你说是不是?

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;
}
qybao 2020-04-13
  • 打赏
  • 举报
回复
引用 10 楼 qq_16774199 的回复:
谢谢。好了。
但是如果我要System.out.println(day.mon + day.mon) 返回2,如何写?day.mon返回1,但不能参与各种运算也没什么意义。

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

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 day plus(day d) { //加个方法
for (day dd : day.values()) {
if ((this.value+d.value)%7 == dd.value) {
return dd;
}
}
return null;
}
}

public class Sample {
public static void main(String[] args) {
System.out.println(day.mon);
System.out.println(day.mon.plus(day.mon));
}
}
SilentHunter460 2020-04-13
  • 打赏
  • 举报
回复
引用 9 楼 qybao 的回复:
[quote=引用 8 楼 qq_16774199 的回复:] 不是不识别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);
    }
}
[/quote] 谢谢。好了。 但是如果我要System.out.println(day.mon + day.mon) 返回2,如何写?day.mon返回1,但不能参与各种运算也没什么意义。
qybao 2020-04-13
  • 打赏
  • 举报
回复
引用 8 楼 qq_16774199 的回复:
不是不识别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);
}
}
SilentHunter460 2020-04-13
  • 打赏
  • 举报
回复
引用 7 楼 qybao 的回复:
[quote=引用 4 楼 qq_16774199 的回复:] 你好, mon(1)括号里的数字代表什么? System.out.println(day.mon); 打印的还是mon,加那么多括号和数字和一个构造方法,好像没什么用?
你确定打印出来的是mon不是1?你的jdk什么版本?竟然不识别toString方法重写? mon(1)括号里的1就是构造方法的参数,前面不是说的很清楚了吗,可以省略自己用new调用构造方法,但是参数你不能省吧,系统不知道你想传什么参数吧?[/quote] 不是不识别toString重写,是String.format(“%d”, value)这句不对,然后我也不知道怎么改。 另外,我希望day.mon返回一个integer类型的数字1,day.mon返回2……麻烦写个例子给我。
qybao 2020-04-13
  • 打赏
  • 举报
回复
引用 4 楼 qq_16774199 的回复:
你好,
mon(1)括号里的数字代表什么?
System.out.println(day.mon); 打印的还是mon,加那么多括号和数字和一个构造方法,好像没什么用?

你确定打印出来的是mon不是1?你的jdk什么版本?竟然不识别toString方法重写?
mon(1)括号里的1就是构造方法的参数,前面不是说的很清楚了吗,可以省略自己用new调用构造方法,但是参数你不能省吧,系统不知道你想传什么参数吧?
  • 打赏
  • 举报
回复
把所有出现的类型全部列举出来
qybao 2020-04-11
  • 打赏
  • 举报
回复
枚举类里的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效率高?
SilentHunter460 2020-04-11
  • 打赏
  • 举报
回复
引用 3 楼 paullbm 的回复:
枚举类的作用体现在2个方面: 1.你可以把里面的静态成员,都当成其他语言中所说的常量,常量的作用就不用多说了吧? 2.限制或强化参数类型,提升代码安全性和阅读性。 试想一下你是一个工程师,定义了这么一个函数给初级程序员调用。该函数的参数用你现在给出的枚举常量来表示星期几更好,还是和初级程序员约定整数或者使用字符串来处理更好?
你好,常量也得有基本数据类型吧?比如说public final double PI = 3.14。 枚举出来那个Day.MONDAY我还是不明白它是个什么东西?用System.out.println(Day.MONDAY)打印出MONDAY,可我又没说MONDAY是一个字符串,怎么就给我打印出来了呢? 假如想让Day.MONDAY代表数字1,应该怎么办?
SilentHunter460 2020-04-11
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
枚举类里的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效率高?
你好, mon(1)括号里的数字代表什么? System.out.println(day.mon); 打印的还是mon,加那么多括号和数字和一个构造方法,好像没什么用?
paullbm 2020-04-11
  • 打赏
  • 举报
回复
枚举类的作用体现在2个方面: 1.你可以把里面的静态成员,都当成其他语言中所说的常量,常量的作用就不用多说了吧? 2.限制或强化参数类型,提升代码安全性和阅读性。 试想一下你是一个工程师,定义了这么一个函数给初级程序员调用。该函数的参数用你现在给出的枚举常量来表示星期几更好,还是和初级程序员约定整数或者使用字符串来处理更好?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧