/*
* 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中枚举类型简单学习的更多相关文章

  1. [转载] Java中枚举类型的使用 - enum

    目录 1 枚举类的编译特性 2 向枚举类中添加方法 3 接口内部创建枚举 4 枚举类中使用枚举 5 扩展: 验证values()不是通过父类继承的 本文转载自博客 - Java枚举类型, 博主对原文内 ...

  2. java中枚举类型的使用

    Java 枚举(enum) 详解7种常见的用法 JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. web项目里实体类使用枚举类型: 一般在该实体 ...

  3. Java中枚举类型与for、switch语句

    1.枚举类型的声明 格式为: enum 枚举类型名{ 常量1,常量2,常量3 } 如: enum Number{ one,two,three,four,five    //常量} 注意:enum内装的 ...

  4. Java中枚举类型Enum的一种使用方式

    枚举类定义如下: public enum Status { SCUUESS("1", "成功"), FAILED("2", "失败 ...

  5. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)

    写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...

  6. 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题

    原文:深度分析Java的枚举类型--枚举的线程安全性及序列化问题 枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和clas ...

  7. Java enum枚举类型

    java的枚举类型详解: 简单示例: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 复杂示例(带自定义构造方法与类型) public enum En ...

  8. java中基本类型封装对象所占内存的大小(转)

    这是一个程序,java中没有现成的sizeof的实现,原因主要是java中的基本数据类型的大小都是固定的,所以看上去没有必要用sizeof这个关键字. 实现的想法是这样的:java.lang.Runt ...

  9. Java进阶(二十三)java中long类型转换为int类型

    java中long类型转换为int类型 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参 ...

随机推荐

  1. Java常见编码方式简介

    计算机只能识别二进制数据,早期由来是电信号. 为了方便应用计算机,让它可以识别各个国家的文字. 就将各个国家的文字用数字来表示,并一一对应,形成一张表. ASCII:美国标准信息交换码. 用一个字节的 ...

  2. maven打包异常

    maven打包异常,如图: 问题原因:服务器密码错了.

  3. Intellij IDEA

    http://1358440610-qq-com.iteye.com/blog/2102195

  4. jquery+thinkphp实现跨域抓取数据的方法

    jquery的$.post发送数据到服务器后台,在由后台的PHP代码执行远程抓取,存到数据库ajax返回数据到前台,前台用JS接受数据并显示. //远程抓取获取数据$("#update_ac ...

  5. JavaEE基础(二十六)/网络

    1.网络编程(网络编程概述) A:计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信 ...

  6. JavaEE基础(十七)/集合

    1.集合框架(HashSet存储字符串并遍历) A:Set集合概述及特点 通过API查看即可 B:案例演示 HashSet存储字符串并遍历 HashSet<String> hs = new ...

  7. 每日一九度之 题目1030:毕业bg

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2046 解决:894 题目描述:     每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为“bg”.参加不同团体的b ...

  8. ACM题目————Subsequence

    Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...

  9. YTU 2925: 文件操作--文本文件读入

    2925: 文件操作--文本文件读入 时间限制: 1 Sec  内存限制: 128 MB 提交: 38  解决: 16 题目描述 现有100名学生的姓名(name).学号(num).英语(Englis ...

  10. 实现LUT

    //实现LUT 查找表 #include "stdafx.h" #include <iostream> #include <opencv2/opencv.hpp& ...