java中为了对参数类型使用限定,引入了泛型,实现了在编译期对参数类型是否合法的判断。同样,java为了对参数的值的限定,引入了枚举类,实现了在编译期对参数的值是否合法的判断。

首先我们用自定义类的方法实现枚举类,可以参考单例模式的实现思路,将类的构造方法设置为私有的,在类内部定义static的变量,只能直接通过类名访问自己定义的类,实现对类的值的限定。

1 public class TestEnum {

2

3 public static void main(String[] args) {

4 Weekday w = Weekday.Fri;

5 System.out.println(w);

6 System.out.println(Weekday.s);

7

8 }

9 }

10

11 class Weekday{

12 String weekday = null;

13 private Weekday(String str){

14 this.weekday = str;

15 }

16 static int s = 3000;

17 public static Weekday Sun = new Weekday("Sunday");

18 public static Weekday Mon = new Weekday("Monday");

19 public static Weekday Tues = new Weekday("Tuesday");

20 public static Weekday Wed = new Weekday("Wednesday");

21 public static Weekday Thu = new Weekday("Thurday");

22 public static Weekday Fri = new Weekday("Friday");

23 public static Weekday Sat = new Weekday("Saturday");

24

25 @Override

26 public String toString(){

27 return this.weekday;

28 }

29

30

31 }

使用的时候,每调用一次static属性,就创建了一个实例。静态的成员可以通过类名直接访问。

java中用enum表示枚举类,我们通过例子学习:

1 public class TestEnum1 {

2 public static void main(String[] args) {

3 // TODO Auto-generated method stub

4 Num n = Num.Six;

5 System.out.println(n);

6 System.out.println(n.ordinal());//表示的数字,从0开始。

7 System.out.println(Weekday1.FRI);

8 System.out.println(Weekday1.FRI.nextDay().nextDay());

9 System.out.println(Weekday1.FRI.nextDay().nextDay().ordinal());

10 }

11 }

12

13 enum Num{

14 Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten;

15 Num() {

16 System.out.println("this is null parameter constructor func");

17 }

18 }

19

20 enum Weekday1{

21 SUN("Sunday"),MON("Monday"),TUE("Tuesday"),WED("Wednesday"),THU("Thurday"),FRI("Friday"),SAT("Saturday");

22 String weekday1 = null;

23 Weekday1(String weekday1){

24 this.weekday1 = weekday1;

25 }

26 @Override

27 public String toString(){

28 return this.weekday1;

29 }

30 public Weekday1 nextDay() {

31 switch (this) {

32 case SUN:

33 return MON;

34 case MON:

35 return TUE;

36 case TUE:

37 return WED;

38 case WED:

39 return THU;

40 case THU:

41 return FRI;

42 case FRI:

43 return SAT;

44 default:

45 return SUN;

46 }

47

48 }

49 }

通过两个类的比较和输出可以总结出:

enum是一个特殊的类,他定义了自己的常量,而且类型是自己,默认的toString方法是把自己的名字转换成string。

enum也有普通类的大部分用法,包括构造函数,私有变量,抽象函数(比如匿名内部类实现),不过用自定义成员的时候。必须把枚举常量放在枚举类的第一行。每个枚举常量在定义的时候使用了一次构造函数,在其他类中调用的时候也会再调用一次构造函数,两次的值一样,但是指向的实际对象其实是不一样的(可以通过构造函数的打印次数得出此结论)。ordinal()函数返回枚举常量的序数(在声明中的位置,初始常量的序数是0),被设计用于复杂的基于enum的数据结构。

