java 7 中的新功能

2022-08-31 10:41:46

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


答案 1

JDK 7 发行说明中的 Java SE 7 功能和增强功能

这是来自 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]

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

安全瓦拉斯

这:

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

答案 2

Java Standard Edition (JSE 7) 的新功能

  1. 使用 JLayer 类修饰组件:

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

  2. 开关语句中的字符串

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

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

    我们可以将调用泛型类的构造函数所需的类型参数替换为一组空的类型参数(<>),只要编译器可以从上下文中推断出类型参数。这对尖括号被非正式地称为钻石。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 package

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

资料来源:http://ohmjavaclasses.blogspot.com/


推荐