Java 7的新功能


Answers:


211

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

这是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 [更新]

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

4
+1代码,用于查找示例代码。您可以添加更多吗?
Zasz 2011年

3
改进的类型推断似乎是C#的一个令人遗憾的复制,其中有一个奇怪的更改,其中键入了引用,但对象不是?什么喜剧!
Zasz 2011年

1
@Zasz,是的,它正在持续改进
didxga 2011年

对OP来说,问题是什么?这些增强功能只是在生产力方面,还是真的可以提高程序性能?如果字节码没有变化,可以将标记为1.5的字节码用于新的语言增强功能吗?
Dmitriy R

尽管不是语言上的改进,但还是有一个新Objects类,它带有静态方法,以避免必须检查null引用。范例:if (obj != null && obj.equals(anotherObj))变成if (Objects.equals(obj, anotherObj))
Carcamano '16

13

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

  1. 用JLayer类装饰组件:

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

  2. switch语句中的字符串

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

  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包

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

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


6


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


0

使用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”的二进制文字


0

我认为 ForkJoinPool和对Executor框架的相关增强是Java 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

参考1 参考2


1
您应该提供更多简短的描述或示例,而不是列出我们也可以在Java官方页面中找到的列表。
肯·布洛克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.