小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文从语法糖入手,通过讲解枚举类的使用、原理从而巧妙的实现状态转换限制,本文共四个章节,希望对你有所帮助!
语法糖
语法糖(Syntactic sugar),也被译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。——摘抄自百度百科
本质上,JVM 并不支持语法糖,语法糖只存在于编译期。当编译器将 .java 源文件编译成 .class 字节码文件时,会进行解语法糖的操作,来还原最原始的基础语法结构。
我们所熟悉的编程语言中几乎都会包含语法糖,当然 JAVA 也不例外。JAVA 中的语法糖包含条件编译、断言、switch 支持 String 与枚举、可变参数、自动装箱/拆箱、枚举、内部类、泛型擦除、增强for循环、lambda表达式、try-with-resources等等。今天我们先来了解下枚举。
枚举类
JDK5 提供了一种新的特殊的类——枚举类,一般在类对象有限且固定的场景下使用,用来替代类中定义常量的方式。枚举相较于常量更加直观且类型安全。
枚举类的使用非常简单,用 enum 关键字来定义,多个枚举变量直接用逗号隔开。我们先来定义一个简单的枚举类 OrderStatus.java
public enum OrderStatus {
//未支付、已支付、退款中、退款成功、退款失败;
NO_PAY, PAY, REFUNDING, REFUNDED, FAIL_REFUNDED, ;
}
在其他类中使用 enum 变量的时候,只需要【类名.变量名】就可以了,和使用静态变量一样。另外,枚举类型可以确保 JVM 中仅存在一个常量实例,所以我们可以放心的使用“ ==”来比较两个变量。
注意事项:
- 枚举类的第一行必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其它的东西,这个分号就不能省略。建议不要省略!
- 枚举变量最好大写,多个单词之间使用”_”隔开(比如:NO_PAY)。
了解了语法糖和枚举的概念,下篇文章我们将利用反编译软件来看看枚举类的底层源码。如果你有不同的意见或者更好的idea,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!