java7 新特性 总结版

Java7语法新特性:

前言,这是大部分的特性,但还有一些没有写进去,比如多核 并行计算的支持加强 fork join 框架;这方面并没有真正写过和了解。也就不写进来了。

1. switch中增加对String类型的支持。

Java代码  

    public String generate(String name, String gender) {
       String title = "";
       switch (gender) {
           case "男":
               title = name + " 先生";
               break;
           case "女":
               title = name + " 女士";
               break;
           default:
               title = name;
       }
       return title;  

编译器在编译时先做处理:
①case只有一种情况,直接转成if;
②如果只有一个case和default,则直接转换为if...else...;
③有多个case,先将String转换为hashCode,然后对应的进行处理,JavaCode在底层兼容Java7以前版本。

2. 数字字面量的改进
①增加二进制表示
Java7前支持十进制(123)、八进制(0123)、十六进制(0X12AB)
Java7增加二进制表示(0B11110001、0b11110001)
②数字中可添加分隔符
Java7中支持在数字量中间增加'_'作为分隔符,更直观,如(12_123_456),下划线只能在数字中间,编译时编译器自动删除数字中的下划线。

3. 异常处理
①Throwable类增加addSuppressed方法和getSuppressed方法,支持原始异常中加入被抑制的异常。
异常抑制:在try和finally中同时抛出异常时,finally中抛出的异常会在异常栈中向上传递,而try中产生的原始异常会消失。
在Java7之前的版本,可以将原始异常保存,在finally中产生异常时抛出原始异常:

Java代码  

    public void read(String filename) throws BaseException {
        FileInputStream input = null;
        IOException readException = null;
        try {
            input = new FileInputStream(filename);
        } catch (IOException ex) {
            readException = ex;   //保存原始异常
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException ex) {
                    if (readException == null) {
                        readException = ex;
                    }
                }
            }
            if (readException != null) {
                throw new BaseException(readException);
            }
        }
    }

在Java7中的版本,可以使用addSuppressed方法记录被抑制的异常:

Java代码  

    public void read(String filename) throws IOException {
        FileInputStream input = null;
        IOException readException = null;
        try {
            input = new FileInputStream(filename);
        } catch (IOException ex) {
            readException = ex;
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException ex) {
                    if (readException != null) {    //此处的区别
                        readException.addSuppressed(ex);
                    }
                    else {
                        readException = ex;
                    }
                }
            }
            if (readException != null) {
                throw readException;
            }
        }
    }  

②catch子句可以同时捕获多个异常

Java代码  

    public void testSequence() {
        try {
            Integer.parseInt("Hello");
        }
        catch (NumberFormatException | RuntimeException e) {  //使用'|'分割,多个类型,一个对象e  

        }
    }  

③try-with-resources语句
Java7之前需要在finally中关闭socket、文件、数据库连接等资源;
Java7中在try语句中申请资源,实现资源的自动释放(资源类必须实现java.lang.AutoCloseable接口,一般的文件、数据库连接等均已实现该接口,close方法将被自动调用)。

Java代码  

     public void read(String filename) throws IOException {
         try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
             StringBuilder builder = new StringBuilder();
    String line = null;
    while((line=reader.readLine())!=null){
        builder.append(line);
        builder.append(String.format("%n"));
    }
    return builder.toString();
         }
     }  

try子句中可以管理多个资源:

Java代码  

  1. public void copyFile(String fromPath, String toPath) throws IOException {
         try ( InputStream input = new FileInputStream(fromPath);
        OutputStream output = new FileOutputStream(toPath) ) {
             byte[] buffer = new byte[8192];
    int len = -1;
    while( (len=input.read(buffer))!=-1 ) {
        output.write(buffer, 0, len);
    }
         }
     }  

4. 变长参数方法的优化
Java7之前版本中的变长参数方法:

Java代码  

    public int sum(int... args) {
        int result = 0;
        for (int value : args) {
            result += value;
        }
        return result;
    }  

对collections的支持

Java代码

List<String> list = new ArrayList<String>();
 list.add("item");
String item = list.get(0);       

 Set<String> set = new HashSet<String>();
 set.add("item");       

 Map<String, Integer> map = new HashMap<String, Integer>();
 map.put("key", 1);
 int value = map.get("key");     

 

 现在你还可以:

    List<String> list = ["item"];
    String item = list[0];       

    Set<String> set = {"item"};       

    Map<String, Integer> map = {"key" : 1};
    int value = map["key"];     

2.自动资源管理

原来:

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

      //You can declare more than one resource to close:       

      try (
        InputStream in = new FileInputStream(src);
         OutputStream out = new FileOutputStream(dest))
     {
      // code
     }      

3.对通用实例创建(diamond)的type引用进行了改进

原来:

    Map<String, List<String>> anagrams = new HashMap<String, List<String>>();   

现在:

    Map<String, List<String>> anagrams = new HashMap<>();    

4.数值可加下划线

    int one_million = 1_000_000;    

6.二进制文字

int binary = 0b1001_1001;  

异常catch可以一次处理完而不像以前一层层的surround;

