重温经典《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这门语言在内存这一块处理的更加的高效。

目录
相关文章
|
1月前
|
Java 编译器
java“变量 x 可能未被初始化”解决
在Java中,如果编译器检测到变量可能在使用前未被初始化,会报“变量 x 可能未被初始化”的错误。解决方法包括:1. 在声明变量时直接初始化;2. 确保所有可能的执行路径都能对变量进行初始化。
|
21天前
|
Java
Java 静态变量的初始化顺序
【10月更文挑战第15天】了解 Java 静态变量的初始化顺序对于正确编写和维护代码至关重要。通过深入理解初始化顺序的原理和细节,我们可以更好地避免潜在的问题,并提高代码的质量和可靠性。
|
1月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
24 3
|
1月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
50 1
|
3月前
|
安全 Java 关系型数据库
Java连接Mysql SSL初始化失败
Java连接Mysql SSL初始化失败
|
3月前
|
存储 Java
如何在 Java 中初始化二维 ArrayList
【8月更文挑战第23天】
91 1
|
3月前
|
存储 JavaScript Java
Java中未被初始化的字符串打印出“null”?
在Java中,未初始化的`String`变量默认值为`null`。打印此类变量时输出“null”,是因为`PrintStream`类中的`print`方法特别处理了`null`值,将其转换为字符串“null”。从JDK 17开始,`println`方法通过`String.valueOf`间接实现相同功能。当拼接包含`null`的字符串时,如`s1 + "BLACK"`,结果为“nullBLACK”,这是因为字符串构建过程中`StringBuilder`的`append`方法将`null`转换为“null”。
|
3月前
|
存储 Java 编译器
如何在 Java 中初始化对象 Arraylist?
【8月更文挑战第23天】
105 0
|
3月前
|
存储 Java 开发工具
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
|
3月前
|
Java Spring
Java SpringBoot Bean InitializingBean 项目初始化
Java SpringBoot Bean InitializingBean 项目初始化
54 0