Java 7将实现哪些新功能?他们现在正在做什么?
以下是来自OpenJDK 7功能页面的Java 7新特性摘要:
vm JSR 292:支持动态类型语言(InvokeDynamic) 严格的类文件检查 lang JSR 334:小语言增强(Project Coin) core 升级类加载器架构 关闭URLClassLoader的方法 并发和集合更新(jsr166y) i18n Unicode 6.0 区域设置增强 用户区域设置和用户界面区域设置分离 ionet JSR 203:针对Java平台的更多新I/O API(NIO.2) zip/jar档案的NIO.2文件系统提供程序 SCTP(流控制传输协议) SDP(套接字直接协议) 使用Windows Vista IPv6栈 TLS 1.2 sec 椭圆曲线密码术(ECC) jdbc JDBC 4.1 client 用于Java 2D的XRender流水线 为6u10图形功能创建新的平台API Swing的Nimbus外观 Swing JLayer组件 Gervill音频合成器 [NEW] web 更新XML堆栈 mgmt 增强的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;
}
this:
@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);
}
}
Objects
类,其中包含静态方法来避免检查空引用。例如:if (obj != null && obj.equals(anotherObj))
变成了if (Objects.equals(obj, anotherObj))
。 - Carcamano使用JLayer类装饰组件:
JLayer类是Swing组件的一种灵活而强大的装饰器。Java SE 7中的JLayer类在精神上类似于java.net上的JxLayer项目。JLayer类最初基于JXLayer项目,但其API单独演变。
switch语句中的字符串:
在JDK 7中,我们可以在switch语句的表达式中使用String对象。对于使用String对象的switch语句,Java编译器生成的字节码通常比链式if-then-else语句更有效率。
泛型实例的类型推断:
我们可以使用一个空的类型参数集(<>)替换调用泛型类构造函数所需的类型参数,只要编译器可以从上下文推断出类型参数即可。这一对尖括号在非正式场合被称为diamond。 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包
java.nio.file
包及其相关包java.nio.file.attribute
为文件I/O和访问文件系统提供全面支持。JDK 7中还提供了一个zip文件系统提供程序。
简单、面向对象、可移植、平台无关、安全...
- Marinos An-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator
-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades
-support for dynamic languages
Map<String, List<Trade>> trades = new TreeMap <> ();
String status= “something”;
switch(statue){
case1:
case2:
default:
}
catch(IOException | NullPointerException ex){
ex.printStackTrace();
}
try(FileOutputStream fos = new FileOutputStream("movies.txt");
DataOutputStream dos = new DataOutputStream(fos)) {
dos.writeUTF("Java 7 Block Buster");
} catch(IOException e) {
// log the exception
}
我认为在Java 7中,ForkJoinPool和与Executor Framework相关的增强功能是一个重要的补充。
以下列表包含Java SE 7中增强页面的链接。
Swing
IO and New IO
Networking
Security
Concurrency Utilities
Rich Internet Applications (RIA)/Deployment
Requesting and Customizing Applet Decoration in Dragg able Applets
Embedding JNLP File in Applet Tag
Deploying without Codebase
Handling Applet Initialization Status with Event Handlers
Java 2D
Java XML – JAXP, JAXB, and JAX-WS
Internationalization
java.lang Package
Multithreaded Custom Class Loaders in Java SE 7
Java Programming Language
Binary Literals
Strings in switch Statements
The try-with-resources Statement
Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking
Underscores in Numeric Literals
Type Inference for Generic Instance Creation
Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods
Java Virtual Machine (JVM)
Java Virtual Machine Support for Non-Java Languages
Garbage-First Collector
Java HotSpot Virtual Machine Performance Enhancements
JDBC