java枚举类型的用法(java基础-枚举类型)
以下为本人的学习笔记
1.认识枚举枚举不是类 ,是跟类 ,接口同级别的类型 ,
枚举就是限制某个类型的变量的取值只能为诺干个固定值中的一个 ,否则编译器就会报错;
枚举可以让编译器在编译时就可以控制源程序赋给的非法值 ,使用普通变量的方式在开发阶段无法实现这一目标
在JDK1.5之后 ,使用关键字enum定义一种新的类型 ,称为枚举类型 ,枚举是列举出来 ,选其中的一个
枚举的本质是一个继承了Enum类的子类,JVM编译器把枚举编译后生成一个final class
2.枚举的关键字和方法关键字:enum ,跟class ,interface类似
public class EnumDemo{ public static final int RED = 0x1; public static final int GREEN = 0x2; public static final int BLUE = 0x3; //public int color;//变量 ,可以随意赋值 public Color colorEnum;//Color是一个枚举类型 @Test public void test1(){ //调用时用枚举类型名.对象名 colorEnum = Color.RED; colorEnum = Color.BLUE; colorEnum = Color.GREEN; System.out.println(colorEnum);//输出(字符串):GREEN //打印colorEnum实际上是打印colorEnum.name() System.out.println(colorEnum.name());//输出:GREEN System.out.println(colorEnum.ordinal());//ordinal序号,编号 。输出:1 System.out.println(colorEnum.toString());//输出:GREEN Color[] values = Color.values();//values()获取Color所有的值 System.out.println( Arrays.toString(values));//输出:[ RED,GREEN,BLUE] } } //定义一个枚举类型 public enum Color{ //让color必须是RED ,GREEN ,BLUE中的一个值 //下面三个,每一个都代表枚举的一个实例化对象 ,枚举类型的对象都是从枚举类型内部定义的 ,外部不能定义枚举对象 RED,GREEN,BLUE; //写上一个对象 ,内部自动会调用Enum(String name ,int ordinal) ,此构造方法不能被外部直接调用 ,只能被其子类访问 ,此构造方法为自动调用 } 3.集合对枚举的支持在JDK1.5之后 ,对于Set和Map接口而言又增加了两个新的子类:EnumSet(抽象类) 、EnumMap两个类(很少用)
@Test public void test3(){ EnumSet<Color> set = EnumSet.allOf(Color.class); for(Color c :set ){ System.out.println(c);//输出枚举类型Color的所有实例化对象 } //key用枚举类型元素来表示 EnumMap<Color,String> map = new EnumMap<>(Color.class); map.put(Color.RED,"red"); map.put(Color.GREEn,"green"); map.put(Color.BLUE,"blue"); } 4.带构造方法的枚举通过对象去调用构造方法(但很少使用)
public enum Color{ //枚举对象后面没有加括号 ,表示调用无参构造方法 //枚举对象后面有加括号,表示调用有参构造方法 RED(10),GREEN(20),BLUE; //可以定义属性 private int color; private Color(){ System.out.println("无参构造器"); } private Color(int color){ this.color = color; System.out.println("有参构造器"); } } @Test public void test4(){ System.out.println(Color.RED);//第一次使用枚举 ,枚举内部的三个对象的构造方法都会被调用 } 5.让枚举实现接口 public interface Info{ public int getColor(); } public enum Color{ RED(10),GREEN(20),BLUE; private int color; private Color(){ System.out.println("无参构造器"); } private Color(int color){ this.color = color; System.out.println("有参构造器"); } public int getColor(){ return color; } } public void test5(){ System.out.println(Color.RED.getColor()); } 6.在枚举中定义抽象方法 public enum Color{ RED{ @Override publci String getColor2(){ return "red"; } },GREEN{ @Override publci String getColor2(){ return "green"; } },BLUE{ @Override publci String getColor2(){ return "blue"; } }; public abstract String getColor2(); }使用枚举实现单例设计模式
public enum Singleton{ SINGLETON; publci void method(){ System.out.println("method"); } } //使用枚举实现单例设计模式 @Test public void test5(){ Singleton.SINGLETON.method(); }最后 ,枚举更符合我们设计的要求,但是枚举总归是一种类型 ,因此它占用的内存空间会更大一些 。
所以如果内存空间满足要求的话会用枚举 ,不然一般建议使用常量,而且使用常量的效率会更快一些 。
■免责申明
⒈ 本站是纯粹个人学习网站,与朋友交流共赏 ,不存在任何商业目的 。
⒉ 本站利用了部分网络资源 ,版权归原作者及网站所有 ,如果您对本站所载文章及作品版权的归属存有异议 ,请立即通知我们 ,我们将在第一时间予以删除 ,同时向你表示歉意!创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!