[Java Plasterer] Java Components 3:Java Enum

Writer:BYSocket(泥沙砖瓦浆木匠)

微博:BYSocket

豆瓣:BYSocket

Reprint it anywhere u want.

Written In The Font

When we to set some constants for projects, we always use ‘public static final’to set Int or String constants.Or sometimes,we can also set the paramters in properties.When the project starts,we can get the properties to use them.Today,we can use Enum (JDK 1.5).

Three pieces:
  1. An Example to Know Enum

  2. How to use EnumSet and EnumMap

  3. Enum Analysis

An Example to Know Enum

Firstly,we use the Enum to implements Operation.

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

package org.nsg.jdk.testEnum;

/**

* @Description  OperationTest.java

*

* @author BYSocket

* @date 2015-1-8 6:05:59PM

* @version 1.0

*/

public class OperationTest

{

public static void main(String[] args)

{

double x = 2.0,y=4.0;

for (Operation op : Operation.values())

System.out.printf("%f %s %f = %f%n", x,op,y,op.apply(x, y));

}

}

enum Operation

{

PLUS("+")

{

double apply(double x,double y){return x + y;}

},

MINUS("-")

{

double apply(double x,double y){return x - y;}

},

TIMES("*")

{

double apply(double x,double y){return x * y;}

},

DIVIDE("/")

{

double apply(double x,double y){return x / y;}

};

private final String symbol;

Operation(String symbol){this.symbol = symbol;}

@Override

public String toString(){return symbol;}

abstract double apply(double x,double y);

}

Run as Java application,we can see the Console.The result shows operations

?


1

2

3

4

2.000000 + 4.000000 = 6.000000

2.000000 - 4.000000 = -2.000000

2.000000 * 4.000000 = 8.000000

2.000000 / 4.000000 = 0.500000

Q:‘The enum is just like class?’

A:Yep,I think that Enum is a nice type.So let us know some methods by apis:

1. Firstly,we can make an abstract method ‘apply()’ ,then set in the constant-specific class body. Its called constant-specific method implementation.

2. We can make constructor with fields to make the enum has vales.(Like String or int …)

3. toString() method : Returns the name of this enum constant, as contained in the declaration. This method may be overridden, though it typically isn’t necessary or desirable. An enum type should override this method when a more programmer-friendly string form exists.

4. ‘vales()’ method :to get all enum objects. And ‘getValue()’ can get the enum object’ value.

Note ‘Its easy to learn how to use.Then learn more and study in depth.’ And in real projects,We can use enums to replace Int or String Enum Pattern.And Enum is also a typesafe enum.

How to use EnumSet and EnumMap

Let us see another example to learn some Sets of Enum.So lets see it:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

package org.nsg.jdk.testEnum;

import java.util.EnumMap;

import java.util.EnumSet;

import java.util.Iterator;

import java.util.Map.Entry;

/**

* @Description  WeekTest.java

*

* @author BYSocket

* @date 2015-1-9 2:55:10PM

* @version 1.0

*/

public class WeekTest

{

public static void main(String[] args)

{

EnumSet<Week> weekSet = EnumSet.allOf(Week.class);

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

for (Week w : weekSet)

System.out.println(w);

EnumMap<Week, String> weekMap = new EnumMap<Week, String>(Week.class);

weekMap.put(Week.MON, "星期一");

weekMap.put(Week.TUE, "星期二");

weekMap.put(Week.WED, "星期三");

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

for (Iterator<Entry<Week, String>> iterator = weekMap.entrySet().iterator(); iterator.hasNext();)

{

Entry<Week, String> weekEntry = iterator.next();

System.out.println(weekEntry.getKey().name()+":"+weekEntry.getValue());

}

}

}

enum Week

{

MON("1"), TUE("2"), WED("3"), THU("4"), FRI("5"), SAT("6"),SUN("7");

private final String symbol;

Week(String symbol){this.symbol = symbol;}

@Override

public String toString(){return symbol;}

}

We can see in Console:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

<fontsize="4"face="宋体">EnumSet:

1

2

3

4

5

6

7

EnumMap:

MON:星期一

TUE:星期二

WED:星期三

</font>

Note: EnumSet or EnumMap is easy for we to use.And with them,we can use enums easily.

Enum Analysis

We use ‘javap -c -private xxx’to know the class:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

final class org.nsg.jdk.testEnum.Week extends java.lang.Enum<org.nsg.jdk.testEnu

