JDK 1.7的部分新特性如下:
1)switch可以接受Stringe类型。随着Java语言的发展,在java7中,开始支持String类型。
public class Switch {
public void test(String str) {
switch (str) {
case "computer":
System.out.println("computer");
break;
case "book":
System.out.println("book");
break;
case "phone":
System.out.println("phone");
break;
default:
System.out.println("default");
break;
}
}
}
注意:本质上说,switch对字符串的支持,实质上还是对int类型值的匹配,原理如下:通过对case后面的Stirng对象调用hashCode()方法,得到一个int类型的hash值,然后用这个hash值来唯一匹配case。String变量不能为null,同时switch的case子句中使用的字符串也不能为null。
2)可以在catch代码块中捕获多个异常类型。
try {
//可能会抛出Exception1和Exception2异常的代码
}catch(Exception1 | Exception2 3) {
//处理异常的代码
}
3)对数值字面量进行了改进。
(1)增加了二进制字面量的表示(0B001、0b111)。整数类型(例如byte、short、int、long等)也可以使用二进制数来表示。
(2)在数字中可以添加分隔符,例如123_456,下划线只能被用在数字中间,编译的时候这些下划线会被编译器去掉。好处:避免了一些难以观察代码来发现的细微错误。
(4)使用范型的时候增加了类型推断机制。
在Java7以前,实例化一个HashMap对象的写法如下:
Map<String, String> map = new HashMap<String,Stiring>();
在Java7引入了类型推断机制,实例化一个HashMap对象的写法如下:
Map<String, String> map = new HashMap<>();
(5)增加了try-with-resources语句,确保了每个资源都在生命周期结束后被关闭,故在读取文件结束后,不需要显示的调用close方法。
try (InputStream fis = new FileInputStream("input.text");){
while(fis.read() != -1) {
System.out.println(fis.read());
}
}catch(Exception e) {
e.printStackTrace();
}
(6)增加了fork/join框架用来增强对处理多核并行计算的支持,应用场景为:一个应用程序能被分解成多个子任务,并且组合多个子任务分别就能获取最终的答案,在这种情况下,就可以使用fork/join框架。
JDK1.8的部分新特性:
(1)增加了对Lambda表达式的支持。Lambda表达式是一个匿名函数。
(2)接口增加了方法默认实现和静态方法。JDK1.8通过使用关键字default可以给接口中的方法添加默认实现。
(3)方法引用。方法引用指的是可以直接引用java类或对象的方法。
(4)注解。
(5)类型推测。
(6)参数名字。JDK1.8通过在编译的时候增加-parameters选项,以及增加反射API与Parameter.getName()方法实现了获取方法参数名的功能。
(7)新增Stream类。把函数式的编程风格引入到java语言中。
(8)日期新特性。