Java 7 的7个新特性

1. 引入了"Diamond Operator"(写法:<>)

一句话描述:简化创建参数化类的对象的语法。 
示例: 
(before 7) Map<String, List<Trade>> trades = new TreeMap<String, List<Trade>> (); 
(since 7) Map<String, List<Trade>> trades = new TreeMap <> (); 
注意点: 
trades = new TreeMap () 也是合法的,但是编译器会提示"type-safety warnings" 
Comment: 
Java 7以前要避免这种繁琐的语法,要借用static factory method来实现;《Effective Java 2nd》 Item 1中对此进行过说明, Joshua在书中提到"Someday the language may perform this sort of type inference on constructor invocations as well as method invocations.",果不其然,现在这个版本里就支持了这个特性。 

2. Switch支持String类型

一句话描述:无。 
示例:无: 
注意点:判断case是否相等时调用String.equals()方法进行比较。 
Comment: 
1. 这样switch支持的类型有:primitive types, enum, string 
2. 使用string比enum更容易出错,降低出错风险的手段:(1) 将string定义为常量,在case里仅用常量来引用字符串 (2) 如果业务逻辑允许,default语句要毫不犹豫地抛出异常。 

3. Automatic resource management

一句话描述try-finally的替代品,用于确保资源被释放。
示例
(before 7)
try {
fos = new FileOutputStream("movies.txt"); dos = new DataOutputStream(fos); dos.writeUTF("Java 7 Block Buster"); } catch (IOException e) { e.printStackTrace(); } finally { try { fos.close(); dos.close(); } catch (IOException e) { // log the exception } } (since 7) try (FileOutputStream fos = new FileOutputStream("movies.txt");
DataOutputStream dos = new DataOutputStream(fos)) { dos.writeUTF("Java 7 Block Buster");
} catch (IOException e) { // log the exception

              }

注意点: 
1. 放在这个结构里的资源必须要实现java.lang.AutoCloseable接口(这个接口仅有一个close方法) 
2. 印象中C#里早就有类似的特性 
3. 观察示例中的代码,(before 7)的版本里有两个IOException 的catch 语句,对应两个不同场景,因此在catch语句块里有不同的处理逻辑; 
但(since 7)仅有一个catch,如何区分不同的情形?需要检查一下编译后的字节码确认一下。 

4.带下划线的数字 
一句话描述:看很长的数字更方便。 
示例:int million = 1_000_000 
Comment: 对这个特性是否会被开发人员广泛接受表示怀疑。 

5. 对异常处理机制的改进 
一句话描述:
可以合并多个catch块。 
示例: 
        try { 
                  methodThatThrowsThreeExceptions(); 
            } catch (ExceptionOne | ExceptionTwo | ExceptionThree e) { 
                
  // log and deal with all Exceptions 
            } 
Comment: 
可以将处理逻辑一样的Exception写到一起,减少代码冗余 

6. New file system API (NIO 2.0)

一句话描述:使开发支持多文件系统的代码更加轻松。 
新的内容包括:1. java.nio.file,新的类包括Path, Paths, FileSystem, FileSystems等;2. File Change notifacation 

7. Fork and Join

一句话描述:将任务分给多个core执行,然后汇总 
说明:简单认识相关的几个类 
ForkJoinPool:    用以执行ForkJoinTask,实现了Executor, ExecutorService。 
ForkJoinTask:    待求解的问题/任务。 
RecursiveAction:    ForkJoinTask的子类,不返回值。 
RecursiveTask:    ForkJoinTask的子类,返回值。 
Executor:        被ForkJoinPool所实现。 

8. Supporting dynamism (invokedynamic)

一句话描述:提供对动态语言的支持。 
说明:根据类型检查是在编译还是运行时进行,可分为"static typed language"(如Java)和"dynamically typed language"(如Ruby, Python, Clojure)。Java 7中有一个新的包java.lang.invoke用来对动态语言进行支持。要了解这个特性需要找专门的资料。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值