Java 7 中的新特性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/213958/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
New features in java 7
提问by
What new features in java 7 is going to be implemented? And what are they doing now?
java 7 中将实现哪些新特性?他们现在在做什么?
回答by David G
In addition to what John Skeet said, here's an overview of the Java 7 project. It includes a list and description of the features.
除了 John Skeet 所说的,这里还有 Java 7 项目的概述。它包括功能的列表和描述。
Note: JDK 7 was released on July 28, 2011, so you should now go to the official java SE site.
注意:JDK 7 于 2011 年 7 月 28 日发布,因此您现在应该访问官方Java SE 站点。
回答by didxga
Java SE 7 Features and Enhancementsfrom JDK 7 Release Notes
JDK 7 发行说明中的Java SE 7功能和增强功能
This is the Java 7 new features summary from the OpenJDK 7 features page:
这是来自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]
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]
Code examples for new features in Java 1.7
Java 1.7 中新特性的代码示例
Try-with-resources statement
Try-with-resources 语句
this:
这个:
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
becomes:
变成:
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
You can declare more than one resource to close:
您可以声明多个要关闭的资源:
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest))
{
// code
}
Underscores in numeric literals
数字文字中的下划线
int one_million = 1_000_000;
Strings in switch
开关中的字符串
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;
}
Binary literals
二进制文字
int binary = 0b1001_1001;
Improved Type Inference for Generic Instance Creation
改进了通用实例创建的类型推断
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
becomes:
变成:
Map<String, List<String>> anagrams = new HashMap<>();
Multiple exception catching
多个异常捕获
this:
这个:
} catch (FirstException ex) {
logger.error(ex);
throw ex;
} catch (SecondException ex) {
logger.error(ex);
throw ex;
}
becomes:
变成:
} catch (FirstException | SecondException ex) {
logger.error(ex);
throw ex;
}
SafeVarargs
安全变量
this:
这个:
@SuppressWarnings({"unchecked", "varargs"})
public static void printAll(List<String>... lists){
for(List<String> list : lists){
System.out.println(list);
}
}
becomes:
变成:
@SafeVarargs
public static void printAll(List<String>... lists){
for(List<String> list : lists){
System.out.println(list);
}
}
回答by Muhammad Imran Tariq
The following list contains links to the the enhancements pages in the Java SE 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
回答by apresh
New Feature of Java Standard Edition (JSE 7)
Java 标准版 (JSE 7) 的新特性
Decorate Components with the JLayer Class:
The JLayer class is a flexible and powerful decorator for Swing components. The JLayer class in Java SE 7 is similar in spirit to the JxLayer project project at java.net. The JLayer class was initially based on the JXLayer project, but its API evolved separately.
Strings in switch Statement:
In the JDK 7 , we can use a String object in the expression of a switch statement. The Java compiler generates generally more efficient bytecode from switch statements that use String objects than from chained if-then-else statements.
Type Inference for Generic Instance:
We can replace the type arguments required to invoke the constructor of a generic class with an empty set of type parameters (<>) as long as the compiler can infer the type arguments from the context. This pair of angle brackets is informally called the diamond. Java SE 7 supports limited type inference for generic instance creation; you can only use type inference if the parameterized type of the constructor is obvious from the context. For example, the following example does not compile:
List<String> l = new ArrayList<>(); l.add("A"); l.addAll(new ArrayList<>());
In comparison, the following example compiles:
List<? extends String> list2 = new ArrayList<>(); l.addAll(list2);
Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking:
In Java SE 7 and later, a single catch block can handle more than one type of exception. This feature can reduce code duplication. Consider the following code, which contains duplicate code in each of the catch blocks:
catch (IOException e) { logger.log(e); throw e; } catch (SQLException e) { logger.log(e); throw e; }
In releases prior to Java SE 7, it is difficult to create a common method to eliminate the duplicated code because the variable e has different types. The following example, which is valid in Java SE 7 and later, eliminates the duplicated code:
catch (IOException|SQLException e) { logger.log(e); throw e; }
The catch clause specifies the types of exceptions that the block can handle, and each exception type is separated with a vertical bar (|).
The java.nio.file package
The
java.nio.file
package and its related package, java.nio.file.attribute, provide comprehensive support for file I/O and for accessing the file system. A zip file system provider is also available in JDK 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 文件系统提供程序。
回答by Coral
Language changes:
语言变化:
-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator
Library changes:
图书馆变化:
-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades
Platform changes:
平台变化:
-support for dynamic languages
Below is the link explaining the newly added features of JAVA 7 , the explanation is crystal clear with the possible small examples for each features :
下面是解释 JAVA 7 新增功能的链接,每个功能的可能小例子的解释非常清楚:
回答by Premraj
Java Programming Language Enhancements @ Java7
- Binary Literals
- Strings in switch Statement
- Try with Resourcesor ARM (Automatic Resource Management)
- Multiple Exception Handling
- Suppressed Exceptions
- underscore in literals
- Type Inference for Generic Instance Creation using Diamond Syntax
- Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods
- 二进制文字
- switch 语句中的字符串
- 尝试使用 Resources或 ARM(自动资源管理)
- 多重异常处理
- 被抑制的异常
- 文字中的下划线
- 使用 Diamond 语法创建通用实例的类型推断
- 改进了将不可具体化的形式参数与 Varargs 方法一起使用时的编译器警告和错误
Official reference
Official reference with java8
wiki reference
回答by Amit
Using Diamond(<>) operator for generic instance creation
使用 Diamond(<>) 运算符创建通用实例
Map<String, List<Trade>> trades = new TreeMap <> ();
Using strings in switch statements
在 switch 语句中使用字符串
String status= “something”;
switch(statue){
case1:
case2:
default:
}
Underscore in numeric literals
数字文字中的下划线
int val 12_15; long phoneNo = 01917_999_720L;
int val 12_15; 长电话号码 = 01917_999_720L;
Using single catch statement for throwing multiple exception by using “|” operator
使用单个 catch 语句通过“|”抛出多个异常 操作员
catch(IOException | NullPointerException ex){
ex.printStackTrace();
}
No need to close() resources because Java 7 provides try-with-resources statement
不需要 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
}
binary literals with prefix “0b” or “0B”
带有前缀“0b”或“0B”的二进制文字
回答by Dexter
I think ForkJoinPooland related enhancement to Executor Framework is an important addition in Java 7.
我认为 ForkJoinPool和对 Executor Framework 的相关增强是 Java 7 中的一个重要补充。