zoukankan      html  css  js  c++  java
  • 几个有用的java 7特性

    不等不承认,距离Java SE 9 的发布只有2个月不到的时间了。但本人很low,直到最近才开始在实践中使用Java SE 7 给程序员们带来的一些新特性。更别说Java SE  8的lambda表达式, Stream API等高级特性了。所以,在本人未来的几篇博客里,会陆续介绍从Java SE 7 开始的一些新特性。写这些内容其实也是为了巩固自己所学,因为作者本人也是一个learner,不是什么大牛。好了,废话到此为止,接下来作者将介绍几个很实用的java 7特性,文中若有用词不当或专业术语不准的现象,望见谅!

    几个实用的Java 7特性:

    1. 异常处理的改进:

    在Java SE7里,一个catch可以捕获多个异常,这样可以减少重复代码。每个异常之间用 | 隔开。比如下面的这种形式:

    try  {

           //具体的处理代码
            } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {

          //捕获异常的处理方式

              }

    然而在Java SE 7之前,对应异常的捕获你必须采用如下形式:

    try  {

           //具体的处理代码
            }catch (InstantiationException ) {

                  //捕获异常的处理方式

              }

             catch (IllegalAccessException ) {

                  //捕获异常的处理方式

              }

            catch (ClassNotFoundException ) {

                  //捕获异常的处理方式

              }

       注意,如果一个catch处理了多个异常,那么这个catch的参数默认就是final的,你不能在catch块里修改它的值。 
    另外,用一个catch处理多个异常,比用多个catch每个处理一个异常生成的字节码要更小更高效。 

    2. try-with-resources语句:

    注意:try-with-resources作者的理解就是在try语句块中书写打开资源的代码。Java 7之前需要在finally中关闭socket、文件、数据库连接等资源;Java 7中在try语句中申请资源,可以实现资源的自动释放(资源类必须实现java.lang.AutoCloseable接口,一般的文件、数据库连接等均已实现该接口,close方法将被自动调用)。 比如下面的代码:

    try ( Scanner in = new Scanner(Paths.get("/user/share/dict/words"));

          PrintWriter out = new PrintWriter("/tmp/out.txt")

    )   {

    while (in.hasNext())

              out.println(in.next().toLowerCase());

    }

    采用上述方式,不管代码块如何退出只要in和out对象之前已经被创建出来,他们都会被关闭。省去了主动关闭资源的繁琐代码。

    3.NIO2,这个特性主要是指代对路径Path的使用。使用它只需要一行代码既可实现读取一个文件的全部内容:比如:

       byte[] bytes = Files.readAllBytes(path); 

    倘若希望将文件内容读取为一个字符串,可以在readAllBytes后调用:

       String content = new String(bytes, StandardCharses.UTF_8);

    4.将字符串转为数字的的方法中,字符串可以带"+","-"号等:

    比如: double x = Double.parseDouble("+1.0");是一句正确的代码,不会抛出异常。

    5.对Null的检查:

    Objects类提供了requireNonNull方法以便以检查参数是否为null,比如下面的例子:

      public void process(String content) {

             this.content = Objects.requireNonNull(content);

      }

    上述代码中,如果content为null,则会抛出一个空指针异常,这个貌似没多大作用的改进却有利于程序的提示,其实还可以给产生的异常提供一个消息字符串,就像下面这个形式:

      public void process(String content) {

             this.content = Objects.requireNonNull(content, "the content can not be null");

      }

  • 相关阅读:
    c++命名空间重命名
    ssh保持长连接的配置方法
    macos平台上使用 sed
    c++的使用
    NAT介绍以及穿透各种类型nat的技术实现包括对称型nat
    组态图绘制软件的实现
    关于五防系统
    Linux的应用
    java常用包及其类概述
    springboot整合redis
  • 原文地址:https://www.cnblogs.com/lhever/p/5005155.html
Copyright © 2011-2022 走看看