Java学习之枚举
2016-02-24 22:33
405 查看
枚举是字段由一组不变的常量构成的一种类型。常量的值一 一列出来,只限于列举出来的值的范围内。
例1:public enum Gender {
MALE,FEMALE;
}
可以用JDK自带的反编译工具javap查看Gender内部的实现: javap -c -l -private Gender (-c 反编译class文件,-l输出行号,-private显示所有成员)。
得到结果如下:
public final class Gender extends java.lang.Enum{
public static final Gender MALE;
public static final Gender FEMALE;
private Gender();
public static Gender[] values();
public static Gender valueOf(java.lang.String);
static {};
}
由此可得出枚举的特点:
1,枚举本质是一个类,可以定义构造方法,成员变量,普通方法和抽象方法。
2,枚举继承自java.lang.Enum类,但不能显式继承。
3,默认构造方法访问权限是private。
4,枚举值本质上是全局常量值,不能用new关键字声明。
5,枚举是单例的,为了保证枚举是单例的那么构造函数全部要私有
例2:在枚举中定义属性。
public enum TrafficLight {
// 定义枚举值
RED,GREEN,YELLOW;
// 定义成员属性
public String info = "交通灯信息";
public static void main(String[] args) {
System.out.println(TrafficLight.GREEN.info);
}
}
例3:在枚举中定义构造函数。
public enum TrafficLight {
// 定义枚举值
RED("红灯"),GREEN("绿灯"),YELLOW("黄灯");
// 定义成员属性
public String info = "交通灯信息";
// 提供构造函数进行属性的初始化
private TrafficLight(String info){
this.info = info;
}
public static void main(String[] args) {
System.out.println(TrafficLight.GREEN.info);
System.out.println(TrafficLight.RED.info);
System.out.println(TrafficLight.YELLOW.info);
}
}
在枚举类中可以定义抽象方法,但是不能将枚举类声明为抽象类,只能在声明枚举值的时候实现所有的抽象方法即(匿名内部类)。
例4:在枚举中定义函数。
public enum TrafficLight {
// 定义枚举值
RED("红灯") {
@Override
public void showMessage() {
System.out.println("红灯停!");
}
},
GREEN("绿灯"
4000
) {
@Override
public void showMessage() {
System.out.println("绿灯行!");
}
},
YELLOW("黄灯") {
@Override
public void showMessage() {
System.out.println("你自己看着办!");
}
};
// 定义成员属性
public String info = "交通灯信息";
// 提供构造函数进行属性的初始化
private TrafficLight(String info) {
this.info = info;
}
// 提供一个表明灯的信息的方法
public abstract void showMessage();
public static void main(String[] args) {
System.out.println(TrafficLight.GREEN.info);
System.out.println(TrafficLight.RED.info);
System.out.println(TrafficLight.YELLOW.info);
TrafficLight.RED.showMessage();
}
}
由例5可知: 在枚举类中可以定义抽象方法,但是不能将枚举类声明为抽象类,只能在声明枚举值的时候实现所有的抽象方法即(匿名内部类)。
枚举类型静态方法:
values():返回枚举类所有对象组成的数组。
valueOf(String name):返回实例名为name的枚举对象。
Enum类方法:
name():返回枚举实例名。
ordinal():返回实例在枚举中的索引,从0开始。
例1:public enum Gender {
MALE,FEMALE;
}
可以用JDK自带的反编译工具javap查看Gender内部的实现: javap -c -l -private Gender (-c 反编译class文件,-l输出行号,-private显示所有成员)。
得到结果如下:
public final class Gender extends java.lang.Enum{
public static final Gender MALE;
public static final Gender FEMALE;
private Gender();
public static Gender[] values();
public static Gender valueOf(java.lang.String);
static {};
}
由此可得出枚举的特点:
1,枚举本质是一个类,可以定义构造方法,成员变量,普通方法和抽象方法。
2,枚举继承自java.lang.Enum类,但不能显式继承。
3,默认构造方法访问权限是private。
4,枚举值本质上是全局常量值,不能用new关键字声明。
5,枚举是单例的,为了保证枚举是单例的那么构造函数全部要私有
例2:在枚举中定义属性。
public enum TrafficLight {
// 定义枚举值
RED,GREEN,YELLOW;
// 定义成员属性
public String info = "交通灯信息";
public static void main(String[] args) {
System.out.println(TrafficLight.GREEN.info);
}
}
例3:在枚举中定义构造函数。
public enum TrafficLight {
// 定义枚举值
RED("红灯"),GREEN("绿灯"),YELLOW("黄灯");
// 定义成员属性
public String info = "交通灯信息";
// 提供构造函数进行属性的初始化
private TrafficLight(String info){
this.info = info;
}
public static void main(String[] args) {
System.out.println(TrafficLight.GREEN.info);
System.out.println(TrafficLight.RED.info);
System.out.println(TrafficLight.YELLOW.info);
}
}
在枚举类中可以定义抽象方法,但是不能将枚举类声明为抽象类,只能在声明枚举值的时候实现所有的抽象方法即(匿名内部类)。
例4:在枚举中定义函数。
public enum TrafficLight {
// 定义枚举值
RED("红灯") {
@Override
public void showMessage() {
System.out.println("红灯停!");
}
},
GREEN("绿灯"
4000
) {
@Override
public void showMessage() {
System.out.println("绿灯行!");
}
},
YELLOW("黄灯") {
@Override
public void showMessage() {
System.out.println("你自己看着办!");
}
};
// 定义成员属性
public String info = "交通灯信息";
// 提供构造函数进行属性的初始化
private TrafficLight(String info) {
this.info = info;
}
// 提供一个表明灯的信息的方法
public abstract void showMessage();
public static void main(String[] args) {
System.out.println(TrafficLight.GREEN.info);
System.out.println(TrafficLight.RED.info);
System.out.println(TrafficLight.YELLOW.info);
TrafficLight.RED.showMessage();
}
}
由例5可知: 在枚举类中可以定义抽象方法,但是不能将枚举类声明为抽象类,只能在声明枚举值的时候实现所有的抽象方法即(匿名内部类)。
枚举类型静态方法:
values():返回枚举类所有对象组成的数组。
valueOf(String name):返回实例名为name的枚举对象。
Enum类方法:
name():返回枚举实例名。
ordinal():返回实例在枚举中的索引,从0开始。
相关文章推荐
- Spring-03-AOP配置
- 使用Ratpack和Spring Boot打造高性能的JVM微服务应用
- Rxjava基础
- 随堂笔记160224基础语法
- Struts2-工作原理
- java单例模式singleton回顾,如何实现单例模式
- JavaIO之-BIO(同步阻塞线程)
- Java的最佳实践
- Java反射机制分析指南
- JAVA语法基础 3
- 最全面的Java多线程用法解析
- Spring JTA事务配置JOTM
- Java实现配置加载机制
- Java新手问题集锦汇总
- JAVA SE 学习笔记
- java多线程-CyclicBarrier
- 【JAVA】19、多维数组
- Spring整合RabbitMQ进行消息队列开发
- 文件访问权限详解(eclipse和studio如何访问虚拟机内部的存储内容)
- java图片压缩策略说明