java中的枚举类_java中的枚举类型相关推荐

  1. java bean的反射类_JAVA中反射机制五(JavaBean的内省与BeanUtils库)

    内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...

  2. java如何调用static类_Java中的static的使用指南

    一.Java中的static使用之静态变量 1.Java 中被static修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.且优先于对象存在.静态成员可以使 ...

  3. java中源代码的类_java中源代码功能了解

    datainput和dataoutput类的作用: java.io.DataInput  一句话概括,从二进制流中读取字节到缓存数组 从二进制流中转化字节 读取一些字节从输入流中,存储他们在缓存数组中 ...

  4. java中的并发类_java中并发常用工具类

    前言:在你无聊的时候,想想比你优秀还努力的人,也许就不觉的无聊了 今天下午没事干把买的java并发编程艺术这本书拿出来看了看,看了下也记不住,还是好记性不如烂笔头,今天讲四个并发中可能会用到的工具类, ...

  5. java异常分类三大类_JAVA 中异常的分类

    JAVA中的异常可以大体上分为三大类: Error,RuntimeException,Exception 基类Throwable派生的. 使用的方法也是基本一致的,都是通过关键字throw+Throw ...

  6. java 不能继承的类_java中不能继承的类有哪些?

    在Java中,只要是被定义为final的类,也可以说是被final修饰的类,就是不能被继承的. 因为jdk的开发者认为,有一些最基本的类没要必要对开发者开放,如果用户继承时操作有误,很可能引入很多问题 ...

  7. java 中的class类_Java中Class类简介

    Java中Class类简介 1. 在面向对象的世界里,万事万物皆对象.(java语言中,静态的成员.普通数据类型除外) 类是不是对象呢?类是(哪个类的对象呢?)谁的对象呢? -- 类是对象,类是jav ...

  8. java 参数代替所有类_Java中的常用类

    1      常用类NO13 [ Int    Interger short  Short byte   Byte double Double float   Float Boolean Boolea ...

  9. java 对象 转换 工具类_Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)...

    通用excel与对象相互转换的工具类 前言:最近开发需要一个Excel批量导入或者导出的功能,之前用过poi-ooxml开发过一个导入的工具类,正好蹭着这次机会,把工具类的功能进行完善. 使用说明: ...

最新文章

  1. Sqoop 1.99.3 hadoop-1.2.1 安装配置
  2. 创建一个dynamics 365 CRM online plugin (四) - PreValidation
  3. 《LINUX内核设计与实现》第五章学习总结
  4. 【渝粤题库】陕西师范大学700004 植物生理学
  5. 第四十五期:万亿级日访问量下,Redis在微博的9年优化历程
  6. html超链接点不了_HTML、CSS、JS都有哪些区别?不看必悔
  7. hadoop2.2.0 分布式存储hdfs完全分布式搭建及功能测试记录(一)----架构及原理介绍...
  8. 敏捷开发一千零一问系列之十二:敏捷实施的步骤?
  9. 使用rsync+inotify+apache做分布式图片服务器的部署方法
  10. 给DataGridView 的单元格 赋空值
  11. 智能配电房综合监控系统的探讨
  12. 防水穿墙套管在建筑外墙管道需设置柔性连接
  13. java第十一次作业
  14. 360企业版的IT管理价值
  15. open_table与opened_table
  16. Houdini运行时崩溃了怎么办?别害怕,还有一点点救!
  17. 从网卡中截获sql server的sql语句
  18. android 图片读写,Android读取本地照片和视频相册
  19. riscv 的 CSR
  20. 打出一个e^x的图像

热门文章

  1. Find Integer(费马大定理的使用)
  2. Coloring Dominoes
  3. 4.3 计算机网络之IPv4(IPv4分组、IPv4地址、NAT、子网划分与子网掩码、CIDR、ARP协议、DHCP、ICMP)
  4. 启明云端分享|乐鑫ESP32-WROOM-32E和ESP32-WROOM-32UE两款模组的区别
  5. ESP32-CAM使用过程中可能会遇到的问题
  6. android o preview 3,Android O Preview 之 通知渠道(Notification Channels)
  7. verilog中wire和reg的区别,什么时候用wire?什么时候用reg?
  8. 计算机英语教程第6版司爱侠,计算机专业英语教程(第3版)宋德福 司爱侠 练习参考答案...
  9. 有监督学习和无监督学习举例_对比自监督学习
  10. java des加密解密