百木园-与人分享,
就是让自己快乐。

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();
}

最后,枚举更符合我们设计的要求,但是枚举总归是一种类型,因此它占用的内存空间会更大一些。

所以如果内存空间满足要求的话会用枚举,不然一般建议使用常量,而且使用常量的效率会更快一些。

 

■免责申明
⒈ 本站是纯粹个人学习网站,与朋友交流共赏,不存在任何商业目的。
⒉ 本站利用了部分网络资源,版权归原作者及网站所有,如果您对本站所载文章及作品版权的归属存有异议,请立即通知我们,我们将在第一时间予以删除,同时向你表示歉意!

 


来源:https://www.cnblogs.com/lyh1024/p/16836844.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » java基础-枚举类型

相关推荐

  • 暂无文章