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类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参 ...
随机推荐
- rsync 远程数据同步工具详解
rysnc 命令用法:(OPTION-参数,USER-用户,HOST-IP地址,SRC-复制源位置,DEST-复制目标位置)Shell拉:rsync [OPTION] [USER@]HOST:SRC ...
- flex mx组件和s组件的字体兼容性不一致
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- 通达OA 免狗迁移到公网 的另类解决办法
1,通达OA 发布到公网 ,要真正的 Anywhere2,正版通达OA,有加密狗在本地机器上 ,通达必须检测有狗才可以运行3,阿里云服务器 (你想往上插加密狗都没地方的说..汗)4,本地ISP 不提 ...
- hdwiki 数据库结构说明
HDWiki数据库结构说明 以下标有“A”的表示该列为自增列,标有“P”的表示该列为主码,标有“I”的表示该列为索引列,标有“U”的表示该列为唯一列,标有“F”的表示全文搜索. ...
- div使用jqueryui 源码 | gridview多个功能的源码
div使用jqueryui 源码 | gridview多个功能的源码 一.gridview 选中行 改变颜色,双击选中 改变颜色 protected void gv1_SelectedIndexCha ...
- recycleview + checkbox 实现单选
使用map集合记录checkbox的选中状态 private HashMap<Integer,Boolean> positionMap; positionMap = new HashMap ...
- poj-3259-wormholes-spfa-判负环
题意:N个顶点, M条双向边, W条权值为负的单向边.求是否存在负环. 思路:首先你要懂bellman-ford或spfa..这是基础的spfa判断是否存在负环的题,存在负环的节点会重复入队(因为最短 ...
- jqeury之平移轮播
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Gift Hunting(分组背包)
Gift Hunting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- JAVA基础知识之网络编程——-基于AIO的异步Socket通信
异步IO 下面摘子李刚的<疯狂JAVA讲义> 按照POSIX标准来划分IO,分为同步IO和异步IO.对于IO操作分为两步,1)程序发出IO请求. 2)完成实际的IO操作. 阻塞IO和非阻塞 ...