枚举类

enum SeasonEnum  //这是一个枚举类,有四个枚举值
{
        SPRING,SUMMER,FALL,WINTER;
}
public class EnumTest
{
        public void judge(SeasonEnum s)
        {
                switch(s)
                {
                        case SPRING:
                                System.out.println("春天");
                                break;
                        case SUMMER:
                                System.out.println("夏天");
                                break;
                        case FALL:
                                System.out.println("秋天");
                                break;
                        case WINTER:
                                System.out.println("冬天");
                                break;
                }
        }
 public static void main(String[] args)
        {
                for (SeasonEnum s : SeasonEnum.values())
                {
                        System.out.println(s);
                }
                new EnumTest().judge(SeasonEnum.SPRING);
        }
}

枚举类有两种:抽象枚举类和非抽象枚举类。

抽象枚举类:这个枚举类里要有抽象方法,但是不一定必须有

非抽象枚举类:默认使用final修饰,因此枚举类不能派生子类,但是,不是说抽象类枚举类也不能派生子类。

enum关键字!

枚举类是一个特殊的类,但是它也有类Feild,方法,构造器

枚举类的实例只能是枚举值,枚举类创建实例的时候不是使用new来创建的,枚举值就是实例。

enum Gender
{
        MALE,FEMALE;//这是两个枚举值
        public String name;//可见枚举类也有Feild,这是一个实例Feild(实例变量)
}
public class GenderTest
{
        public static void main(String[] args)
        {
                //通过Enum的valueOf方法,来获得指定的枚举类的枚举值
                Gender g = Enum.valueOf(Gender.class,"FEMALE"); //取出FEMALE枚举值给g引用变量
                //直接为枚举值的Feild赋值
                g.name = "女";
                System.out.println(g + "代表:" + g.name);
                //输出结果是”FEMALE 代表:女“
        }
}//缺点:FEMALE枚举值可能会被输出成“男”,需要想办法把枚举值给固定了,就是让MALE只能输出男,FEMALE只能输出女

上面的缺点很明显,我们可以改进,让枚举类使用setter方法和getter方法

enum Gender
{
        MALE,FEMALE;
        private String name;
        public void setName(String name)
        {
                switch(this)//this可能是MALE和FEMALE这两个枚举值
                {
                        case MALE:
                                if(name.equals("男"))
                                {
                                        this.name = name;
                                }
                                else
                                {
                                        System.out.println("参数错误");
                                }
                        case FEMALE:
                                if(name.equals("女"))
                                {
                                        this.name = name;
                                }
                                else
                                {
                                        System.out.println("参数错误");
                                }
                }
        }
        public String getName()
        {
                return this.name;
        }
}
public class GenderTest2
{
        public static void main(String[] args)
        {
                Gender g = Enum.valueOf(Gender.class,"FEMALE");
                g.setName("女");
                System.out.println(g + "代表" + g.getName());
                g.setName("男");
                System.out.println(g + "代表" + g.getName());
        }
}
                                                                                             44,1          Bot

上面的设计其实还是不够好,虽然当我们使用FEMALE等于男是,会显示参数错误,但是我们一般将枚举类设计成不可变类,它的Field值不应该被改变,这样更安全和简洁,为此,我们的枚举类中的Field一般都是用pivate final来修饰

因为我们将所有的Field都用final修饰了,所以,我们必须在构造器中为这些Field指定初始值。

下面是一个在构造器中为枚举类指定初始值

enum Gender
{
        MALE("男"),FEMALE("女");
        //枚举值,枚举值是枚举类的实例,现在就是在给实例赋了一个初始值
        //你也许看不懂,没有看出来,这哪里创建实例了?,其实枚举类创建实例就是这样,不使用new
        //这两个枚举值其实已经调用了下面的构造器了
        private final String name;//Field
        private Gender(String name)//构造器
        {
                this.name = name;
        }
        public String getName()
        {
                return this.name;
        }
}
public class GenderTest3
{
        public static void main(String[] args)
        {
                //创建了一个Gender类型的引用变量b
                //使用Enum.valueOf方法,来调用FEMALE这个实例,或者说是对象,或者说是枚举值
                //Gender.class 干嘛用到还不知道
                Gender b = Enum.valueOf(Gender.class,"FEMALE");
                System.out.println(b.getName());
        }
}

