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类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参 ...
随机推荐
- kvm虚拟机virt-manager启动报错
安装kvm,用virt-manager启动时报错如下: Traceback (most recent call last): File "/usr/share/virt-manager/v ...
- for DEMO
举例一: [xiluhua@vm-xiluhua][~/shell_script]$ cat forDemo1.sh #======================================== ...
- PHP自定义函数格式化json数据怎么调用?
<?php/*** Formats a JSON string for pretty printing** @param string $json The JSON to make pretty ...
- C#:简单线程样例
1.定义线程类及内部事件 using System; using System.Collections.Generic; using System.Text; using System.Threadi ...
- include<stdio.h> 和include<iostream.h>的区别
stdio 是C标准库里面的函数库 对应的基本都是标准输入输出等等C语言常用库的定义iostream是C++标准库的头定义, 对应的基本上是C++的输入输出相关库定义开发C程序用Stdio, C++用 ...
- firefox 最新版地址栏后没有生成二维码的工具
下载火狐离线安装包50.0.2版本,安装后找不到这个图标了,搜索下载附加组件管理器cpmanager-1.2.13.xpi,提示没有签名无法安装,最后下载了一个较高版本的cpmanager-1.5.5 ...
- linux epoll 学习
一.epoll介绍 epoll是linux内核为处理大批量句柄而作的改进的poll,是linux下IO多路复用select.poll的增强版,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统 ...
- c++中函数empty()怎么使用
string s = "";if (s.empty()){ cout << "字符串为空..";}else{ cout << " ...
- randperm函数
randperm功能是随机打乱一个数字序列. 语法格式: y = torch.randperm(n) y是把1到n这些数随机打乱得到的一个数字序列. th> torch.randperm() [ ...
- hdu 2837 坑题。
Calculation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...