m.Week> {

public static final org.nsg.jdk.testEnum.Week MON;

public static final org.nsg.jdk.testEnum.Week TUE;

public static final org.nsg.jdk.testEnum.Week WED;

public static final org.nsg.jdk.testEnum.Week THU;

public static final org.nsg.jdk.testEnum.Week FRI;

public static final org.nsg.jdk.testEnum.Week SAT;

public static final org.nsg.jdk.testEnum.Week SUN;

private final java.lang.String symbol;

private static final org.nsg.jdk.testEnum.Week[] $VALUES;

public static org.nsg.jdk.testEnum.Week[] values();

We can see ‘Enum is a class.just is a class.’but no extends.

Writer:BYSocket(泥沙砖瓦浆木匠)

微博:BYSocket

豆瓣:BYSocket

Reprint it anywhere u want.

时间: 2024-10-05 04:15:27

[Java Plasterer] Java Components 3:Java Enum的相关文章

学习java随笔第七篇:java的类与对象

类 同一个包(同一个目录),类的创建与调用 class Man{ String name; void GetMyName() { System.out.println(name); } } public class Person { public static void main(String arges[]) { Man m=new Man(); m.name="小黄"; m.GetMyName(); } } 运行结果 不同的包(不同目录目录),类的创建与调用 package Peo

《深入理解Java虚拟机》读书笔记:Java内存区域

xmind文件下载地址 <深入理解Java虚拟机>读书笔记:Java内存区域,布布扣,bubuko.com

改变Eclipse中java编译器版本出现错误:Java compiler level does not match the version of the installed Java project facet.

改变Eclipse中java编译器版本出现错误:Java compiler level does not match the version of the installed Java project facet. 错误原因:Project Facts中的Java版本设定与项目的Java版本设定不一致. 解决方案:在Eclipse环境中 1. 鼠标右键选择项目,点击Properties,选择Java Build Path查看或修改JRE System Library的jre或jdk的版本. 2.

《Java源码分析》:Java NIO 之 Buffer

<Java源码分析>:Java NIO 之 Buffer 在上篇博文中,我们介绍了Java NIO 中Channel 和Buffer的基本使用方法,这篇博文将从源码的角度来看下Buffer的内部实现. 在Java API文档中,对Buffer的说明摘入如下: Buffer:是一个用于特定基本数据类型的容器.这里的特定基本数据类型指的是:除boolean类型的其他基本上数据类型. 缓冲区是特定基本数据类型元素的线性有限序列.除内容外,缓冲区饿基本属性还包括三个重要的属性,如下: 1.capaci

java架构师之路:JAVA程序员必看的15本书的电子版下载地

转自:http://www.shangxueba.com/faq/view376.html 作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们. 一.Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java

学习java随笔第十一篇:java窗体程序

要开java的窗体程序,就要下载开发窗体的工具. 这里我用的是的myeclipse,可以直接在网上下载安装即可. 我用的是10.0版本的,如果需要汉化的话,可以看一下这篇文章:myeclipse.10安装和汉化方法 java窗体 package java20130629; import javax.swing.*; public class Form extends JFrame { public Form() { this.setLayout(null); JLabel jl=new JLab

Java GC 专家系列5:Java应用性能优化的原则

本文是GC专家系列中的第五篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种GC对性能的影响. 在第二篇Java垃圾回收的监控中介绍了在真实场景中JVM是如何运行GC,如何监控GC数据以及有哪些工具可用来方便进行GC监控. 在第三篇GC 调优中基于真实案例介绍了可用于GC调优的最佳选项.同时也描述了如何通过降低移动到老年代中对象的数量来缩短Full GC耗时,以及如何设置GC类

Java基础知识强化99:Java 常见异常及趣味解释

常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎:) 1. java.langjava.lang软件包是java语言的核心部分,它提供了java中的基础类. java.lang.Object,这是java.lang的根类,也是所有java类的超类. java.lang ArithmeticException 出现异常的运算条件时,抛出此异常.例如,一个整数"除以零" 你正在试图使用电脑解决一个自己解决不了的数学问题,请重新阅读你的算术表达式并再次尝试. Arr

Java基础知识强化101:Java 中的 String对象真的不可变吗 ?

1. 什么是不可变对象?       众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的. 不能改变状态的意思是:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 2. 区分对象和对象的引用 对于Java初学者, 对于String是不可变对象总是存有疑惑.看下面代码: 1 String s =