枚举是Java5才出现的。
Java5(新特性):
1、静态导入
2、可变参数
3、for-each和Iteractor
4、自动装箱和拆箱
5、泛型
6、枚举
7、注解
枚举:其实就是一种特殊的类,一般用于表示多种固定状态
public enum 类名{
对象1,对象2;
}
其实枚举类在底层,继承java.lang.Enum类的。
枚举类特点:
1、枚举类很安全,不能被实例化对象,即使使用反射也不能创建对象;
2、可以使用name()和oridnal()方法用于返回枚举对象的实例名称和序数(从0开始);
3、所有的枚举类都有的方法:value()可以获取当前枚举类的所有实例;
4、所有的枚举类都有静态方法:valueOf可以把String类型的字符串,转换为枚举类型的对象;
5、枚举敞亮必须最先声明,并且常量之间是有逗号隔开,最后一个常量是有分号;
6、枚举类常量之后若使用{},则表示当前枚举类的匿名内部类;
7、使用switch操作枚举。
枚举类是不给实例化的:
switch(语句){}:switch支持的类:byte、short、char,int。没有long。(switch支持int类型)
因为Java5开始有自动拆箱:所以也支持Byte、Short、Character、Integer。
也支持枚举类型:枚举对象的oridnal()方法返回的就是int类型的序数。
先创建一个枚举类:
/**
* Created by Layne_Yao on 2017-8-4 下午2:19:34.
* CSDN:http://blog.csdn.net/Jsagacity
*/
public enum WeekDay {
//枚举类常量之后若使用{},则表示当前枚举类的匿名内部类;
MON(),TUE,WEN,THU,FRI,STA,SUN{};
}
然后新建一个EnumDemo:(注意编译级别一定要在java1.5以上)
/**
* Created by Layne_Yao on 2017-8-4 下午2:20:56.
* CSDN:http://blog.csdn.net/Jsagacity
*/
public class EnumDemo {
public static void main(String[] args) {
//可以使用name()和oridnal()方法用于返回枚举对象的实例名称和序数(从0开始);
System.out.println(WeekDay.MON.name());
System.out.println(WeekDay.SUN.ordinal());
System.out.println("==========================");
//所有的枚举类都有的方法:value()可以获取当前枚举类的所有实例;
WeekDay[] days = WeekDay.values();
for (WeekDay day : days) {
System.out.println(day);
}
System.out.println("==========================");
//所有的枚举类都有静态方法:valueOf可以把String类型的字符串,转换为枚举类型的对象;
WeekDay day = WeekDay.valueOf("SUN");
System.out.println(day);
//使用switch操作枚举。
switch(day){
case MON:
break;
case TUE:
break;
case WEN:
break;
case THU:
break;
}
}
}
运行结果:
在这里提一下Java7的新特性:(Java7个人感觉没有非常重要的改变,7,8,9着重一点)
Java7(过渡性):
1、二进制数字表达式;
2、使用下划线对数值进行分隔表达(编译器级别的特性)
3、switch语句支持String变量
就是hashCode方法
switch支持byte、short、char,int以及对应的包装类(自动拆箱)
枚举(oridnal方法)
String(hashCode方法)
4、Objects类,ThreadLocalRandom类
5、泛型的菱形语法
6、堆污染和@SafeVarargs
7、同时捕获多个异常处理
8、增强throw语句
9、try-witch-resources语句(自动关闭资源)
10、NIO2介绍(Files,Path,Paths)