34、枚举详解

知识点介绍
1、枚举可以实现一个或多个接口。枚举默认继承于java.lang.Enum类,而不是Object类。Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口
2、使用enum定义、非抽象的枚举默认会使用final修饰,因此枚举不能派生子类

3、枚举类的构造器只能使用private访问控制符

4、枚举类的所有势力必须在枚举类的第一行显示列出

下面是一个简单的枚举应用

public class Test{
    public static void main(String[] args) {
        SessonEnum e=Enum.valueOf(SessonEnum.class, "Spring");
        System.out.println(e.name());
    }
}

enum SessonEnum{
    Spring,Summer,Fall,Winter;
}

枚举类的成员变量、方法和构造器

 1 public class Hello {
 2     public static void main(String[] args) {
 3         SessonEnum e=Enum.valueOf(SessonEnum.class, "Spring");
 4         System.out.println(e.getName());
 5     }
 6 }
 7
 8
 9 enum SessonEnum{
10     Spring("春"),Summer("夏"),Fall("秋"),Winter("冬");
11     private  final String name;
12     private SessonEnum(String name){
13         this.name=name;
14     }
15     public String getName(){
16         return name;
17     }
18 }

实现接口的枚举

1、由枚举类来实现接口里的方法——所有枚举值实现接口都是调用方法都有相同的行为

 1 interface SessonInfo{
 2     void info();
 3 }
 4
 5 enum SessonEnum implements SessonInfo {
 6
 7     Spring("春"),Summer("夏"),Fall("秋"),Winter("冬");
 8
 9
10     private  final String name;
11     private SessonEnum(String name){
12         this.name=name;
13     }
14     public String getName(){
15         return name;
16     }
17     @Override
18     public void info() {
19         System.out.println("这里是公用接口的实现");
20
21     }
22 }
23
24 public class Test{
25     public static void main(String[] args) {
26         SessonEnum spring=Enum.valueOf(SessonEnum.class, "Spring");
27         SessonEnum summer=SessonEnum.Summer;
28         spring.info();
29         summer.info();
30     }
31 }

输出结果:

这里是公用接口的实现
这里是公用接口的实现

2、分别由每个枚举值来实现接口

 1 interface SessonInfo{
 2     void info();
 3 }
 4
 5 enum SessonEnum implements SessonInfo {
 6
 7     Spring("春"){
 8         @Override
 9         public void info() {
10             System.out.println("这里是春季");
11         }
12     },Summer("夏"){
13         @Override
14         public void info() {
15             System.out.println("这里是夏季");
16         }
17
18     },Fall("秋"){
19         @Override
20         public void info() {
21             System.out.println("这里是秋季");
22         }
23     },Winter("冬"){
24         @Override
25         public void info() {
26             System.out.println("这里是冬季");
27         }
28     };
29
30
31     private  final String name;
32     private SessonEnum(String name){
33         this.name=name;
34     }
35     public String getName(){
36         return name;
37     }
38 }
39
40 public class Hello {
41     public static void main(String[] args) {
42         SessonEnum spring=Enum.valueOf(SessonEnum.class, "Spring");
43         SessonEnum summer=SessonEnum.Summer;
44         spring.info();
45         summer.info();
46     }
47 }

输出结果:

这里是春季
这里是夏季

枚举抽象类

假设有一个Operation枚举类,它的4个枚举值PLUS、MINUS、TIMES、DIVIDE分别代表加、减、乘、除4种运算,该枚举类需要定义一个eval()方法来完成计算

 1 public class Test{
 2     public static void main(String[] args) {
 3         System.out.println("1+2="+Operation.PLUS.eval(1, 2));
 4         System.out.println("5-3="+Operation.MINUS.eval(5, 3));
 5         System.out.println("3*4="+Operation.TIMES.eval(3, 4));
 6         System.out.println("10-2="+Operation.DIVIDE.eval(10, 2));
 7     }
 8 }
 9
10 enum Operation{
11     PLUS{
12         public double eval(double x, double y) {
13             return x+y;
14         }
15     },
16     MINUS{
17         public double eval(double x, double y) {
18             return x-y;
19         }
20     },
21     TIMES{
22         @Override
23         public double eval(double x, double y) {
24             return x*y;
25         }
26     },
27     DIVIDE{
28         @Override
29         public double eval(double x, double y) {
30             return x/y;
31         }
32     };
33     public abstract double eval(double x,double y);
34 }

