java枚举后面括号是什么意思_浅谈java枚举类

更新时间:2023-07-08 14:06:49 阅读: 评论:0

java枚举后⾯括号是什么意思_浅谈java枚举类
>>> 学习交流群 < < <
⼀、什么情况下使⽤枚举类?
有的时候⼀个类的对象是有限且固定的,这种情况下我们使⽤枚举类就⽐较⽅便?
雾霾成分⼆、为什么不⽤静态常量来代替枚举类?
枚举类更加直观,类型安全。使⽤常量会有以下⼏个缺陷:类型不安全。若⼀个⽅法中要求传⼊季节这个参数,⽤常量的话,形参就是int类型,开发者传⼊任意类型的int类型值就⾏,但是如果是枚举类型的话,就只能传⼊枚举类中包含的对象。
没有命名空间。开发者要在命名的时候以SEASON_开头,这样另外⼀个开发者再看这段代码的时候,才知道这四个常量分别代表季节。
三、枚举类⼊⼝
先看⼀个简单的枚举类。enum和class、interface的地位⼀样
使⽤enum定义的枚举类默认继承了java.lang.Enum,⽽不是继承Object类。枚举类可以实现⼀个或多个接⼝。
枚举类的所有实例都必须放在第⼀⾏展⽰,不需使⽤new 关键字,不需显式调⽤构造器。⾃动添加public static final修饰。
使⽤enum定义、⾮抽象的枚举类默认使⽤final修饰,不可以被继承。
枚举类的构造器只能是私有的。
四、枚举类介绍
枚举类内也可以定义属性和⽅法,可以是静态的和⾮静态的。
package enumca;
public enum SeasonEnum {
SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");
private final String name;
无度不丈夫
private SeasonEnum(String name)
{
this.name = name;
共青团简介}
public String getName() {
return name;
}
}
实际上在第⼀⾏写枚举类实例的时候,默认是调⽤了构造器的,所以此处需要传⼊参数,因为没有显式申明⽆参构造器,只能调⽤有参数的构造器。
构造器需定义成私有的,这样就不能在别处申明此类的对象了。枚举类通常应该设计成不可变类,它的Field不应该被改变,这样会更安全,⽽且代码更加简洁。所以我们将Field⽤private final修饰。
五、枚举类实现接⼝
枚举类可以实现⼀个或多个接⼝。与普通类⼀样,实现接⼝的时候需要实现接⼝中定义的所有⽅法,若没有完全实现,那这个枚举类就是抽象的,只是不需显式加上abstract修饰,系统化会默认加上。
package enumca;
public enum Operation {
PLUS{
@Override
public double eval(double x, double y) {
return x + y;
}
},
MINUS{
@Override
public double eval(double x, double y) {
return x - y;
}
民营运营商
},
TIMES{
@Override
public double eval(double x, double y) {
return x * y;
}
},
DIVIDE{
@Override
public double eval(double x, double y) {
return x / y;
}
};
/*** 抽象⽅法,由不同的枚举值提供不同的实现。* @param x* @param y* @return*/ public abstract double eval(double x, double y);
public static void main(String[] args) {
System.out.println(Operation.PLUS.eval(10, 2));
System.out.println(Operation.MINUS.eval(10, 2));
System.out.println(Operation.TIMES.eval(10, 2));
犯错的英文
System.out.println(Operation.DIVIDE.eval(10, 2));
雪梨功效}
}
Operatio类实际上是抽象的,不可以创建枚举值,所以此处在申明枚举值的时候,都实现了抽象⽅法,这其实是匿名内部类的实现,花括号
部分是⼀个类体。我们可以看下编译以后的⽂件。
共⽣成了五个class⽂件,这样就证明了PLUS,MINUS,TIMES,DIVIDE是Operation的匿名内部类的实例。
六、switch语句⾥的表达式可以是枚举值
Java5新增了enum关键字,同时扩展了switch。
package enumca;
public class SeasonTest {
public void judge(SeasonEnum s)
思恋
{
switch(s)
{
ca SPRING:
System.out.println("春天适合踏青。");
break;
ca SUMMER:
System.out.println("夏天要去游泳啦。");
break;
御剑情缘奇遇ca FALL:
System.out.println("秋天⼀定要去旅游哦。");
break;
ca WINTER:
System.out.println("冬天要是下雪就好啦。");
break;
}
}
public static void main(String[] args) {
SeasonEnum s = SeasonEnum.SPRING;
SeasonTest test = new SeasonTest();
test.judge(s);
}
}
ca表达式中直接写⼊枚举值,不需加⼊枚举类作为限定。

本文发布于:2023-07-08 14:06:49,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1073058.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时候   实现   类型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图