- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章浅析Java编程中枚举类型的定义与使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
定义枚举类型时本质上就是在定义一个类,只不过很多细节由编译器帮您补齐了,所以某些程度上,enum关键字的 作用就像是class或interface.
当您使用"enum"定义枚举类型时,实质上您定义出来的类型继承自 java.lang.Enum 类,而每个枚举的成员其实就是您定义的枚举类型的一个实例(Instance),它们都被默认为 final,所以您无法改变它们,它们也是 static 成员,所以您可以透过类型名称直接使用它们,当然最重要的,它们都 是公开的(public).
举个例子:
1
2
|
OpConstants.java
public
enum
OpConstants {TURN_LEFT, TURN_RIGHT, SHOOT}
|
在这个例子中,OpConstants继承自 java.lang.Enum,每个枚举成员如TURN_LEFT、TURN_RIGHT、SHOOT,它们都是OpConstants的一个对象实例, 即是 对象实例,上面自然有一些方法可以采用,例如toString()方法被覆盖了,可以让您直接取得枚举值的字符串描述,而枚举对象定义的values ()方法可以让您取得所有的枚举实例,并以数组方式传回,您使用这两个方法来简单的将OpConstants的内容显示出来:
1
2
3
4
5
6
7
8
|
ShowEnum.java
public
class
ShowEnum {
public
static
void
main(String[] args) {
for
(OpConstants constant: OpConstants.values()) {
System.out.println(constant.toString());
}
}
}
|
基本上println()会自动调用toString(),所以不写toString()其实也是可以的,执行结果如下:
1
2
3
|
TURN_LEFT
TURN_RIGHT
SHOOT
|
您可以使用 "==" 或是 equals() 方法来比较枚举对象,""==""会比较您提供的枚举对象是不是同一个(也就是占据同一个内存位置),而equals()则是实质的比较两个枚举对象的内容,默认会根据枚举的字符串值来比较.
valueOf()方法可以让您将指定的字符串尝试转换为枚举实例,您可以使用compareTo()方法,这可以比较两个枚举对象在枚举时的顺序,下面举个例子 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
ShowEnum.java
public
class
ShowEnum {
public
static
void
main(String[] args) {
enumCompareTo(OpConstants.valueOf(args[
0
]));
}
public
static
void
enumCompareTo(OpConstants constant) {
System.out.println(constant);
for
(OpConstants c: OpConstants.values()) {
System.out.println(constant.compareTo(c));
}
}
}
|
执行结果:
1
|
$java ShowEnum TURN_RIGHT
|
1
2
3
4
|
TURN_RIGHT
1
0
-1
|
传回正值,表示顺序在被比较的枚举对象之前,负值表示之后,而0则表示两个互比枚举值的位置是相同的.
对于每一个枚举成员,我们可以使用ordinal()方法,依枚举顺序得到位置索引,默认以 0 开始,例如:
1
2
3
4
5
6
7
8
|
ShowEnum.java
public
class
ShowEnum {
public
static
void
main(String[] args) {
for
(OpConstants c : OpConstants.values()) {
System.out.printf(
"%d %s%n"
, c.ordinal(), c);
}
}
}
|
执行结果:
1
2
3
|
0 TURN_LEFT
1 TURN_RIGHT
2 SHOOT
|
enum关键字可用于定义一个枚举类,可以把相关常量写在一个类里,下面我们再来看个例子.
如下代码: 。
1
2
3
4
5
6
7
8
9
10
11
|
class
TestClass {
private
TestClass(){}
//定义私有构造函数,不能从外部实例化对象
//提供两个实例A、B
public
static
final
TestClass A=
new
TestClass();
public
static
final
TestClass B=
new
TestClass();
}
|
可以用枚举类型代替:
1
2
3
4
5
|
enum
TestClass01{
A,B;
}
|
用法:
一个枚举也可以有构造函数、字段和方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
enum
TestClass02{
A(
"a"
)
//建立对象时传入构造函数参数
,B(
"b"
);
private
String value;
private
TestClass02(String value){
this
.value=value;
}
public
String getValue(){
return
this
.value;
}
}
|
枚举也可以有抽象方法:
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
|
enum
TestClass03{
A(){
//实现抽象方法
public
void
type(){
System.out.println(
"优"
);
}
}
,B(){
public
void
type(){
System.out.println(
"良"
);
}
};
public
abstract
void
type();
//定义抽象方法
}
|
测试方法:
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
|
public
class
Test02 {
public
static
void
main(String[] args){
print(TestClass02.A);
//传入枚举参数
}
public
static
void
print(TestClass02 t){
System.out.println(t.getValue());
}
enum
TestClass02{
A(
"a"
)
,B(
"b"
);
private
String value;
private
TestClass02(String value){
this
.value=value;
}
public
String getValue(){
return
this
.value;
}
}
}
|
运行结果:
1
2
3
4
|
a
Author:事始
Sign:只要你还在尝试,就不算失败。
|
。
最后此篇关于浅析Java编程中枚举类型的定义与使用的文章就讲到这里了,如果你想了解更多关于浅析Java编程中枚举类型的定义与使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
很多朋友或许都有这个疑问,一个网站域名和网站的排名有关系吗?今天本文就从三个方面分析网站的域名与网站的排名有没有关系,希望对大家有一定的帮助。 1、全拼双拼域名 首先,我们要知道在这一点百
什么是进程 当一个程序进入内存中运行起来它就变为一个进程。因此,进程就是一个处于运行状态的程序。同时进程具有独立功能,进程是操作系统进行资源分配和调度的独立单位。 什么是线程 线程是进
最近几年,互联网络竞争异常激烈,各个企业为了增加业绩,都在网络销售中下足了功夫。要确定网站发展的方向,必须给自己的网站制定好一个发展目标,有了目标才能更好的发展。不管
一.基础知识准备: 1.层的原则: (1)每一层以接口方式供上层调用。 (2)上层只能调用下层。 (3)依赖分为松散交互和严格交互两种。 2.业务逻辑分类: (1)应
编程时一门技术,更是一门艺术 简单工厂模式利用面向对象方式通过继承、封装、多态把程序的耦合度降低,设计模式使得程序更加灵活,容易修改,易于复用。 下面是服务器计算器代码:
对于策略模式的理解:当一个业务有多种需求时候,在某个时候需要使用不同的方式来计算结果。这时候不同的方式可以理解为不同的策略来解决同样的问题。 例如:商场收银系统计算价格,1:正常计算 2:商品打折计
随着 Kubernetes 在企业中应用的越来越广泛和普及,越来越多的公司在生产环境中运维多个集群。本文主要讲述一些关于多集群 Kubernetes 的思考,包括为什么选择多集群,多集群的好处以
Kubelet 出于对节点的保护,允许在节点资源不足的情况下,开启对节点上 Pod 进行驱逐的功能。最近对 Kubelet 的驱逐机制有所研究,发现其中有很多值得学习的地方,总结下来
以下分析不针对任何快递公司,纯属实说。 申通快递在快递行业中速度与费用都属于中等的水平,在国内也分布有很多投递点,一般地区都可以投递到;顺丰在国内是速度最快的快递公司之一,一般来说隔天就能够到,其
概述 流(streams)是PHP4.3版本引入的一个特性,主要是为了统一文件、sockets以及其他类似资源的工作方法。PHP4.3距今已经有很长时间了,但是很多程序员似乎都不能正确使用PHP中
Pre 很早在看 Jesse 的 Asp.net Core快速入门 的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重&q
之前对closure一知半解,在网上也找不到一篇文章能把它说清楚,今天好像第一次对它有点清晰的了解 了,写个BLOG记念一下 lua的函数是一种 First-Class Value 的东西, 到底
1、什么是默认方法,为什么要有默认方法 简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法。只需在方法名前面加个default关键字即可。 为什么要有这个特性?首先,之前的接口是个双
信息数据传输的安全一直都是个很重要的话题,从刚开始当程序员时错以为MD5、SHA1这些哈希算法就是加密算法,到后来慢慢接触对称加密、非对称加密这些概念,再到对接各种大开发平台接口的时候看到他们通
前言 2021年,vanilla-extract 作为黑马登顶了 css-in-js 满意度榜首(虽然使用率仅为1%),号称是一个类型安全、高度兼容 TS 场景的库,国内相关讨论还很少,稍微看
(一)响应式数据 1. 简单例子 从最简单的数据绑定开始,在 Vue 2.0 中,我们这样将一个数据绑定到模板的指定位置: 在组件创建参数的 data 构造函数中返回一个用来绑定的数据对象,其
我是一名优秀的程序员,十分优秀!