java的枚举2
首先先理解一下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的更多相关文章
- Java核心 --- 枚举
Java核心 --- 枚举 枚举把显示的变量与逻辑的数字绑定在一起在编译的时候,就会发现数据不合法也起到了使程序更加易读,规范代码的作用 一.用普通类的方式实现枚举 新建一个终态类Season,把构造 ...
- 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)
写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...
- Java开发知识之Java的枚举
Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...
- Java学习--枚举
枚举类型enum,地位等同于class,interface 使用enum定义的枚举类型,也是一种变量类型,可用于声明变量 枚举的一些特征 1.它不能有public的构造函数,这样做可以保证客户代码没有 ...
- Java中枚举的使用
Java中枚举其实就是静态常量,今天发现枚举里面其实还能加方法,学习了下, 代码如下: package org.pine.test; import java.util.HashMap; import ...
- 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题
原文:深度分析Java的枚举类型--枚举的线程安全性及序列化问题 枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和clas ...
- Java中枚举的写法和用法
在公司代码中,用了一大堆的枚举,看得我好懵逼.下面开始看看枚举怎么写和怎么用. 一.枚举的写法 关于枚举的写法,网上好多这方面的知识.这里直接贴一个我自己写的枚举类的代 ...
- java基础---->Java中枚举的使用(一)
这里介绍一下java中关于枚举的使用. java中枚举的使用 一.枚举中可以定义方法 参照于TimeUnit的使用,TimeUnit.MILLISECONDS.sleep(1000); LoveUti ...
- Java enum枚举类型
java的枚举类型详解: 简单示例: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 复杂示例(带自定义构造方法与类型) public enum En ...
随机推荐
- yml 文件操作方法
文件读取方法示例: import yaml fr = open('yml_file_address', 'r',encoding='utf-8') data = yaml.load(fr) print ...
- java定时器schedule和scheduleAtFixedRate区别
package cn.lonecloud.test; import java.util.Date; import java.util.Timer; import java.util.TimerTask ...
- struts 中的创建Action的三种方法
1.对于直接创建类,不实现接口和继承任何的类 例如创建一个helloAction package cn.lonecloud.control; import com.opensymphony.xwork ...
- MysqL主主复制_模式之日志点复制
主主复制即在两台MySQL主机内都可以变更数据,而且另外一台主机也会做出相应的变更,可以起到一定的压力分担等作用. 测试两台虚拟机IP分别为: 192.168.136.131.192.168.136. ...
- Centos下的GitLab的安装汉化和数据备份以及管理员密码重置
前言: 安装版本:gitlab-ce-8.8.5-ce.1.el7.x86_64.rpm 下载地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yu ...
- LeetCode第二天&第三天
leetcode 第二天 2017年12月27日 4.(118)Pascal's Triangle JAVA class Solution { public List<List<Integ ...
- AGC010 - B: Boxes
原题链接 题意简述 给出一个由个数构成的环,每次可以选择一个位置并从这个数起顺时针依次对每个数-1,-2,-3,-,-n.问能否将所有数全变为0. 分析 考虑一次操作对环带来了什么影响. (在后加一个 ...
- java 集合框架(一)概述
一.概述 Java Collection Framework (JCF) 提供给我们一系列的类和接口,方便开发者处理集合对象. 在Java 2之前,Java是没有完整的集合框架的.它只有一些简单的可以 ...
- TI Davinci DM6446开发攻略——开发环境搭建
TI DAVINCI DM6446的开发环境搭建不像三星S3C2410,S3C2440,ATMEL的AT91SAM9260之类的单核ARM那么简单,因为DM6446还有DSP端的开发环境,以及双核之间 ...
- hi3531结构: VB_CONF_S
定义视频缓存池属性结构体. typedef struct hiVB_CONF_S { HI_U32 u32MaxPoolCnt; /* max count of pools, (0,VB ...