爪哇2博客
爪哇2博客

爪哇 枚举教程和示例

爪哇 枚举是一种特殊的数据类型,它表示常量值的列表。它是Java类的一种特殊类型。它可以包含常量,方法和构造函数等。
让s see 例 to understand better
让’s说我们遇到了三种类型的问题,需要使用不同的SLA来解决。通常,它们的严重性为1级,2级和3级。因此,它将以枚举的形式表示如下。

1
2
3
4
5
6
7
8
 
上市 枚举 严重程度
 
(1级,
级别_2,
水平_3
)
 

这里

1
2
3
 
服务性  水平= 严重程度. 1级;
 
级别变量是Serverity类型,它是枚举类型。您只能为其分配3个值(Level_1,Level_2和Level_3)。如果分配任何其他值,则会给您带来编译时错误.java中的枚举类型是安全的并且具有自己的名称空间

现在,您一定想知道为什么可以’不要在这里使用类,为什么需要特殊的数据类型称为enum。
让s understand it with the help 的 例:
将枚举创建为SeverityEnum.java
1
2
3
4
5
6
7
8
9
10
 
组织.Arpit.爪哇2blog.核心java;
 
上市 枚举 严重性枚举
{
1级,
水平_2,
水平_3;
}
 

创建类为SeverityClass.java

1
2
3
4
5
6
7
8
9
10
 
组织.Arpit.爪哇2blog.核心java;
 
上市 严重等级 {
上市 静态的 最后 1级=“1级”;
上市 静态的 最后 水平_2=“ 水平_2”;
上市 静态的 最后 水平_3=“ 水平_3”;
 
}
 

创建issue.java。它将使用上面的枚举和类。

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
 
组织.Arpit.爪哇2blog.核心java;
 
上市 问题 {
 
问题Name;
 
上市 问题( 问题Name) {
  ();
  这个.问题Name = 问题Name;
}
上市 getIssueName() {
  返回 问题Name;
}
上市 虚空 setIssueName( 问题Name) {
  这个.问题Name = 问题Name;
}
 
上市 虚空 resolveIssueEnum(严重性枚举 水平)
{
  系统..打印(“解决”+问题Name+ 的“+水平.名称());
}
 
上市 虚空 resolveIssueClass( 水平)
{
  系统..打印(“解决”+问题Name+ 的“+水平);
}
 
}
 

创建EnumMain.java。

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
 
组织.Arpit.爪哇2blog.核心java;
 
上市 枚举 {
 
上市 静态的 虚空 主要( args[])
{
  问题 a= 问题(“服务器挂了”);
  问题 b= 问题(“ 用户界面格式不正确”);
 
  系统..打印(“解决问题:”);
  系统..打印(“ *****************”);
 
  a.resolveIssueClass(严重等级.水平_2);
 
  //您也可以在此处传递“ 水平_5”,但是LEVEL_5根本没有定义为“严重性”
  //因此,这被认为是无效值,但是如果使用class,您仍然可以传递它
  b.resolveIssueClass(“ 水平_5”);
 
  // b.resolveIssueEnum(“ 水平_5”);  // Compilation error
 
  //您只能使用此值传递固定值,这是我们的要求
  //因此enum确保类型安全
  a.resolveIssueEnum(严重性枚举.水平_2);
}
}
 

当您运行上述程序时,将得到以下输出:

1
2
3
4
5
6
7
 
解决 问题:
*****************
解决 服务器 水平_2
解决 用户界面 格式化的 适当地 水平_5
解决 服务器 水平_2
 

主要原因是类型安全。你赢了’不能将任何其他值与枚举一起使用,但是如果您使用class而不是enum,则可能更容易出错,因为您可能会为其分配无效的值。

让s understand more about 枚举.

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
 
组织.Arpit.爪哇2blog.核心java;
 
上市 问题 {
 
问题Name;
 
上市 问题( 问题Name) {
  ();
  这个.问题Name = 问题Name;
}
上市 getIssueName() {
  返回 问题Name;
}
上市 虚空 setIssueName( 问题Name) {
  这个.问题Name = 问题Name;
}
 
上市 静态的 虚空 主要([] args)
{
        严重程度 水平=严重程度.水平_2;
        系统..打印(水平.名称());
}
 
}
 

我们可以使用调试点看到enum的结构。
put debug point at line 21 and right click on project->debug as->爪哇 application. Program will stop execution at line 21 then right click on 水平 then select watch.You will be able to see structure as below.
爪哇枚举结构

因此它有很多方法,其中两个是:
名称() :它返回您的枚举常量。对于以上枚举级别,其值为LEVEL_2。
ordinal() :它返回您在枚举声明中的位置。这种方法通常不被程序员使用,它主要用于基于枚举的数据结构中,例如EnumSet。构造函数:
受保护的Enum(字符串名称,整数)
默认情况下,这只是枚举中的构造函数。不能通过程序调用。声明枚举时在内部调用此方法。我根据枚举的性质总结了这些枚举的要点。

构造函数:

  • 枚举可以具有构造函数,并且可以重载。
  • 枚举构造函数永远不能直接调用,在枚举初始化时将隐式调用它。
  • 您还可以为枚举常量提供值,但是您需要为此创建成员变量和构造函数

