Answers:
这是OpenJDK 7功能页面上的Java 7新功能摘要:
vm JSR 292:支持动态类型的语言(InvokeDynamic) 严格的类文件检查 lang JSR 334:小型语言增强功能(项目硬币) 核心升级类加载器体系结构 关闭URLClassLoader的方法 并发和集合更新(jsr166y) i18n Unicode 6.0 区域设置增强 单独的用户区域设置和用户界面区域设置 ionet JSR 203:针对Java平台(NIO.2)的更多新I / O API 用于zip / jar存档的NIO.2文件系统提供程序 SCTP(流控制传输协议) SDP(套接字直接协议) 使用Windows Vista IPv6堆栈 TLS 1.2 秒椭圆曲线加密(ECC) jdbc JDBC 4.1 Java 2D的客户端XRender管道 创建用于6u10图形功能的新平台API Nimbus Swing的外观 Swing JLayer组件 Gervill声音合成器[NEW] Web更新XML堆栈 mgmt增强MBean [更新]
这个:
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);
}
}
Objects
类,它带有静态方法,以避免必须检查null引用。范例:if (obj != null && obj.equals(anotherObj))
变成if (Objects.equals(obj, anotherObj))
用JLayer类装饰组件:
JLayer类是Swing组件的灵活而强大的装饰器。Java SE 7中的JLayer类在本质上类似于java.net上的JxLayer项目项目。JLayer类最初是基于JXLayer项目的,但是其API是单独开发的。
switch语句中的字符串:
在JDK 7中,我们可以在switch语句的表达式中使用String对象。与使用链式if-then-else语句相比,Java编译器通常从使用String对象的switch语句生成更有效的字节码。
通用实例的类型推断:
我们可以用一组空的类型参数(<>)来替换调用通用类的构造函数所需的类型参数,只要编译器可以从上下文中推断出类型参数即可。这对尖括号被非正式地称为菱形。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文件系统提供程序。
Simple, Object-Oriented, Portable, Platform independent, Secured...
语言变更:
-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:
}
数字文字下划线
int val 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”的二进制文字
以下列表包含指向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