jdk7 project coin 新特性一览

JDK7在20110728已经发布,分别在jvm、语法、国际化、jdbc、异步api等多方面有增强或新特性引入;其中java本身的语法增强似乎并不如想象中的那么令人激动…从代表着jdk7语法变更的”Project Coin”项目简介上看, jdk7的发布带来了以下语法变动:

  1. Strings in switch——String用在switch语句中
  2. Binary integral literals and underscores in numeric literals——二进制字面量与在数字字面量中添加下划线
  3. Multi-catch and more precise rethrow
  4. Improved type inference for generic instance creation (diamond)
  5. try-with-resources statement
  6. Simplified varargs method invocation

下面的两个附件是从网上收集的资料,很详细的说明了jdk7的新特性。
个人觉得String 的 switch和NIO2.0的目录监控很有意向。

JDK7新特性版_

jdk-new-feature55j7

下图是jdk7、jdk8、jdk9的比较,将要新增的一些特性。

psb

1. jdk7
1.1 JDK7新特性<一>概述 . . . . . . . . . . . .
1.2 JDK7新特性<二> 语法 . . . . . . . . . . .
1.3 JDK7新特性<三> JDBC4.1 . . . . . . . .
1.4 JDK7新特性<四> NIO2.0 文件系统 .
1.5 JDK7新特性<五> fork/join 框架 . . .
1.6 JDK7新特性<六> 监听文件系统的更改
1.7 JDK7新特性<七> 遍历文件树 . . . . .
1.8 JDK7新特性<八>异步io/AIO . . . . . .

1.1 JDK7新特性<一>概述

准备
JDK7下载 http://download.java.net/jdk7/
API文档 http://download.java.net/jdk7/docs/api/

新特性
1. 虚拟机
支持动态语言
严格的类文件检查
2. 语言

语法方面的更新 (请参考http://janeky.iteye.com/blog/1047799)
core 类加载器(class-loader)的架构进行了升级改进
提供关闭URLClassLoader的方法
并发框架和容器的更新 (请参考http://janeky.iteye.com/blog/1047805)

3. 网络
提供更多的new I/O API (请参考http://janeky.iteye.com/blog/1047804)
filesystem支持zip/jar归档
SCTP(Stream Control Transmission Protocol)
SDP(Socket Direct Protocol)
使用Windows Vista 的IPv6 stack
TLS 1.2
4. 安全相关

Elliptic-curve cryptography (ECC)
5. 国际化
Unicode6.0
Local 增强
区别 user local 和 user-interface local
6. jdbc

JDBC4.1 (请参考http://janeky.iteye.com/blog/1047800)
7. client
Java 2D 提供 XRender pipeline
为 6u10 图形特性提供新的平台api
Swing 支持光圈效果 (Nimbus look-and-feel)
Swing JLayer 组件

8. web
更新 XML stack
9. mgmt
增强 JMX Agent 和 MBeans

 

下面的例子是从osc哪来的,借鉴一下。

 

package test;

import java.util.Map;
import java.util.HashMap;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Test {
    public static void main(String... args){
        // 二进制字面量
        binLiteral();
        // 带下划线的数字字面量
        numberUnderScore();
        // string用在switch中
        strSwitch("duck");
        // 泛型类型推断
        genericsInfer();
        // tryWithResource
        tryWithResource();
        // multi-catch
        multiCatch();
        // precise rethrow
        try{
        preciseRethrow();
        }catch(Exception1|Exception2 e){
            System.out.println(e);
        }
    }

    public static void binLiteral(){
        byte a = 0b00010001;
        System.out.println(a);
    }
    // 下划线不能出现在:
    // At the beginning or end of a number
    // Adjacent to a decimal point in a floating point literal
    // Prior to an F or L suffix
    // In positions where a string of digits is expected
    public static void numberUnderScore(){
        short s = 0b0010_0010_0010_0010;
        System.out.println(s);
    }

    // 内部变为hashCode、equals比较实现
    public static void strSwitch(String str){
        switch(str){
            case "cock":
                System.out.println("GeGe");
                break;
            case "duck":
                System.out.println("GaGa");
                break;
            default:
                System.out.println("Unhandled string: " + str);
        }
    }

    // generics inference
    public static void genericsInfer(){
        Map&lt;String, Integer&gt; map = new HashMap&lt;&gt;();
        map.put("one", 1);
        System.out.println(map);
    }

    // try with resource
    // resource == class implements java.lang.AutoCloseable
    // the close methods of resources are called in the opposite order of their creation
    // any catch or finally block is run after the resources declared have been closed
    public static void tryWithResource(){
        try(BufferedReader bf = new BufferedReader(new FileReader("text.txt"));){
            System.out.println(bf.readLine());
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    // catching multiple exceptions
    private static class Exception1 extends Exception{}
    private static class Exception2 extends Exception{}

    public static void multiCatch(){
        int r1 = randInt(2);
        try{
        switch(r1){
            case 1:
                throw new Exception1();
            case 2:
                throw new Exception2();
        }
        }catch(Exception1|Exception2 e){
            System.out.println(e);
        }
    }
    public static int randInt(int max){
        return (int)(Math.random()*max+1);
    }
    // precise rethrow
    public static void preciseRethrow() throws Exception1, Exception2{
        int r1 = randInt(2);
        try{
        switch(r1){
            case 1:
                throw new Exception1();
            case 2:
                throw new Exception2();
        }
        //}catch(Exception1|Exception2 e){// precise
        }catch(Exception e){
            throw e;
        }
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>