1、枚举有受保护的构造方法:
protected Enum(String name,int ordinal){}
此构造方法不能被外部直接调用,只能被其子类访问,此构造方法为自动调用。
2、
public enum Color{
RED(10),BLUE(10); //枚举的元素对象
private Color(){} //因为枚举不允许外部调用构造方法,所以一定是私有的private。因此枚举的构造方法时通过元素对象来调用的
private int color; //枚举可以定义自己的属性
private Color(int color){
this.color=color;
}
}
//定义枚举类型Color,它同Class类,interface接口 属于同一层级的
public enum Color {
/**
* 注:枚举的构造方法是通过枚举元素调用的,比如这里的:RED(10)调用的是有参构造方法,BLUE调用的是无参构造方法
*/
RED(10),BLACK(20),BLUE;
private int color;
private Color(){
System.out.println("无参构造器");
}
private Color(int color){
this.color=color;
System.out.println("有参构造器");
}
}
package com.vince.EnumDemo;
import org.junit.Test;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.EnumSet;
public class EnumDemotest {
public static int RED=0X1;
public static int BLACK=0X2;
public static int BLUE=0X3;
private int color;
@Test
public void test1(){
color = RED;
color = 4; //如果不用枚举,这里定义的时候编译时不会报错的,但是在运行的时候因找不到这个4值而报错
}
//使用枚举定义一个新的类型
public Color colorenum;
@Test
public void test2(){
colorenum=Color.RED;
// colorenum=Color.BLACK;
// colorenum=Color.BLUE;
System.out.println(colorenum); //结果:RED
System.out.println(colorenum.name()); //结果:RED
System.out.println(colorenum.ordinal()); //ordinal()表示序号、编号,结果:0
Color[] values = Color.values(); //枚举类型的静态方法values().返回枚举的值数组
System.out.println(Arrays.toString(values)); //结果:[RED, BLACK, BLUE]
}
//
@Test
public void test3(){
EnumSet<Color> set = EnumSet.allOf(Color.class);
for(Color c:set){
System.out.println(c);
/**
* 结果:
有参构造器
有参构造器
无参构造器
RED
BLACK
BLUE
*/
}
EnumMap<Color,String> map = new EnumMap<Color, String>(Color.class);
map.put(Color.RED,"red");
map.put(Color.BLACK,"black");
map.put(Color.BLUE,"blue");
//System.out.println(map.get(Color.RED));
/**
结果:
有参构造器
有参构造器
无参构造器
red
*/
}
@Test
public void test4(){
System.out.println(Color.RED);
/**
* 结果:
有参构造器
有参构造器
无参构造器
RED
*/
}
}