Java之枚举篇
来源:互联网 发布:人物画像 数据 编辑:程序博客网 时间:2024/05/14 13:18
出处:http://blog.csdn.net/snowcoldy/article/details/6744015
1、为什么要出现枚举:
在现实生活中,有许多实体有且仅有特定的几个属性(例如:月份只有1~12月,性别只有男女,季节只有四季……等)
若将其类型定义成常量,则不可避免地出现非法参数的问题(例如:13月,第三个性别,第五个季节……等)
因此,对于上述类型的对象,必须规定其特定的属性值为枚举类型,即:仅能从已有的几个值中挑选,不可以自己创建新的属性值
2、枚举的关键概念:
用户若想要创建某个对象
则只能从已有的该类型对象里面挑选
而不能自己自由创建新的该类型对象
例如:用户若想要一个季节类型的对象
则只能从已有的春夏秋冬四个类型的对象里挑选
而不能创建新的季节类型对象
*枚举类的原始实现:
(1)定义一个类,里面包含若干个public static final修饰的,自身类型的变量以供外界使用
(2)构造方法私有(即:不可以由外界创建新的对象)
例如:
class Season() {
public static final Season SPRING = new Season();
public static final Season SUMMER = new Season();
public static final Season AUTUMN = new Season();
public static final Season WINTER = new Season();
private Season() {}
}
*这样,外界只要把一个变量定义成Season类
那么这个变量除了取春夏秋冬中任一个值外,不能取任何其它值
3、枚举类在JDK5.0中的实现:
enum Season() {SPRING, SUMMER, AUTUMN, WINTER}
此语法与上述原始实现的作用完全等同,且同样是编译器语法,即:
编译器在遇到上述语句的时候,会自动将其转换成之前原始实现的格式
*因此,枚举在本质上仍然是一个特殊的类,只不过这个类:
(1)内部包含该类的公开静态常量对象
(2)构造方法必须是私有的
4、枚举类的父类:Enum
常用方法:
values() //静态方法,返回该枚举类的数组,内容为该类中所有的枚举值
5、枚举类作为一个特殊的类的理解:
枚举除了可以定义该类的公开静态常量对象之外
还可以定义任何另外的属性和方法,
只是在添加属性和方法的时候,需要在枚举值的最后一个值后面加上分号
例如:
enum Season() {
SPRING("春天"),
SUMMER("夏天"),
AUTUMN("秋天"),
WINTER("冬天");
String name;
Season(String name) {this.name = name}
//注意:枚举类的构造方法仅能是private的,即使不用private修饰,也会自动默认为private
public String getName() {return name;}
}
6、枚举类不可以有子类,但是枚举类中的枚举值可以实现枚举类中的抽象方法
例如:
//定义枚举类型
enum Operator {
ADD {
public calculate(double a, double b) {
return a+b;
}
},
SUB {
public calculate(double a, double b) {
return a-b;
}
},
MUL {
public calculate(double a, double b) {
return a*b;
}
},
DIV {
public calculate(double a, double b) {
return a/b;
}
};
public abstract double calculate(double a, double b);
}
//调用该枚举类
Operator [] os = Operator.values();
for(Operator o:os) {
o.calculate(8,2);
}
0 0
- Java之枚举篇
- JAVA基础篇之枚举
- Thinking in Java 之 枚举篇
- Java之枚举类型
- java学习之枚举
- Java高新技术之枚举
- Java高新技术之枚举
- Java之枚举(Enum)
- java之枚举类
- java基础之 枚举
- Java基础之枚举
- java基础之枚举
- java学习之枚举
- JAVA基础之枚举
- java基础之枚举
- java 基础之枚举
- java之 ------ 枚举类型
- Java学习之枚举
- 开博第一篇--对几个算法的学习
- 分布式系统----【一致哈希】
- 文本属性Text effect
- Cococ2d-X 中quick的学习笔记(二)-------MyApp.lua类详解
- iOS8开发~UI布局(一)初探Size Class
- Java之枚举篇
- 左旋转字符串1(转自研究者july)
- 励志开始
- 设计模式:组合模式
- 实施fish可能
- javaweb-servlet- ServletConfig与ServletContext
- iOS8开发~UI布局(二)storyboard中autolayout和size class的使用详解
- ——Diary3(Java基础语法2——语句,函数,数组)
- iOS8开发~UI布局(三)深入理解autolayout