首先先理解一下java中枚举的本质。

java的世界中一切皆是类,下面通过一个例子解释一下enum的本质:

package cn.xnchall.enumeration;

public class Grade {

    public void test() {
print(grade.A);
} public void print(grade g) { //print A B C D E }
} /*class grade{
private grade(){} public static final grade A = new grade();
public static final grade B = new grade();
public static final grade C = new grade();
public static final grade D = new grade();
public static final grade E = new grade();
}*/ enum grade{ //class
A,B,C,D,E; //object
}

grade类和grade枚举类型作用是一样的,就是说枚举类型是一个比较严格的类。它不允许在外部new grade类,因为底层实现是private的。外部要想实现new操作,必须在grade的内部实现。

下面正式介绍enumeration!

1.定义枚举的构造函数、方法和字段


package cn.xnchall.enumeration;

public class Dome {

    public static void test() {
print(grade.A);
} public static void print(grade g) { //print A B C D E
System.out.println(g.getValue());
} public static void main(String[] args){
test();
}
} /*class grade{
private grade(){} public static final grade A = new grade();
public static final grade B = new grade();
public static final grade C = new grade();
public static final grade D = new grade();
public static final grade E = new grade();
}*/ enum grade{ //class A 100-90 B 89-80 C 79-70 D 69-60 E 59-0
A("100-90") ,B("89-80") ,C("79-70") ,D("69-60") ,E("59-0")
; private String value; //每个字段的分数
private grade(String value) {
this.value = value;
} public String getValue() {
return this.value;
}
}

 

上面将会执行得到的结果是:100-90

未完待续

将会补充:带有抽象方法的枚举

2.带有抽象方法的枚举

package cn.xnchall.enumeration;

public class Dome {

    public static void test() {
print(grade.A);
} public static void print(grade g) { //print A B C D E
System.out.println(g.vValue());
} public static void main(String[] args){
test();
}
} /*class grade{
private grade(){} public static final grade A = new grade();
public static final grade B = new grade();
public static final grade C = new grade();
public static final grade D = new grade();
public static final grade E = new grade();
}*/ enum grade{ //class A 100-90优秀 B 89-80良好 C 79-70一般 D 69-60及格 E 59-0不及格
A("100-90"){
public String vValue() {
return "优秀";
}
} ,B("89-80"){
public String vValue() {
return "良好";
}
} ,C("79-70"){
public String vValue() {
return "一般";
}
} ,D("69-60"){
public String vValue() {
return "及格";
}
} ,E("59-0"){
public String vValue() {
return "不及格";
}
}
; private String value; //每个字段的分数
private grade(String value) {
this.value = value;
} public String getValue() {
return this.value;
} public abstract String vValue();
}

上面代码执行的结果是:优秀

仔细研究上面的代码,很容易理解。

总之,java的世界“一切皆是类”,枚举就是枚举类,它里边的数据就是枚举的对象。当然了它也具有类的其他属性。

java的枚举2的更多相关文章

  1. Java核心 --- 枚举

    Java核心 --- 枚举 枚举把显示的变量与逻辑的数字绑定在一起在编译的时候,就会发现数据不合法也起到了使程序更加易读,规范代码的作用 一.用普通类的方式实现枚举 新建一个终态类Season,把构造 ...

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

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

  3. Java开发知识之Java的枚举

    Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...

  4. Java学习--枚举

    枚举类型enum,地位等同于class,interface 使用enum定义的枚举类型,也是一种变量类型,可用于声明变量 枚举的一些特征 1.它不能有public的构造函数,这样做可以保证客户代码没有 ...

  5. Java中枚举的使用

    Java中枚举其实就是静态常量,今天发现枚举里面其实还能加方法,学习了下, 代码如下: package org.pine.test; import java.util.HashMap; import ...

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

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

  7. Java中枚举的写法和用法

            在公司代码中,用了一大堆的枚举,看得我好懵逼.下面开始看看枚举怎么写和怎么用. 一.枚举的写法         关于枚举的写法,网上好多这方面的知识.这里直接贴一个我自己写的枚举类的代 ...

  8. java基础---->Java中枚举的使用(一)

    这里介绍一下java中关于枚举的使用. java中枚举的使用 一.枚举中可以定义方法 参照于TimeUnit的使用,TimeUnit.MILLISECONDS.sleep(1000); LoveUti ...

  9. Java enum枚举类型

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

随机推荐

  1. bzoj 3622 已经没有什么好害怕的了 类似容斥,dp

    3622: 已经没有什么好害怕的了 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1213  Solved: 576[Submit][Status][ ...

  2. Mybatis学习之道(一)

    本例子为采用的mysql+maven+mybatis构建. 初步学习mybatis: mybatis为一个半自动框架,相对于hibernate来说他更加轻巧,学习成本更低. 1.新建一个maven工程 ...

  3. 4.3 lambda表达式

    函数,封装的代码块可以很复杂,也可以很简单.当函数的代码块简单到只有一个表达式,就可以考虑用lambda表达式,也称匿名函数. 1 lambda表达式基础 #首先需要声明一点:lambda是表达式而非 ...

  4. STL中坑爹的max函数

    hdu1754永远难忘的痛,参数最好不要传耗时特别长的函数,因为会调用两次,如果是递归的话,不知道多少次呢.. 切记!切记!切记! 例如: //return max(getAns(root<&l ...

  5. spider RPC更新至2.0.0-RELEASE

    spider使用java语言开发,使用Spring作为IoC容器,采用TCP/IP协议,在此基础上,结合SaaS金融交易系统的特性进行针对性和重点设计,以更加灵活和高效的满足金融交易系统多租户.高可用 ...

  6. java I/O框架 (三)基本流

    概述 基本流有字节输入输出流(InputStream,OutputStream),和字符输入输出流(Reader,Writer),它们都是抽象类,作为Java IO API中其他所有流的父类存在. 我 ...

  7. FusionCharts 2D帕累托图

    1.了解帕累托图的特性以及和其他图的共性 2.设计帕累托图页面中引入图的类型以及怎么引入到页面 Pareto2D.html: <!DOCTYPE HTML PUBLIC "-//W3C ...

  8. php simpleXML操作xml的用法

    XML简介 XML是一种流行的半结构化文件格式,以一种类似数据库的格式存储数据.在实际应用中,一些简单的.安全性较低的数据往往使用 XML文件的格式进行存储.这样做的好处一方面可以通过减少与数据库的交 ...

  9. R语言︱非结构化数据处理神器——rlist包

    本文作者:任坤,厦门大学王亚南经济研究院金融硕士生,研究兴趣为计算统计和金融量化交易,pipeR,learnR,rlist等项目的作者. 近年来,非关系型数据逐渐获得了更广泛的关注和使用.下面分别列举 ...

  10. Array和ArrayList的异同点

    Array和ArrayList的异同点 1.不同点: (1)Array只能存储同构的对象, ArrayList可以存储异构的对象 (2)在CLR托管对中的存放方式中,Array是始终是连续存放的, A ...