上面运行:

[[email protected] java]# java GenderTest3

发现:我们创建了实例FEMALE就只能输出女

枚举类,布布扣,bubuko.com

时间: 2024-10-06 01:34:11

枚举类的相关文章

JavaSE复习_6 枚举类

△单例类是指只有一个实例,而枚举类实际上就是有有限个实例的类,在类里已经把实例定义好了. △枚举类的三种创建形式: 1) enum Week { MON,TUE,WED;//枚举类有默认构造函数创建的三个实例} } 2) enum Week { MON("星期一"), TUE( "星期二"),WED ("星期三" ); //具有参数的构造函数 private String name; Week(String name) { this. name=

zend framework获取数据库中枚举类enum的数据并将其转换成数组

在model中建立这样的模型,在其中写入获取枚举类的方法 class Student extends Zend_Db_Table{ protected $_name ='student'; protected $_primary ='id'; function getPartyEnum($enumname){ //适配器并获取数据 $db = $this->getAdapter(); $db->query("SET NAMES GBK"); $sql = $db->q

包含抽象方法的枚举类

public enum Operation { PLUS,MINUS,TIMES,DIVIDE;//每一个枚举值都是一个实例 double eval(double x,double y)//我们定义一个方法,实现不同的操作 { switch(this) { case PLUS: return x + y; case MINUS: return x - y; case TIMES: return x * y; case DIVIDE: return x % y; default: return 0

python,使用枚举类,面向对象高级编程

python #针对常量 #枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例. from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) #这样我们就获得了Month类型的枚举类 for name, member in Month.__members__.items():

java 枚举类 enum 总结

枚举定义: enum是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把这些量说明为整型, 字符型或其它类型显然是不妥当的.为此,C语言提供了一种称为“枚举”的类型.在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变 量取值不能超过定义的范围.应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型. java中枚举类总

枚举类专题(有源代码)

简介:JDK1.5之前需要自定义枚举类,JDK1.5新增的enum关键字用于定义枚举类,若枚举只有一个成员,则可以作为一种单例模式的实现方式 枚举类的属性:枚举类对象的属性不应允许被改动,所以应该使用private final修饰 ·枚举类的使用private final修饰的属性应该在构造器中为其赋值 ·若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数 Enum枚举类: ·必须在枚举类的第一行声明枚举类对象. ·枚举类和普通类的区别: 1.使用enum定义的枚举类默认继

JAVA学习--枚举类的使用

* 一.枚举类  * 1.如何自定义枚举类  * 2.如何使用enum关键字定义枚举类  *     >常用的方法:values() valueOf(String name)  *     >如何让枚举类实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同.(相当于让每个对象重写抽象方法) 1 //普通枚举类 2 class Season{ 3 //1.提供类的属性,声明为private final 4 private final String seasonName; 5 p

C# DropDownList 绑定枚举类

第一种 DropDownList_Franchiser_Type.DataSource = ListTypeForEnum(); DropDownList_Franchiser_Type.DataValueField = "value"; DropDownList_Franchiser_Type.DataTextField = "text"; DropDownList_Franchiser_Type.DataBind() //转换枚举类 public static

java 基础(枚举类)

1.枚举类也是一个类,也可以有属性,等等: public enum SeasonEnum{ SPRING, SUMMER, FALL, WINTER; } 这个是没有其他属性的. package com.creditharmony.adapter.testCase.test; public class EnumTest { public void judge(SeasonEnum s) { switch (s) { case SPRING: System.out.println("春天"