输出结果:

1+2=3.0
5-3=2.0
3*4=12.0
10-2=5.0

时间: 2024-10-11 02:41:35

34、枚举详解的相关文章

java 枚举详解

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”. 在java中如何更好的使用这些“数据集”呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法. package com.ljq.test; /** * 枚举用法详解 * * @author jiqinlin * */public class TestEnum {    /**     * 普通

JAVA基础——枚举详解

前言: 在第一次学习面向对象编程时,我记得最深的一句话就是"万物皆对象".于是我一直秉承着这个思想努力的学习着JAVA,直到学习到枚举(Enum)时,看着它颇为奇怪的语法--我一直在想,这TM是个什么鬼???当时学习OOP时也是被类啊接口什么的整的有点昏头转向的于是就把这个小细节忽略掉了.后来到了公司工作后慢慢的又需要用上枚举了,看着它一副神秘兮兮的样子我还是决定要好好的深挖一下!以下链接是了解枚举时所参考的博客.如发现本文有错误或知识遗漏欢迎在评论中指正! 反编译那些事儿(二)-枚举

java基础篇---枚举详解

在JDK1.5之前,JAVA可以有两种方式定义新类型:类和接口,对于大部分面向对象编程,有这两种似乎就足够了,但是在一些特殊情况就不合适.例如:想要定义一个Color类,它只能有Red,Green,Blue三种,其他值则是错误,在JDK1.5之后便引入枚举类型. 枚举其实就是一种类型,跟int, char 这种差不多,就是定义变量时限制输入的,你只能够赋enum里面规定的值. public enum Color{ RED,GREEN,BLUE ; // 定义三个枚举的类型 }; 枚举中有三个取值

Java学习系列(二十二)Java面向对象之枚举详解

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/45332565 一.前言 今天我们来讲讲枚举,希望通过这篇博客大家能对枚举有个更全面的了解.枚举是一种实例(大写)数固定的类(不能再创建实例),多用于确定的状态数(如:鼠标上下左右.IM消息已读未读).类型数(如:系统.聊天.添加好友消息,我的他的).模式数(回复.评论模式,刷选.全部模式)等等.枚举和类一样,同样有抽象类.可以实现接口.可含内部类.初始化块,值得注意的是:枚举的构造器无论

2020.1.25 Java枚举详解

Java枚举 枚举类型是什么 JDK5引入了一种新特性,关键字enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这就是枚举类型. 一个枚举的简单例子 enum SeasonEnum { SPRING,SUMMER,FALL,WINTER; } 枚举类的常用方法 Enum 常用方法有以下几种: name():返回enum实例声明时的名字 ordinal();返回一个int值,表示enum 实例在声明的次序 equals();返回布尔值,enum实例

MYSQL 5.6.34配置文件详解

[client] port = 3306     #客户端端口号 socket = /data/3306/mysql.sock  #socket文件是linux/unix系统特有的,用户在该环境下的客户端连接可以不通过tcp/ip网络,而直接使用socket文件连接. [mysql] no-auto-rehash    #仅仅允许使用键值的update和deletes [mysqld]          #mysqld组包括了mysqld服务启动的参数,它涉及的方面很多,其中包括mysql的目录

java枚举使用详解

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”. 在java中如何更好的使用这些“数据集”呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法. package com.ljq.test; /** * 枚举用法详解 * * @author jiqinlin * */public class TestEnum { /** * 普通枚举 * *

设计模式 - 适配器模式(adapter pattern) 枚举器和迭代器 详解

适配器模式(adapter pattern) 枚举器和迭代器 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考适配器模式(adapter pattern): http://blog.csdn.net/caroline_wendy/article/category/2281679 Java早期版本的枚举器(Enumeration)和现在的迭代器(Iterator) 可以使用适配器(adapter)进行转换. 适配器(adapter)代码: /** *

C语言--enum,typedef enum 枚举类型详解

原文:http://z515256164.blog.163.com/blog/static/32443029201192182854300/ 有改动 C语言详解 - 枚举类型 注:以下全部代码的执行环境为VC++ 6.0 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是: #define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6