方法:

  • 您可以在枚举中声明方法。
  • 您还可以在枚举中声明抽象方法,并且在声明常量时,您需要覆盖它。
带说明的Java枚举示例

宣言 :

    • 您无法使用新操作创建enum实例,因为它不支持public构造函数,并且在Enum中需要固定值时也很有意义。如果允许新的运算符,那么您可能可以添加更多值。

1
2
3
4
 
//编译错误
服务性 水平= 严重程度();
 

    • 枚举常量是隐式静态的和最终的。创建后无法更改其值。
    • 您不能将任何其他类扩展到枚举,因为enum隐式扩展了Enum类,并且Java不允许多重继承。

您不能在枚举中扩展任何其他类

    • 枚举可以在类的内部或外部定义,但不能在方法中定义。
    • 在类外部声明的枚举不能声明为静态,抽象,私有,受保护或最终的。
    • 枚举可以实现一个接口。

枚举接口示例

  • 枚举末尾声明的半冒号是可选的。

比较和切换案例:

  • 您可以使用以下方法比较枚举的值‘==’  operator.
  • 您也可以在开关盒中使用枚举。

例:

创建名为Severity.java的Enum类

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
 
组织.Arpit.爪哇2blog.核心java;
 
上市 枚举 严重程度 {
 
1级(1) {
  @覆写
  上市 getDescription() {
   返回 “ 服务水平协议:2小时”;
  }
},
水平_2(2) {
  @覆写
  上市 getDescription() {
   返回 “ 服务水平协议:8小时”;
  }
},
水平_3(3) {
  @覆写
  上市 getDescription() {
   返回 “ 服务水平协议:1天”;
  }
};
 
整型 水平;
严重程度(整型 水平)
{
  这个.水平=水平;
}
 
上市 整型 getLevel()
{
  返回 水平;
}
 
上市 抽象 getDescription();
}
 

创建将在上面的枚举类中使用的issue.java。

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
组织.Arpit.爪哇2blog.核心java;
 
上市 问题 {
 
问题Name;
严重程度 问题Level;
 
上市 问题( 问题Name,严重程度 水平) {
  ();
  这个.问题Name = 问题Name;
  这个.问题Level=水平;
}
上市 getIssueName() {
  返回 问题Name;
}
上市 虚空 setIssueName( 问题Name) {
  这个.问题Name = 问题Name;
}
 
上市 严重程度 getIssueLevel() {
  返回 问题Level;
}
上市 虚空 setIssueLevel(严重程度 水平) {
  这个.问题Level = 水平;
}
上市 虚空 resolveIssueUsingSwitch()
{
 
  开关(问题Level)
  {
  案件 1级:
   系统..打印(“解决1级问题”);
   打破;
  案件 水平_2:
   系统..打印(“解决2级问题”);
   打破;
  案件 水平_3:
   系统..打印(“解决3级问题”);
   打破;
  }
 
}
 
上市 虚空 resolveIssueUsingIfElse()
{
  如果(问题Level==严重程度.1级)
  {
   系统..打印(“解决1级问题”);
  }
  其他 如果(问题Level==严重程度.水平_2)
  {
   系统..打印(“解决2级问题”);
  }
  其他 如果(问题Level==严重程度.水平_3)
  {
   系统..打印(“解决3级问题”);
  }
}
 
}
 

创建enumMain.java以运行代码:

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
 
组织.Arpit.爪哇2blog.核心java;
 
上市 枚举 {
 
上市 静态的 虚空 主要( args[])
{
  问题 a= 问题(“服务器挂了”,严重程度.1级);
  问题 b= 问题(“ 用户界面格式不正确”,严重程度.水平_3);
 
  系统..打印(“ *****************”);
  系统..打印(“解决问题:”);
 
  //使用if 其他
  a.resolveIssueUsingIfElse();
 
  //使用开关盒
  b.resolveIssueUsingSwitch();
 
  系统..打印(“ *****************”);
  系统..打印(“ 的价值方法示例”);
  //使用valueOf方法将字符串转换为Enum
  严重程度 水平2=枚举.的价值(严重程度.,“ 水平_2”);
  系统..打印(水平2.名称()+“-”+水平2.getDescription());
 
  //用于获取所有枚举值的值
  系统..打印(“ *****************”);
  系统..打印(“值方法示例”);
  对于 (严重程度 水平:严重程度.价值观()) {
   系统..打印(水平.名称()+“-”+水平.getDescription());
  }
 
}
}
 

当您运行上述代码时,将获得以下输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
*****************
解决 问题:
解决 水平 1 问题
解决 水平 3 问题
*****************
的价值 方法
水平_2 -服务水平协议: 8 小时
*****************
价值观 方法
1级 - 服务水平协议: 2 小时
水平_2 - 服务水平协议: 8 小时
水平_3 - 服务水平协议: 1
 

请通过  爪哇核心面试题 了解更多面试问题。

分享这个

作者

关注作者

相关文章

  • 6月8日

    带有字符串的Java枚举

    在本快速教程中,如何使用enum创建String常量,将String转换为enum等。您可以在此处阅读完整的enum教程。让’s创建java枚举String常量。创建java枚举字符串[crayon-601e7ccfee3ee785897811 /]’很简单。按名称访问枚举您可以简单地使用。操作员访问枚举,但如果您有[…]

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


让’s be Friends

©2020 爪哇2博客