重温经典《Thinking in java》第四版之第五章 初始化与清理(三十五)

简介: 重温经典《Thinking in java》第四版之第五章 初始化与清理(三十五)

“5.9 枚举类型”,在Java SE5中添加了一个看似很小的特性,即enum关键字,它使得我们在需要群组并使用枚举类型集时,可以很方便地处理。下面是一个简单的例子:

//: initialization/Spiciness.java publicenumSpiciness { 
NOT, MILD, MEDIUM, HOT, FLAMING}

///:~

枚举类型的实例都是常量,因此按照命名惯例它们都使用大写字母表示(多个单词用下划线隔开)。

为了使用enum,需要创建一个该类型的引用,并且将其赋值给某个实例:

//: initialization/SimpleEnumUse.java publicclassSimpleEnumUse { 
publicstaticvoidmain(String[] args) { 
SpicinesshowHot=Spiciness.MEDIUM; 
System.out.println(howHot); 
    } 
}

/* Output:

MEDIUM

*///:~

Enum枚举拥有一些有用的特性,比如它会创建toString()方法,以便显示实例的名字,正如上面打印出来的输出。还会创建ordinal()方法,显示声明的顺序,以及static values()方法,用来按照enum常量的声明顺序,产生由这些常量值构成的数组:

//: initialization/EnumOrder.java publicclassEnumOrder { 
publicstaticvoidmain(String[] args) { 
for(Spicinesss : Spiciness.values()) 
System.out.println(s+", ordinal "+s.ordinal()); 
    } 
}

/* Output:

NOT, ordinal 0

MILD, ordinal 1

MEDIUM, ordinal 2

HOT, ordinal 3

FLAMING, ordinal 4

*///:~

enum有一个特别实用的特性,即它可以在switch语句内使用:

//: initialization/Burrito.java publicclassBurrito { 
Spicinessdegree; 
publicBurrito(Spicinessdegree) { this.degree=degree;} 
publicvoiddescribe() { 
System.out.print("This burrito is "); 
switch(degree) { 
caseNOT: System.out.println("not spicy at all."); 
break; 
caseMILD: 
caseMEDIUM: System.out.println("a little hot."); 
break; 
caseHOT: 
caseFLAMING: 
default: System.out.println("maybe too hot."); 
        } 
    } 
publicstaticvoidmain(String[] args) { 
Burritoplain=newBurrito(Spiciness.NOT), 
greenChile=newBurrito(Spiciness.MEDIUM), 
jalapeno=newBurrito(Spiciness.HOT); 
plain.describe(); 
greenChile.describe(); 
jalapeno.describe(); 
    } 
}

/* Output:

This burrito is not spicy at all.

This burrito is a little hot.

This burrito is maybe too hot.

*///:~

由于switch是要在优先的可能值集合中进行选择,因此它与enum正是绝佳的组合。上面就是enum的理解和基本的使用,后续会更加深入的探讨这一块。

“5.10 总结”,构造器这种精巧的初始化机制给我们一个暗示:初始化在Java中占有直观重要的地位。垃圾回收器会自动为对象释放内存,所以在很多场合下,一般不需要写专门的清理方法去清理类和对象资源,这样Java中的内存管理变得很简单。但是类似于文件,图形,数据库等资源的释放还是需要程序员仔细去设计,还有不要依赖垃圾回收机制能帮你释放实时性质的资源,如果对实时性要求很高,可能Java语言本身就不合适。随着时间的推移,Java在性能方面已经取得了很多的进步,后来版本中的特性肯定会让Java这门语言在内存这一块处理的更加的高效。

目录
打赏
0
0
0
0
97
分享
相关文章
java“变量 x 可能未被初始化”解决
在Java中,如果编译器检测到变量可能在使用前未被初始化,会报“变量 x 可能未被初始化”的错误。解决方法包括:1. 在声明变量时直接初始化;2. 确保所有可能的执行路径都能对变量进行初始化。
710 2
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
327 12
|
8月前
|
Java 静态变量的初始化顺序
【10月更文挑战第15天】了解 Java 静态变量的初始化顺序对于正确编写和维护代码至关重要。通过深入理解初始化顺序的原理和细节,我们可以更好地避免潜在的问题,并提高代码的质量和可靠性。
|
9月前
|
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
195 3
|
9月前
|
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
248 1
|
11月前
|
如何在 Java 中初始化二维 ArrayList
【8月更文挑战第23天】
213 1
|
11月前
|
如何在 Java 中初始化对象 Arraylist?
【8月更文挑战第23天】
354 0
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
151 0
|
11月前
|
Java SpringBoot Bean InitializingBean 项目初始化
Java SpringBoot Bean InitializingBean 项目初始化
153 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问