`

day_20Java枚举

阅读更多

星期六, 十一月 21, 2015  08:28:48

 

一、

1.作

        取代以往定义常量的方式,

        程序在编译时检查的功能。

 

2.使用枚举类型设置常量

 

   2.1在接口中定义常量的常规方式

   

在以往设置常量时,通常将常量放置在接口中,这样程序中就可以直接使该常量用,并且该常量不可被修改,‘

因为在接口中定义该常量时,用static和final修饰符

 

public interface Constants{

public static final int C_A = 1;

public static final int C_B = 2;

}

 

  2.2在JDK1.5版本新增枚举类型后就逐渐取代了以上定义常量的形式。

语法:

 

java.lang.Enum<E>

 

      public enum Constants {

C_A,

C_B,

C_C

}

当需要在程序中使用该常量时,可以使用Constants.C_A来表示。

 

 

  2.2.2可以把相关的常量分组到一个枚举类型里

 

 

二、代码案例

 

1.代码案例:

 

    enum是jdk5引入的语法,定义一个enum类实际上也是定义一个class,只是通过enum定义这个特殊class的时候,编译器会帮你做些事情:

     所的枚举类会默认继承Enum类

    所的枚举类是final的,不可扩展子类

    所定义的枚举常量,会生成定义的枚举类中生成public static final常

 

 

 

package day20;

 

public class EnumTest {

 

 

public enum Yuzhou {

NONAME,ONENAAME,TWONAME;

}

 

 

public static void main(String[] args) {

Yuzhou yy = Yuzhou.NONAME;

switch(yy) {

 

case NONAME:

System.out.println(".....NONAME");

break;

 

case ONENAAME:

System.out.println(".....ONENAME");

break;

 

case TWONAME:

System.out.println(".....TWONAME");

break;

 

default:

System.out.println("..............");

 

}

 

}

}

 

运行结果:

.....NONAME

 

 

问题:

    1.Yuzhou yy = Yuzhou.NONAME,赋值枚举变量的时候,当然要带前缀了,因为这些枚举常量是指定枚举类中的常量,必须加上类限定前缀。

 

  2.java的switch语法,是通过jvm的tableswitch和lookupswitch两个指令实现。

简单说一下实现原理:java编译器为switch语句编译成一个局部变量数组,每个case对应一个数组的索引,指令的执行是通过不同的数组索引找到不同的入口指令。所以原则上switch...case只能处理int型的变量。

 

     3.enum能用在switch语句中,也是一个语法,我们知道所有枚举类的父类Enum中有一个private final int ordinal;,java编译器检测到switch语句中变量是一个枚举类,则会利用之前枚举类的ordinal属性,编译一个局部变量数组,

    

     4.后续在进行case分支比较的时候,就是简单通过tableswitch或lookupswitch指令来进行跳转,

         需要注意的一点:这个局部变量数组的构建过程是在编译器在编译阶段完成的

 

1.2代码案例:

 

   向枚举中添加新方法

 

package day20;

 

public class EnumTest {

 

/*本例:  向枚举中添加新方法

* 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。

* 而且 Java 要求必须先定义 enum 实例。*/

 

public enum Color{

RED(1,"红色"),GREEN(2,"绿色"),YELLOW(3,"黄色");

//定义私变量

private int inode;

private String value;

 

//定义构造方法,枚举类型只能为私

private Color(int _node,String _value) {

this.inode = _node;

this.value = _value;

}

 

//普通方法

public static String getValue(int _inode){

for(Color c : Color.values()) {

if(c.getInode() == _inode) {

return c.value;

}

}

return null;

}

 

 

//get set方法

public int getInode() {

return inode;

}

 

public void setInode(int inode) {

this.inode = inode;

}

 

 

public String getValue() {

return value;

}

 

public void setValue(String value) {

this.value = value;

}

 

 

 

}

 

public static void main(String[] args) {

System.out.print(Color.getValue(3));

}

}

 

1.3

 

案例3:

package day20;

 

public class EnumTest {

 

/*本例:  向枚举中添加新方法

* 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。

* 而且 Java 要求必须先定义 enum 实例。*/

 

 

 

public enum Yuzhou {

NONAME("waxun"),ONENAAME("yuzhou"),TWONAME("xiner");

String name;

private Yuzhou(String _name) {

this.name = _name;

}

 

public static String getValue(String _name){

for(Yuzhou y: Yuzhou.values()) {

if(y.getName() == _name) {

return y.name;

}

}

return null;

 

 

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

 

}

 

 

 

public static void main(String[] args) {

System.out.print(Yuzhou.getValue("waxun"));

}

}

运行结果:

waxun

 

星期六, 十一月 21, 2015 11:15:47

 

 

0
1
分享到:
评论

相关推荐

    Java 基础枚举.pdf

    Java枚举是一种高效、可读性强的常量管理方式,它可以使代码更易于维护和扩展。使用Java枚举可以帮助我们有效地组织常量,并将其用于多种场景,提高代码的易用性和可重用性。 如何使用Java枚举? 在Java中,定义枚举...

    达内Java培训-CoreJava全程笔记(WORD唐亮版)

    CoreJava DAY10 主方法,静态导入,包装类,枚举 32 CoreJava DAY11 内部类 36 CoreJava DAY12 集合 List 40 CoreJava DAY13 集合 Set 46 CoreJava DAY14 集合 Map 49 CoreJava DAY15 异常、断言 52 CoreJava DAY16 ...

    达内 CoreJava老师笔记汇总

    CoreJava DAY10 主方法,静态导入,包装类,枚举 62 CoreJava DAY11 内部类 70 CoreJava DAY12 集合 List 78 CoreJava DAY13 集合 Set 85 CoreJava DAY14 集合 Map 92 CoreJava DAY15 异常、断言 98 CoreJava DAY16 ...

    CoreJava笔记

    CoreJava DAY10 主方法,静态导入,包装类,枚举 32 CoreJava DAY11 内部类 36 CoreJava DAY12 集合 List 40 CoreJava DAY13 集合 Set 46 CoreJava DAY14 集合 Map 49 CoreJava DAY15 异常、断言 52 CoreJava DAY16 ...

    day005 面向对象5-枚举与关键字.doc

    day005 面向对象5-枚举与关键字.doc

    java进阶13天资料.zip

    day02-抽象类、接口、代码块,final、单例、枚举 day03-多态、包、权限修饰符、内部类,Object类,Date类 day04-常用API、正则表达式,泛型、Collection集合API day05-迭代器,数据结构,List,Set ,TreeSet集合,...

    整理后java开发全套达内学习笔记(含练习)

    Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...

    Java学习路线:day22

    文章目录第10章枚举类与注解枚举类的使用枚举类的理解自定义枚举类使用enum关键字定义枚举类Enum类中的常用方法使用enum关键字定义的枚举类实现接口注解的使用注解的理解Annotation的使用示例如何自定义注解jdk中4个...

    python-mysql day03.txt

    3、枚举类型 1、单选 :enum(值1,...) 2、多选 :set(值1,值2,...) ## "MySQL,Python,Study" 4、日期时间类型 1、date 2、time 3、datetime # 不给值默认返回NULL 4、timestamp # 不给值默认返回系统当前...

    day020-继承加强和设计模式代码和笔记.rar

    实现的,它负责将 &lt;JAVA_HOME &gt;/lib/ext或者由系统变量-Djava.ext.dir指定位置 中的类库 加载到内存中。开发者可以直接使用标准扩展类加载器。 3. 系统类 (应用类)加载器(Application ...

    day021-反射和注解笔记和代码.rar

    Class 类的实例表示正在运行的 Java 应用程序中的类和接口; 枚举是一种类,注解(指的是注解Annotation)是一种接口; 每个数组都是 Class字节码类中的一个具体 对象 基本的 Java 类型(boolean、byte、...

    mapstruct-spi-protobuf:Mapstruct的Protobuf访问器命名策略

    ProtobufEnumMapping策略如果您遵循Google枚举的样式指南则实现EnumMappingStrategy并提供完整的枚举常量映射。支持-映射功能: 常用原型类型和Java类型之间的标准映射函数: 时间戳&lt;-&gt;即时期间日期&lt;-&gt; ...

    在一小时内学会 C#(txt版本)

    如果熟悉 Java 语言,Java 的编程结构、打包和垃圾回收的概念肯定对你快速学习 C# 大有帮助。所以我在讨论 C# 语言构造的时候会假设你知道 C++。 本文通过一系列例程以简短但全面的方式讨论了 C# 语言构造和特性,...

Global site tag (gtag.js) - Google Analytics