几个有用的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");

  }

 

posted @ 2015-11-29 18:30  善水流心  阅读(639)  评论(0编辑  收藏  举报