版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29451823/article/details/82888555
**在JDK1.5 之前,我们定义常量都是: public static final… 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 **
- 自定义枚举
package cn.itcast.test;
/**
* 自定义枚举方法
*
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public enum MyEnumTest1 {
CJJ("帅气", 1), LX("成熟", 2), LQ("老气", 3);
private String name;
private Integer index;
// 其中构造方法的访问权限必须比类的权限小
private MyEnumTest1(String name, Integer index) {
this.name = name;
this.index = index;
}
public static String getName(Integer index) {
for (MyEnumTest1 c : MyEnumTest1.values()) {
if (c.getIndex() == index) {
return c.getName();
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getIndex() {
return index;
}
public void setIndex(Integer index) {
this.index = index;
}
}
- 主函数运行
package cn.itcast.test;
/**
* 主函数入口
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public class MainTest {
public static void main(String[] args) {
for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
System.out.println("第"+i+"个元素是:"+MyEnumTest1.getName(i));
}
}
}
3.运行结果
4.重写ToString 方法
package cn.itcast.test;
/**
* 主函数入口
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public class MainTest {
public static void main(String[] args) {
for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
System.out.println("第"+i+"个元素是:"+MyEnumTest1.getName(i));
//根据具体的枚举名称来寻找对应的枚举常量
MyEnumTest1 test = MyEnumTest1.GetMyEnumTest1("CJJ");
System.out.println(test);
}
}
}
运行效果:
5.实现接口
自定义接口MyInterceptor
package cn.itcast.test;
public interface MyInterceptor {
void printf();
String getInfo();
}
枚举实现接口
package cn.itcast.test;
/**
* 自定义枚举方法
*
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public enum MyEnumTest1 implements MyInterceptor{
CJJ("帅气", 1), LX("成熟", 2), LQ("老气", 3);
private String name;
private Integer index;
// 其中构造方法的访问权限必须比类的权限小
private MyEnumTest1(String name, Integer index) {
this.name = name;
this.index = index;
}
public static String getName(Integer index) {
for (MyEnumTest1 c : MyEnumTest1.values()) {
if (c.getIndex() == index) {
return c.getName();
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getIndex() {
return index;
}
public void setIndex(Integer index) {
this.index = index;
}
public static MyEnumTest1 GetMyEnumTest1(String input) {
return valueOf(input);
}
@Override
public String toString() {
return "MyEnumTest1[ " + this.index + this.name + " ] ";
}
@Override
public void printf() {
//name 代表枚举中常量中具体的参数
System.out.println(this.index + this.name);
}
@Override
public String getInfo() {
//其中name()代表具体的枚举种常量名
return this.name();
}
}
主函数类
package cn.itcast.test;
/**
* 主函数入口
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public class MainTest {
public static void main(String[] args) {
// for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
// System.out.println("第"+i+"个元素是:"+MyEnumTest1.getName(i));
// //根据具体的枚举名称来寻找对应的枚举常量
// MyEnumTest1 test = MyEnumTest1.GetMyEnumTest1("CJJ");
// System.out.println(test);
// }
MyInterceptor test2 = MyEnumTest1.CJJ;
test2.printf();
System.out.println(test2.getInfo());
}
}
运行结果
6.在接口内部写枚举实现接口
package cn.itcast.test;
/**
* 枚举在接口的内部
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public interface AtInterfaceInnnerEnum {
enum Coffee implements AtInterfaceInnnerEnum {
LEFT_COFFEE,HEAD_COFFEE,RIGHT_COFFEE,BOTTON_COFFEEE;
}
enum Dessert implements AtInterfaceInnnerEnum {
LIKE_DESSERT,HEAT_DESSERT;
}
}
主函数
package cn.itcast.test;
import cn.itcast.test.AtInterfaceInnnerEnum.Dessert;
/**
* 主函数入口
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public class MainTest {
public static void main(String[] args) {
for(AtInterfaceInnnerEnum.Coffee c : AtInterfaceInnnerEnum.Coffee.values()) {
System.out.println(c);
}
AtInterfaceInnnerEnum inEnum = AtInterfaceInnnerEnum.Coffee.BOTTON_COFFEEE;
System.out.println(inEnum);
AtInterfaceInnnerEnum inEnum1 = AtInterfaceInnnerEnum.Dessert.LIKE_DESSERT;
System.out.println(inEnum1);
}
}
运行结果
7.java.util.EnumSet和java.util.EnumMap是两个枚举集合。
package cn.itcast.test;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.Map;
/**
* 主函数入口
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public class MainTest {
public static void main(String[] args) {
//创建一个元素就是MyEnumTest1类型的元素的集合
EnumSet st1 = EnumSet.allOf(MyEnumTest1.class);
System.out.println(st1);//输出[MyEnumTest1[ 1帅气 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老气 ] ]
//创建一个元素指定为MyEnumTest1类型的空集合
EnumSet st2 = EnumSet.noneOf(MyEnumTest1.class);
System.out.println(st2);//输出[]
st1.add(MyEnumTest1.CJJ);
st2.add(MyEnumTest1.LQ);
System.out.println(st1);//输出[MyEnumTest1[ 1帅气 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老气 ] ]
System.out.println(st2);//输出[MyEnumTest1[ 3老气 ] ]
EnumSet st3 = EnumSet.of(MyEnumTest1.CJJ,MyEnumTest1.LQ);//插入几个数据就有几个
System.out.println(st3);//输出[MyEnumTest1[ 1帅气 ] , MyEnumTest1[ 3老气 ] ]
EnumSet<MyEnumTest1> st4 = EnumSet.range(MyEnumTest1.CJJ, MyEnumTest1.LQ);//插入数据的范围
System.out.println(st4);//输出[MyEnumTest1[ 1帅气 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老气 ] ]
//EnumMap集合
EnumMap<MyEnumTest1,String> ma1 = new EnumMap<MyEnumTest1,String>(MyEnumTest1.class);
System.out.println("map的枚举"+ma1);//输出map的枚举{}
ma1.put(MyEnumTest1.CJJ, "爱你额");
ma1.put(MyEnumTest1.LQ, "么么哒");
System.out.println("map的枚举"+ma1);
for(MyEnumTest1 mx : ma1.keySet()) {//用来遍历所有的KeySet()
System.out.println("第一种"+ma1.get(mx));//打印对应的value值
}
//entrySet() 这个方法是将map里的每一个键值对取出来封装成一个Entry对象在存到一个Set里面。
Iterator<Map.Entry<MyEnumTest1,String>> it = ma1.entrySet().iterator();
while(it.hasNext()) {
Map.Entry<MyEnumTest1,String> entry = it.next();
System.out.println("第二种"+"key="+entry.getKey()+"value="+entry.getValue());
}
for(Map.Entry<MyEnumTest1,String> entry : ma1.entrySet()) {
System.out.println("第三种"+entry.getValue());
entry.setValue("123");
System.out.println("改变value值后第三种"+entry.getValue());
}
}
}