java枚举

java枚举,第1张

这个枚举里面写了如下方法public

abstract

TrafficLamp

nextLamp();

以上为一个抽象方法,需要实现的,所以下面的RED有方法体(匿名类的概念),是为了实现抽象方法。

RED(30){

public

TrafficLamp

nextLamp(){

return

GREEN;

}

而30是传入int参数,因为下面写了有参的构造方法:

private

int

time;

private

TrafficLamp(int

time){thistime

=

time;

time=30这是RED的一个属性。

你可以把枚举看做一个类,而它的每个实例都是该类的对象,而且此对象是不可变的。

怎么解释枚举呢。枚举的定义就是一个有限值的集合。一个枚举类型的变量它的值只可能是类型值中的一个。

所以 Drection 是类型名,Drection drection 则是此类型的变量,变量的值应该是类型里边所列的值中的一个,如果单写个 WEST跟本不知道它是什么,所以要加类名限定 即 DrectionWEST 于是,对一个枚举变量赋值的样子就像这样。

 if(drection==DrectionWEST) return true; String west="WEST"; drectiontoString()equals(west) return true;

Java的enum(枚举)和其他语言不同。Java的enum也是一个正式的class,也有它的属性,函数,等等。这里

private String name;

就是一个成员,而

private CupShop(String name){}

就是一个构造函数(constructor) enum的结构是先要声明一些枚举的值,然后用分号隔开,然后声明所有成员及函数。而cup1("num1")的意思就相当于

public static final CupShop cup1 = new CupShop("num1");

如果这样理解的话,就知道enum其实就是一个class,只不过为程序员提供了一个简便的创建方式。当然,一个enum的constructor必须是private的,因为只有enum内部可以声明enum可能取的值。

把枚举转换成int型就可以了 。

枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值: sun=5;mon=2;sun=mon; 都是错误的。

枚举元素本身由系统定义了一个表示序号的数值,从0 开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1, …,sat值为6。

String str = sun;

int week;

if(strequals(枚举值)){

week = 0;

}

static final通常跟的是一个int类型的常数,所以有时候可以用int型代替枚举

在有些时候需要输出这个枚举量的名字(比如January),上面的方法输出的是int值,用类的话可以把名字一起输出

总的来说前者消耗资源比较少,后者更符合枚举的定义

枚举的确是一个类,在JDK14及以前,没有enum这个用法,那时候都是使用类来建立的,在《Java编程思想》中介绍了一类写法(详见第三版的章节813群组常量);JDK5以后,enum被引入,本质上就是一个类,所以可以被继承,总体思路和第三版这个写法类似,只是换了个名字(《Java编程思想》第四版第19章专门讲这个)

补充:我把早期的例子给出吧,你看一下,这就是早期的枚举的方法:

public final class Month{

private String name;

private Month (String nm){name=nm;}

public String toString(){return name;}

public static final Month

JAN=new Month("January"),

FEB=new Month("February"),

MAR=new Month("March"),

APR=new Month("April"),

MAY=new Month("May"),

JUN=new Month("June"),

JUL=new Month("July"),

AUG=new Month("August"),

SEP=new Month("September"),

OCT=new Month("October"),

NOV=new Month("November"),

DEC=new Month("December");

public static final Month month[]={

JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC

};

public static final Month number(int ord){

return month[ord-1];

}

//main

public static void main(String args[]){

Month m=MonthJAN;

Systemoutprintln(m);

m=Monthnumber(12);

Systemoutprintln(m);

Systemoutprintln(m==MonthDEC);

Systemoutprintln(mequals(MonthDEC));

Systemoutprintln(Monthmonth[3]);

Systemoutprintln(MonthAPR);

}

}

以上就是关于java枚举全部的内容,包括:java枚举、怎么使用java中的枚举方法、Java枚举问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10154186.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存