Java中枚举类型简单学习
/*
* enum类型不允许继承
* 除了这一点,我们基本上可以将enum看作一个常规的类
* 我们可以添加自己的方法与属性,我们也可以覆盖其中的方法。
* 不过一定要在enum实例序列的最后添加分号
*/
enum Hot{
LITTLE("litele hot"), MEDIEM("mediem hot"), HOT("very hot");
/*
* 添加自己的属性和方法
*/
private String des;
private Hot(String s) {
des = s;
}
public String getDes() {
return des;
}
//重新toString()
@Override
public String toString() {
return name() + " : " + name().toLowerCase();
} } public class Test{ public static void Select(Hot hot) {
switch(hot) {
case LITTLE: {
System.out.println(hot.toString());
break;
}
case MEDIEM: {
System.out.println(hot.toString());
break;
}
case HOT: {
System.out.println(hot.toString());
}
}
} public static void main(String[] args) { for (Hot hot : Hot.values()) {
System.out.println(hot + " : ordinal : " + hot.ordinal());
System.out.println(hot.compareTo(Hot.HOT));
System.out.println(hot.equals(Hot.HOT));
System.out.println((hot == Hot.HOT));
System.out.println(hot.getDeclaringClass());
System.out.println(hot.name());
System.out.println("description : " + hot.getDes());
System.out.println("--------------------------");
}
for (String s : "LITTLE MEDIEM HOT".split(" ")) {
Hot hot = Hot.valueOf(Hot.class, s);
System.out.println(hot.getDeclaringClass() + " : " + hot.toString());
}
System.out.println("----------------------------"); /*
* enum天生就是符合switch的
*/
Select(Hot.HOT); }
}
定义枚举的枚举:
import java.util.Random; /*
* 如何定义枚举的枚举,我们可以通过枚举的枚举,对类型进行分类
*/ /*
* 首先定义一个工具类来随机生成枚举的类型
*/
class EnumsUtils {
private static Random random = new Random(47);
//接收一个Enum类型的Class
public static <T extends Enum<T>> T random(Class<T> sc) {
return random(sc.getEnumConstants());
}
//接收Enum实例的数组
public static <T> T random(T[] values) {
return values[random.nextInt(values.length)];
}
} /*
* 定义枚举的枚举
*/
enum Meal{
APPETIZER(Food.Appetizer.class),
MAINCOURSE(Food.MainCourse.class); //注意分号 private Food[] values; //每一个Enum实例的所包含的Enum实例
private Meal(Class<? extends Food> kind) {
values = kind.getEnumConstants();
}
//非分类
public interface Food{
//开胃菜
enum Appetizer implements Food{
//莴苣,
SALAD, SOUP,SPRING_ROLLS
}
enum MainCourse implements Food{
LASAGNE, BURRITO,PAD_THAI
}
} public Food randomSelect() {
return EnumsUtils.random(values);
} }
public class Test{ public static void main(String[] args) {
for (int i = 0; i < 5; ++i) {
System.out.println("第" + (i + 1) + "套餐:" );
for (Meal meal : Meal.values()) {
Meal.Food food = meal.randomSelect();
System.out.println(food);
}
}
}
} 输出:
第1套餐:
SPRING_ROLLS
PAD_THAI
第2套餐:
SOUP
PAD_THAI
第3套餐:
SOUP
PAD_THAI
第4套餐:
SOUP
PAD_THAI
第5套餐:
SALAD
BURRITO
通过定义与常量有关的方法我们可以实现多态, 我们同时还可以在实例中覆盖方法:
import java.util.EnumSet;
/*
* 常量相关的方法,实现多态
* 覆盖常量相关的方法
* 中间我们还要用到EnumSet , 还有EnumMap , 他们查看API就可以了
*/
public class Test{ enum Hot{
//各自实现自己的description()
LITTLE {
@Override
void description() {
System.out.println("little hot ...");
}
},
MEDIM {
@Override
void description() {
System.out.println("Medim hot ...");
}
},
HOT {
@Override
void description() {
System.out.println("hot hot ....");
}
//可以覆盖自己的方法
public void show() {
System.out.println("very hot..");
}
};
//抽象方法, 实现多态
abstract void description();
public void show() {
System.out.println("hot ..hot ..");
}
}
EnumSet<Hot> hots = EnumSet.of(Hot.MEDIM, Hot.LITTLE);
public void add(Hot hot) {
hots.add(hot);
}
public void traverse() {
for (Hot e : hots) {
System.out.print("e.description() : "); e.description();
System.out.print("e.show() : "); e.show();
}
}
public static void main(String[] args) {
Test test = new Test();
test.traverse();
System.out.println("------------"); test.add(Hot.MEDIM); test.add(Hot.MEDIM);
test.add(Hot.HOT);
test.traverse(); }
} 输出:
e.description() : little hot ...
e.show() : hot ..hot ..
e.description() : Medim hot ...
e.show() : hot ..hot ..
------------
e.description() : little hot ...
e.show() : hot ..hot ..
e.description() : Medim hot ...
e.show() : hot ..hot ..
e.description() : hot hot ....
e.show() : very hot..
Java中枚举类型简单学习的更多相关文章
- [转载] Java中枚举类型的使用 - enum
目录 1 枚举类的编译特性 2 向枚举类中添加方法 3 接口内部创建枚举 4 枚举类中使用枚举 5 扩展: 验证values()不是通过父类继承的 本文转载自博客 - Java枚举类型, 博主对原文内 ...
- java中枚举类型的使用
Java 枚举(enum) 详解7种常见的用法 JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. web项目里实体类使用枚举类型: 一般在该实体 ...
- Java中枚举类型与for、switch语句
1.枚举类型的声明 格式为: enum 枚举类型名{ 常量1,常量2,常量3 } 如: enum Number{ one,two,three,four,five //常量} 注意:enum内装的 ...
- Java中枚举类型Enum的一种使用方式
枚举类定义如下: public enum Status { SCUUESS("1", "成功"), FAILED("2", "失败 ...
- 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)
写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...
- 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题
原文:深度分析Java的枚举类型--枚举的线程安全性及序列化问题 枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和clas ...
- Java enum枚举类型
java的枚举类型详解: 简单示例: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 复杂示例(带自定义构造方法与类型) public enum En ...
- java中基本类型封装对象所占内存的大小(转)
这是一个程序,java中没有现成的sizeof的实现,原因主要是java中的基本数据类型的大小都是固定的,所以看上去没有必要用sizeof这个关键字. 实现的想法是这样的:java.lang.Runt ...
- Java进阶(二十三)java中long类型转换为int类型
java中long类型转换为int类型 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参 ...
随机推荐
- Spring和MyBatis环境整合
SSH框架的结合几乎家喻户晓,但是一般的中小项目,使用Spring和MyBatis就够了,而且MyBatis轻便好使,易上手,值得大家尝试一次. 开篇简介: Spring: Spring是一个轻量级的 ...
- js的动态加载、缓存、更新以及复用
使用范围: OA.MIS.ERP等信息管理类的项目,暂时不考虑网站. 遇到的问题: 完成一个项目,往往需要引用很多js文件,比如jQuery.js.easyUI等.还有自己写的一些列js文件,那么这些 ...
- ACM题目————STL练习之 懒省事的小明(优先队列)
描述 小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.小明决定把所有的果子合成一堆. 因为小明比较懒,为了省力气,小明开始想点子了: 每一 ...
- Entity Framework 第四篇 优化SQL查询
Expression<Func<TEntity, bool>>与Func<TEntity, bool>的异同 public IList<TEntity> ...
- 解决浏览器使用<pre></pre>时不换行
<!-- 解决火狐浏览器中pre标签不换行 --> <style type="text/css"> pre { white-space: pre-wrap; ...
- bnu A Matrix 北京邀请赛A题
A Matrix Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class n ...
- 2016CCPC东北地区大学生程序设计竞赛 1005 HDU5926
链接http://acm.hdu.edu.cn/showproblem.php?pid=5926 题意:给我们一个矩阵,问你根据连连看的玩法可以消去其中的元素 解法:连连看怎么玩,就怎么写,别忘记边界 ...
- ListView Animation
简单介绍一下4种动画效果方式AnimationSet set = new AnimationSet(false); Animation animation = new AlphaAnimation(0 ...
- 2016年7月1日 星期五 --出埃及记 Exodus 14:28
2016年7月1日 星期五 --出埃及记 Exodus 14:28 The water flowed back and covered the chariots and horsemen--the e ...
- 数据库连接池系列之——c3p0
c3p0的jar包是:c3p0-0.9.1.jar <bean id = "dataSource" class = "com.mchange.v2.c3p0.Com ...