Skip to content

Java进阶教程 - 5 Java7新特性

介绍一下 Java7 中新增的常用的新特性。

5.1 switch中选择因子支持String类型

以前switch中选择因子只能使用number或enum,Java7开始支持String类型。

java
String value = "abc";
switch (value) {
	case "abc":
		break;
	case "bcd":
		break;
	default:
		break;
}

5.2 数字字面量下划线支持

很长的数字可读性不好,在 Java 7中可以使用下划线分隔长 int 以及 long,系统在运算时先去除下划线。

java
int one_million = 1_000_000;
// 减去11
int value = one_million - 1_1;

5.3 泛型实例化类型自动推断

下面的代码:

java
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

在 Java 7后,通过类型推断后变成:

java
Map<String, List<String>> anagrams = new HashMap<>();

这个 <> 被叫做 diamond(钻石)运算符,这个运算符从引用的声明中推断类型。

5.4 二进制字面量

支持二进制字面值表示,以0b0B开头。

java
byte b = 0b010;
int i = 0b11;
short s = 0b100;

System.out.println(b); // 2
System.out.println(i); // 3
System.out.println(s); // 4

5.5 多个异常的合并与重抛异常的检查

很多时候,我们捕获了多个异常,却做了相同的事情,但是却不得不分开处理,显得不优雅。

在之前的版本中:

java
try {
    //...
}
catch (ArithmeticException e) {
    e.printStackTrace();
}
catch (NullPointerException e) {
    e.printStackTrace();
}

在 JDK1.7版本中,可以合并写成:

java
try {
    // ...
}
catch (ArithmeticException | NullPointerException e) {
    e.printStackTrace();
}

5.6 对资源的自动回收管理

jdk7提供了 try-with-resources ,可以自动关闭相关的资源(只要该资源实现了AutoCloseable接口,jdk7为绝大部分资源对象都实现了这个接口),写在 try() 中的资源才可以自动关闭。

JDK1.7之前的做法,需要在 finally 块中关闭相关资源

java
String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
	BufferedReader br = new BufferedReader(new FileReader(path));
	try {
		return br.readLine();
	} finally {
		if (br != null) {
			br.close();
		}
	}
}

JDK1.7中已经不需要手工关闭这些资源了,JRE自动关闭这些资源。

java
try (
  BufferedReader br = new BufferedReader(new FileReader("file.txt"))
) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    // Exception handling
}
内容未完......