java 7中的新功能

时间:2008-10-17 21:50:55

标签: java-7 java

将实施java 7中的哪些新功能? 他们现在在做什么?

8 个答案:

答案 0 :(得分:193)

JDK 7发行说明中的​​Java SE 7 Features and Enhancements

这是OpenJDK 7 features page

中的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]

Java 1.7

中新功能的代码示例

试用资源声明

这样:

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;
}

SafeVarargs

这样:

@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)

Java标准版的新功能(JSE 7)

  1. 使用JLayer类装饰组件:

    JLayer类是Swing组件的灵活且强大的装饰器。 Java SE 7中的JLayer类在精神上与java.net中的JxLayer项目项目类似。 JLayer类最初基于JXLayer项目,但其API单独发展。

  2. 开关语句中的字符串

    在JDK 7中,我们可以在switch语句的表达式中使用String对象。 Java编译器通常使用String对象生成比使用链接if-then-else语句的switch语句更高效的字节码。

  3. 通用实例的类型推断:

    只要编译器可以从上下文推断出类型参数,我们就可以用一组空的类型参数(&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);
    
  4. 使用改进的类型检查捕获多个异常类型和重新抛出异常

    在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子句指定块可以处理的异常类型,每个异常类型用竖线(|)分隔。

  5. java.nio.file包

    java.nio.file包及其相关包java.nio.file.attribute为文件I / O和访问文件系统提供全面支持。 JDK 7中也提供了zip文件系统提供程序。

  6. 来源:http://ohmjavaclasses.blogspot.com/

答案 2 :(得分:5)

答案 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新增功能的链接,解释清楚,每个功能都有可能的小例子:

http://radar.oreilly.com/2011/09/java7-features.html

答案 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

Reference 1 Reference 2