Java基础之枚举

作为1.5才增加的特性,枚举的使用并不是很多。

枚举其实就是一个比较特殊的类,就如同注解其实也是个特殊的接口一样(注解反编译之后没有了@符号)。枚举使用enum关键字声明,通过反编译自定义的枚举可以看到类似下面的代码:

//源代码
public enum Sex {
MAN,WOMAN;//如果下面需要定义方法,这里需要加一个分号
} //反编译结果
public final class Sex extends Enum
{ public static final Sex MAN;
public static final Sex WOMAN;
private static final Sex $VALUES[]; public static Sex[] values(){
return (Sex[])$VALUES.clone();
} public static Sex valueOf(String s){
return (Sex)Enum.valueOf(Sex, s);
} private Sex(String s, int i){
super(s, i);
} static {
MAN = new Sex("MAN", 0);
WOMAN = new Sex("WOMAN", 1);
$VALUES = (new Sex[] {
MAN, WOMAN
});
}
}

可以通过反编译结果看到:

  • 自动继承了Enum类
  • 编译器添加了构造方法并私有化
  • MAN,WOMAN被声明为为静态自身类型常量,并且在静态代码块中实例化
  • 添加了values()和valueOf()方法

同时,枚举中也可以定义构造方法、成员方法、成员变量、构造代码块、静态代码块等普通类所能定义的东西。但是构造方法必须私有(可以不加权限限定词但默认为private,构造方法既可以有参也可以无参)

常用方法:

  • 继承自Enum类:

    • name():返回枚举常量名称
    • ordinal():返回枚举常量的序号
  • 自身方法(静态):
    • values():返回自身的常量数组
    • valueOf():由字符串转化为枚举

枚举在switch中的注意事项:

Sex sex = Sex.MAN;
switch (sex) {
case MAN://注意这里,这里不能写Sex.MAN,而是用MAN
System.out.println("man");
break;
case WOMAN:
System.out.println("woman");
break;
default:
System.out.println("error");
}

实际上使用枚举可以很方便的构建单例模式:详见这篇博文。

Java基础之枚举的更多相关文章

  1. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  2. 黑马程序员:Java基础总结----枚举

    黑马程序员:Java基础总结 枚举   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...

  3. Java基础之枚举类型Enum的使用

    Java基础之枚举类型Enum的使用 定义 public enum AccruedCleanEnum { SPREAD("1","发票"),OTHER(&quo ...

  4. Java 基础之-枚举

      目录(?)[-] 用法一常量 用法二switch 用法三向枚举中添加新方法 用法四覆盖枚举的方法 用法五实现接口 用法六使用接口组织枚举 用法七关于枚举集合的使用   DK1.5引入了新的类型-- ...

  5. Java 基础 enum枚举类 的创建/使用/接口继承 ,以及手动创建枚举类的对象为:public static final

    笔记: import java.lang.*; /**一:枚举类 : enum Season implements info { s1(),s2(),s3(),s4() }; //s1--s4 放在S ...

  6. Java基础_枚举类型

    作用:让数据更简洁,更易读,增加代码可读性. 为了用1,2,3,4,5分别表示老师,学生,小组,班主任,后勤,可以直接设置一个变量,让roleType = 1,但这样写代码可读性差. 也可以定义一个成 ...

  7. java基础(十一) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

  8. Java基础之枚举妙用

    对于枚举,初学Java的时候可能我们就已经接触过了,但是在毕业前,其实一直都不知道真正工作里面枚举是怎么用的,枚举有什么用?接下来,博主就介绍枚举在实际工作中的一种使用场景,本文只适合初级的小菜鸟看哈 ...

  9. java 基础之枚举

    问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个 解决办法: 1)  在setGrade方法中做判断,不符合格式要求就抛出异常 2)  直接限定用户的选择,通过自定义类模拟枚举的 ...

随机推荐

  1. Android中利用正则表达式验证手机号是否合法

    利用正则表达式来验证手机号是否合法,现在我们简单使用一下,这个在实际的应用中很实用. 例:在输入框中输入手机号,判断是否合法, MainActivity中: package com.example.m ...

  2. SVN偷锁,强制解锁

    1.将被锁文件SVN Check out...到本地硬盘2.点击文件右键,选择get lock 3.勾上 steal the locks 4.点击文件右键,选择 Release Lock操作即可 学无 ...

  3. css解决字段不换行

    1.自动换行 <div style="widht:100%;height:100%;word-wrap: break-word">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 ...

  4. html5和html4.0.1的<html>标记的区别

    html5新增了一个 manifest属性,定义了缓存信息. html5中废弃了xmlns属性,这个属性在html转换成xhtml是非常有用的,但是html5中并不需要,因此不用写. 但是如果非要写那 ...

  5. 16 SQL Mode

    1.SQL Mode解决的问题:     a.通过设置SQL Mode , 可以完成不同严格程度的数据校验,有效地保障数据准确性.     b.通过设置SQL Mode 为ANSI模式,来保证大多数S ...

  6. NO20文件属性--inode--block-企业场景题

    壹  Linux文件属性描述:在Linux里一切皆文件Linux系统中的文件或目录的属性主要包括:索引节点(inode).文件类型.权限属性.链接数.所归属的用户和用户组.最近修改时间等内容. 例子: ...

  7. java 十大经典排序算法

    十大排序算法可以说是每个程序员都必须得掌握的了,花了一天的时间把代码实现且整理了一下,为了方便大家学习,我把它整理成一篇文章,每种算法会有简单的算法思想描述,为了方便大家理解,我还找来了动图演示:这还 ...

  8. Docker + Maven + Docker-compose

    前言: docker:容器化管理 maven:支持docker-maven的插件,通过 mvn clean -Dmaven.test.skip package dockerfile:build 打包命 ...

  9. 安装ruby的一些坑

    之前一直下载不下来.是因为需要翻墙.

  10. python format使用方法

    #使用format 方法进行格式化 print("The number {1:} in hex is: {1:#x}, the number {0:} in oct is {0:o}&quo ...