Coin包括六个新特性:switch的String、数字常量新形式、改进的异常处理、TWR、钻石语法、参数警告位置的修改。
switch的String
switch在java 7后,case语句的常量可以使用String了,至于之前版本为什么不可以,引用参考链接中出现的一句话:
James Curran succinctly says: “Switches based on integers can be optimized to very efficent code. Switches based on other data type can only be compiled to a series of if() statements. For that reason C & C++ only allow switches on integer types, since it was pointless with other types.”
所以之前虽然支持byte、char、short、int(包括它们的包装类型)或枚举类型,但实际上都是将它们转化为int进行比较(这个转化润物细无声,JVM内部这些类型都是按照int存储的)。
而Java 7中支持String的实现原理是,伪代码如下:
|
|
如果a为null,那么在switch代码块中添加default即可。
数字常量新形式
二进制形式可以用0b开头来表示了。
输入一串数字非常长,可以用
_
下划线作为分隔符。
改进的异常处理
- 通过异常分类,把类别相近的异常放在一起处理。
例如:
|
|
- 为异常重抛提供帮助。
例如在异常往上抛出的过程中,如果中间某一层的catch使用了Exception,那么继续上抛只能用笼统的catch捕获。此时可以显式添加final关键字(不是必须):
|
|
TWR
try-with-resources是我们现在比较常用的特性之一。使用资源时,将其放在try的括号内,这样当程序离开代码块的时候资源会自动关闭。
但是要注意
:为了确保资源能正确关闭,应该讲各个资源声明为独立变量。
TWR还能改善错误跟踪的能力(在之前Java版本中抛出的异常信息经常会被覆盖)。
钻石语法
《Effective Java》第二章第一条讲到过静态工厂方法的第四大优势…
钻石语法顺势简化了代码。
参数警告位置的修改
泛型数组在Java中是被禁止的。而不定数量参数是依靠数组实现的,那么程序员可能不知不觉会构造出带有泛型数组的方法:
|
|
之前Java版本的警告信息会在使用doSomething的地方出现,而在Java 7中挪到了定义的地方。
小结
通过本篇,旨在巩固一些Java知识,了解Coin项目的基本内容。