将实施java 7中的哪些新功能? 他们现在在做什么?
答案 0 :(得分:193)
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);
}
}
答案 1 :(得分:13)
使用JLayer类装饰组件:
JLayer类是Swing组件的灵活且强大的装饰器。 Java SE 7中的JLayer类在精神上与java.net中的JxLayer项目项目类似。 JLayer类最初基于JXLayer项目,但其API单独发展。
开关语句中的字符串:
在JDK 7中,我们可以在switch语句的表达式中使用String对象。 Java编译器通常使用String对象生成比使用链接if-then-else语句的switch语句更高效的字节码。
通用实例的类型推断:
只要编译器可以从上下文推断出类型参数,我们就可以用一组空的类型参数(&lt;&gt;)替换调用泛型类的构造函数所需的类型参数。这对尖括号被非正式地称为钻石。 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文件系统提供程序。
答案 2 :(得分:5)
Java Programming Language Enhancements @ Java7
Official reference
Official reference with java8
wiki reference
答案 3 :(得分:3)
除了John Skeet所说的,这里还有overview of the Java 7 project。它包括功能列表和说明。
注意:JDK 7于2011年7月28日发布,因此您现在应该转到官方java SE site。
答案 4 :(得分:1)
语言更改:
-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新增功能的链接,解释清楚,每个功能都有可能的小例子:
答案 5 :(得分:0)
使用Diamond(&lt;&gt;)运算符进行通用实例创建
Map<String, List<Trade>> trades = new TreeMap <> ();
在switch语句中使用字符串
String status= “something”;
switch(statue){
case1:
case2:
default:
}
数字文字中的下划线
int val 12_15; long phoneNo = 01917_999_720L;
使用单个catch语句通过“|”运算符
抛出多个异常
catch(IOException | NullPointerException ex){
ex.printStackTrace();
}
无需关闭()资源,因为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”的二进制文字
答案 6 :(得分:0)
我认为 ForkJoinPool 和对Executor框架的相关增强是Java 7中的重要添加。
答案 7 :(得分:-2)
以下列表包含指向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