java 7 中将实现哪些新功能?他们现在在做什么?
8 回答
JDK 7 发行说明中的 Java SE 7功能和增强功能
这是来自OpenJDK 7 功能页面的 Java 7 新功能摘要:
vm JSR 292:支持动态类型语言 (InvokeDynamic) 严格的类文件检查 lang JSR 334:小语言增强(Project Coin) 核心升级类加载器架构 关闭 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 4.1 Java 2D 的客户端 XRender 管道 为 6u10 图形功能创建新的平台 API Swing 的 Nimbus 外观 Swing JLayer 组件 Gervill 声音合成器 [新] web 更新 XML 堆栈 mgmt 增强型 MBean [更新]
Java 1.7 中新特性的代码示例
Try-with-resources 语句
这个:
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);
}
}
Java 标准版 (JSE 7) 的新特性
使用 JLayer 类装饰组件:
JLayer 类是一个灵活而强大的 Swing 组件装饰器。Java SE 7 中的 JLayer 类在本质上类似于 java.net 上的 JxLayer 项目项目。JLayer 类最初是基于 JXLayer 项目,但它的 API 是单独发展的。
switch 语句中的字符串:
在 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 包
该
java.nio.file
包及其相关包 java.nio.file.attribute 为文件 I/O 和访问文件系统提供全面的支持。JDK 7 中还提供了一个 zip 文件系统提供程序。
来源: http: //ohmjavaclasses.blogspot.com/
除了 John Skeet 所说的,这里是Java 7 项目的概述。它包括功能列表和描述。
注意:JDK 7 于 2011 年 7 月 28 日发布,因此您现在应该访问官方java SE 站点。
语言变化:
-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
下面是解释 JAVA 7 新增功能的链接,解释很清楚,每个功能都有可能的小例子:
使用 Diamond(<>) 运算符创建通用实例
Map<String, List<Trade>> trades = new TreeMap <> ();
在 switch 语句中使用字符串
String status= “something”;
switch(statue){
case1:
case2:
default:
}
数字文字中的下划线
国际价值 12_15; 长电话号码 = 01917_999_720L;
使用“|”使用单个 catch 语句引发多个异常 操作员
catch(IOException | NullPointerException ex){
ex.printStackTrace();
}
无需 close() 资源,因为 Java 7 提供了 try-with-resources 语句
try(FileOutputStream fos = new FileOutputStream("movies.txt");
DataOutputStream dos = new DataOutputStream(fos)) {
dos.writeUTF("Java 7 Block Buster");
} catch(IOException e) {
// log the exception
}
前缀为“0b”或“0B”的二进制字面量</p>
我认为 ForkJoinPool和对 Executor Framework 的相关增强是 Java 7 中的一个重要补充。
以下列表包含指向 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