java 7 中的新功能
java 7中将实现哪些新功能?他们现在在做什么?
这是来自 OpenJDK 7 功能页面的 Java 7 新功能摘要:
vm JSR 292: Support for dynamically-typed languages (InvokeDynamic) Strict class-file checking lang JSR 334: Small language enhancements (Project Coin) core Upgrade class-loader architecture Method to close a URLClassLoader Concurrency and collections updates (jsr166y) i18n Unicode 6.0 Locale enhancement Separate user locale and user-interface locale ionet JSR 203: More new I/O APIs for the Java platform (NIO.2) NIO.2 filesystem provider for zip/jar archives SCTP (Stream Control Transmission Protocol) SDP (Sockets Direct Protocol) Use the Windows Vista IPv6 stack TLS 1.2 sec Elliptic-curve cryptography (ECC) jdbc JDBC 4.1 client XRender pipeline for Java 2D Create new platform APIs for 6u10 graphics features Nimbus look-and-feel for Swing Swing JLayer component Gervill sound synthesizer [NEW] web Update the XML stack mgmt Enhanced MBeans [UPDATED]
这:
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
成为:
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
您可以声明要关闭多个资源:
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest))
{
// code
}
int one_million = 1_000_000;
String s = ...
switch(s) {
case "quux":
processQuux(s);
// fall-through
case "foo":
case "bar":
processFooOrBar(s);
break;
case "baz":
processBaz(s);
// fall-through
default:
processDefault(s);
break;
}
int binary = 0b1001_1001;
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
成为:
Map<String, List<String>> anagrams = new HashMap<>();
这:
} catch (FirstException ex) {
logger.error(ex);
throw ex;
} catch (SecondException ex) {
logger.error(ex);
throw ex;
}
成为:
} catch (FirstException | SecondException ex) {
logger.error(ex);
throw ex;
}
这:
@SuppressWarnings({"unchecked", "varargs"})
public static void printAll(List<String>... lists){
for(List<String> list : lists){
System.out.println(list);
}
}
成为:
@SafeVarargs
public static void printAll(List<String>... lists){
for(List<String> list : lists){
System.out.println(list);
}
}
使用 JLayer 类修饰组件:
JLayer 类是用于 Swing 组件的灵活而强大的装饰器。Java SE 7 中的 JLayer 类在精神上与 java.net 的 JxLayer 项目类似。JLayer类最初基于JXLayer项目,但其API是单独发展的。
开关语句中的字符串:
在 JDK 7 中,我们可以在 switch 语句的表达式中使用 String 对象。Java 编译器从使用 String 对象的 switch 语句生成字节码通常比从链接的 if-then-else 语句生成的字节码更有效。
通用实例的类型推断:
我们可以将调用泛型类的构造函数所需的类型参数替换为一组空的类型参数(<>),只要编译器可以从上下文中推断出类型参数。这对尖括号被非正式地称为钻石。Java SE 7 支持用于创建通用实例的有限类型推理;仅当构造函数的参数化类型从上下文中显而易见时,才能使用类型推断。例如,下面的示例不编译:
List<String> l = new ArrayList<>();
l.add("A");
l.addAll(new ArrayList<>());
相比之下,下面的示例进行编译:
List<? extends String> list2 = new ArrayList<>();
l.addAll(list2);
捕获多个异常类型并使用改进的类型检查重新引发异常:
在 Java SE 7 及更高版本中,单个 catch 块可以处理多种类型的异常。此功能可以减少代码重复。请考虑以下代码,它在每个 catch 块中都包含重复的代码:
catch (IOException e) {
logger.log(e);
throw e;
}
catch (SQLException e) {
logger.log(e);
throw e;
}
在 Java SE 7 之前的发行版中,很难创建一种通用方法来消除重复的代码,因为变量 e 具有不同的类型。以下示例在 Java SE 7 及更高版本中有效,它消除了重复的代码:
catch (IOException|SQLException e) {
logger.log(e);
throw e;
}
catch 子句指定块可以处理的异常类型,并且每个异常类型都用竖线分隔 (|)。
Java.nio.file package
该软件包及其相关软件包java.nio.file.attribute为文件I / O和访问文件系统提供了全面的支持。JDK 7 中还提供了 zip 文件系统提供程序。java.nio.file