public void newMultiCatch() {  

           try {  

                 methodThatThrowsThreeExceptions();  

           } catch (ExceptionOne | ExceptionTwo | ExceptionThree e) {  

                 // log and deal with all Exceptions  

           }  

     }  

文件读写 会自动关闭流而不像以前那样需要在finally中显式close;

public void newTry() {  

          try (FileOutputStream fos = new FileOutputStream("movies.txt");  

                      DataOutputStream dos = new DataOutputStream(fos)) {  

                dos.writeUTF("Java 7 Block Buster");  

          } catch (IOException e) {  

                // log the exception  

          }  

    }  
时间: 2024-12-31 11:31:08

java7 新特性 总结版的相关文章

【译】Java 8的新特性—终极版

文/杜琪(简书作者) 原文链接:http://www.jianshu.com/p/5b800057f2d8 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者". 声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己翻译了一版(写作驱动学习,加深印象),有些地方参考了该同学的. Java 8 前言: Java 8 已经发布很久了,很

Java 8 新特性终极版指南详解_java

前言: Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency.Java 8 Date Time API Tutorial : LocalDateTime和Abstract Class Versus Interface in the JDK 8 Era.本文还参考了一些其他资料,例如:15 Must

jQuery 3.0十大新特性最终版发布_jquery

jQuery 3.0 最终版发布了.jQuery 3.0将是jQuery的未来.但如果你需要IE6-8支持,您可以继续使用最新版本1.12. jQuery 3.0在日前发布了最终的全新版本.从2014年10月,jQuery团队对这个主要大版本进行维护开始,web开发者社区便一直在期待着这一刻的到来,终于在2016年6月他们迎来了这一个最终版www.lampbrother.net. 通过jQuery 3.0的版本更新说明,我们看到了一个保持着向后兼容的更轻便,更快速的jQuery.在本文中,我们将

Java9的一些新特性介绍_java

被接受的特性1. Jigsaw 项目;模块化源码 Jigsaw项目是为了模块化Java代码.将JRE分成可相互协作的组件,这也是Java 9 众多特色种的一个.JEP是迈向Jigsaw四步中的第一步,它不会改变JRE和JDK的真实结构.JEP是为了模块化JDK源代码,让编译系统能够模块编译并在构建时检查模块边界.这个项目原本是随Java 8发布的,但由于推迟,所以将把它加到Java 9. 一旦它完成,它可能允许根据一个项目需求自定义组件从而减少rt.jar的大小.在JDK 7 和JDK 8的rt

Java 8新特性方法引用详细介绍_java

Java 8新特性方法引用 对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容! Java 8的方法引用定义了四种格式: 引用静态方法     ClassName :: staticMethodName 引用对象方法:  Object:: methodName 引用特定类型方法: ClassName :: methodName 引用构造方法: ClassName  :: new  静态方法引用示例 /** * 静态方法引用 * @param <P> 引用方法

Opera 20浏览器正式版新特性:书签栏的提升

Opera软件公司今天发布了Windows.Mac和Android版的Opera 20 FINAL正式版本,这是自这款浏览器采用Chromium浏览器引擎后发布的第六个主要版本更新,相比先前的版本有一些细节方面的改进,而非革命性变化. Opera 20的许多新特性实际是在1月份Opera 19发布之时就添加到产品中的,包括有书签栏的提升.Hardcore模式,以及少量的细节调整.书签栏的出现在Opera 19中就受到了用户的欢迎,相对为用户提供了快速拨号(Speed Dial)之外的第二选择.而

Orcas版C# 3.0新特性

自从微软March CTP版本的Visual Studio和.net Framework "Orcas"发布以来,许多博客作家都在考察和评论这一版本在run-time macros和code metrics等方面的新特性. 近日,微软ASP.NET 和Ajax开发部的头脑Scott Guthrie又在其博客中发布了C# 3.0的一些新特性.其文中重点提及的C#3.0的新特性如下: Automatic properties--自动属性 Orcas 版的C#可以自动建立私有域和默认的get

Win8.1正式版十大新特性

  或许是升级人数太多的原因,本人的升级进度条一度卡在30%左右很久,不过经过彻夜鏖战我还是完成了这个3.42GB安装包的下载.下面,我就向大家分享一下我所见.所知的Windows 8.1正式版的新特性. 由 于去年10月发布的Win8未提供开始按钮,所以很多老用户都觉得不习惯.对此,微软Windows部门联合主管瑞乐尔曾对外界表示:"Win8对确不够 完美.我们正在积极思考哪些需要改变,并迅速改变它."果然,Windows 8.1中开始按钮的回归印证了微软高层的这番表态. 开始按钮

微软推出Windows 8.1预览版 六大新特性解析

网易科技讯 6月27日消息,微软今天在其Build开发者大会上正式推出了Windows 8.1预览版.科技博客TechCrunch撰文称该版本在易用性上有了很大的改进,并盘点了部分主要的新特性,包括开始按钮恢复.启动至桌面.深度整合SkyDrive.更加智能的搜索工具等等. 以下为文章主要内容: 微软恢复开始按钮,并允许用户直接进入桌面模式,说明该公司一直在倾听用户的意见.在很多方面,8.1--甚至是预览版--就是Windows 8本该有的模样. 自Windows 8推出以来,微软对其提供了超过