后端开发 \ Java \ JDK新特性------枚举

JDK新特性------枚举

总点击128
简介:枚举优点 如果要求实例化有限个Color对象,可以采用之前学过的多例模式,将构造私有化,在类里实例化对象,然后用静态get方法获取对象,代码如下:

枚举优点

如果要求实例化有限个Color对象,可以采用之前学过的多例模式,将构造私有化,在类里实例化对象,然后用静态get方法获取对象,代码如下:

package CODE.Java新特性;

class Color

{

private String colour;

public static final int RED_FLAG=1; //需要定义为static final ,否则在静态get方法的case里无法使用

public static final int GREEN_FLAG=3;

public static final int BLUE_FLAG=5;

private static final Color Red=new Color("red");

private static final Color Green=new Color("green");

private static final Color Blue=new Color("blue");

private Color(String colour)

{

this.colour=colour;

}

public static Color getColor(int flag)

{

switch(flag)

{

case RED_FLAG:

return Red;

case GREEN_FLAG:

return Green;

case BLUE_FLAG:

return Blue;

default:

return null;

}

}

public String toString()

{

return this.colour;

}

}

public class Enum1

{

public static void main(String[] args)

{

Color color=Color.getColor(Color.RED_FLAG);

System.out.println(color); //red

}

}

可以看出用多例模式实例化对象有点麻烦,其实多例模式不实用,在JDK1.5引入枚举,枚举取代了多例模式,对上面例子用枚举代码如下:

enum Color //Color是一个枚举类

{

RED, //枚举对象

GREEN,

BLUE

}

public class Enum1

{

public static void main(String[] args)

{

System.out.println(Color.BLUE); //是对象,而不是对象地址,覆写了toString

}

}

使用enum关键字的枚举结构实际上是默认继承了Enum类的枚举类。即枚举实际上是个类。枚举默认是多例模式。


Enum类:

Enum类(抽象类)中有2大属性:


name :枚举对象名称


ordinal:枚举对象数字下标

public final int ordinal ( ) : 取得枚举对象下标

public final String name( ) : 取得枚举对象名称

既然enum定义的枚举类继承了Enum类,那么Enum类的name( )和ordinal( )方法枚举类都可以使用:

enum Color //Color是一个枚举类

{

RED, //枚举对象

GREEN,

BLUE

}

public class Enum1

{

public static void main(String[] args)

{

Color color=Color.GREEN;

System.out.println("对象:"+color.name()+ " 下标:"+color.ordinal()); //对象:GREEN 下标:1

}

}

取得所有枚举类对象:

枚举类.values( ); //实际上是数组 并且覆写了 toString

比如Color.values();

例子:

enum Color //Color是一个枚举类

{

RED, //枚举对象

GREEN,

BLUE

}

public class Enum1

{

public static void main(String[] args)

{

for(Color tmp:Color.values()) //取得所有的枚举对象

{

System.out.println(tmp); //RED GREEN BLUE 覆写了toString

}

}

}

面试:enum与Enum区别:

enum是一个关键字,Enum是一个抽象类

enum定义的枚举类继承了Eunm类

枚举中定其他结构:

枚举中若定义构造方法,构造方法必须使用private封装(枚举类是多例类,枚举类外部无法产生对象)

枚举中若定义其他结构,枚举类对象声明必须放在首行。

////枚举中定义其他结构

enum Color //Color是一个枚举类

{

RED("red"), GREEN("green"), BLUE("blue"); //枚举类对象声明放首行

private String clour;

private Color(String clour) //构造私有化

{

this.clour=clour;

}

public String toString()

{

return this.clour;

}

}

public class Enum1

{

public static void main(String[] args)

{

Color color=Color.GREEN;

System.out.println(color); //green,如果没有在枚举类覆写,输出的是Enum覆写的oString 为GREEN

}

}

枚举类实现接口:

////枚举类实现接口

interface IColor //接口

{

String func(); //抽象方法

}

enum Color implements IColor//枚举类实现接口

{

RED("red"), GREEN("green"), BLUE("blue"); //枚举对象

private String clour;

private Color(String clour) //构造私有化

{

this.clour=clour;

}

public String func() //覆写抽象方法

{

return this.clour;

}

}

public class Enum1

{

public static void main(String[] args)

{

IColor ic=Color.BLUE; //枚举类实现了接口后,每个枚举对象变为接口对象

System.out.println(ic.func()); //blue

}

}

当枚举类实现接口后,枚举中的对象自动变为接口对象。

switch支持枚举

////switch支持枚举

enum Sex

{

MALE,FEMALE

}

public class Enum1

{

public static void main(String[] args)

{

switch(Sex.MALE) //switch支持枚举对象,但是用处不大,因为已经知道对象

{

case FEMALE:

System.out.println("beautiful");

break;

case MALE:

System.out.println("handsome");

}

}

}

注:尽管switch支持枚举,但是用处不大。

枚举应用:


枚举里面声明了有限个对象,对一些类的实例化对象是有限个可以考虑枚举,比如性别,生肖等。

enum Sex

{

MALE,FEMALE

}

class Person

{

private String name;

private Sex sex; //注意是枚举对象,类型是枚举类

public Person(String name,Sex sex)

{

this.name=name;

this.sex=sex;

}

}

public class Enum1

{

public static void main(String[] args)

{

Person p=new Person("pick",Sex.MALE);

}

}

意见反馈 常见问题 官方微信 返回顶部