Time: 1.5 hours
原文:A look at Java 7's new features, by Madhusudhan Konda
http://radar.oreilly.com/2011/09/java7-features.html

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用来对动态语言进行支持。要了解这个特性需要找专门的资料。

转载于:https://www.cnblogs.com/yuquanlaobo/archive/2011/11/14/2248477.html

[阅读笔记] Java 7 新特性相关推荐

  1. 阅读笔记–Java 8函数式编程,建议看书,作者高屋建瓴

    阅读笔记–Java 8函数式编程 书籍代码 为什么需要再次修改Java 1996年1月,Java1.0发布,商业发展需要更复杂的应用,跑在功能强大的多核CPU机器上.带有高效运行时编译器的Java虚拟 ...

  2. 跟我学 Java 8 新特性之 Stream 流(五)映射

    转载自   跟我学 Java 8 新特性之 Stream 流(五)映射 经过了前面四篇文章的学习,相信大家对Stream流已经是相当的熟悉了,同时也掌握了一些高级功能了,如果你之前有阅读过集合框架的基 ...

  3. 【Stream流学习】Java 8 新特性|Collectors.joining() 案例详解

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  4. 换掉 Java 8 Java 1718 新特性真香

    Java 17 Java 17 在 2021 年 9 月 14 日正式发布,Java 17 是一个长期支持(LTS)版本,这次更新共带来 14 个新功能. JEP 306:恢复始终严格的浮点语义 既然 ...

  5. Java 8 新特性,Optional介绍 | 春松客服

    目录 缘起 Optional类 Optional对象构造方法 提取Optional对象的值 使用orElse()方法获取值 使用filter()方法过滤 示例程序 注意事项 使用场景 orElseGe ...

  6. Java SE7新特性之泛型实例创建时的类型推断

    Java SE7新特性之泛型实例创建时的类型推断 标签: JDK7泛型 2014-01-04 15:34 6015人阅读 评论(0) 收藏 举报  分类: Java基础(9)  只要编译器从上下文中能 ...

  7. 换掉 Java 8 !Java 1718 新特性真香

    今天来分享下 Java 17 和 Java 18 的一些新特性. Guide 这里也是真的建议有条件的小伙伴尝试一波 Java 17!不要死守 Java 8 了! Java 17 img Java 1 ...

  8. Java 12 新特性与功能

    Java 12 新特性与功能 Java 12是Java SE的第12个版本,于2019年3月19日发布.Java 12的发布背景主要是为了帮助开发人员更加高效的进行编程工作,提高Java的性能和稳定性 ...

  9. IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍

    文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...

最新文章

  1. 【Java】面试高频考题---topK问题详解(堆heap求解)
  2. bat 服务启动脚本
  3. linux 64 内存管理,[内存管理]linux X86_64处理器的内存布局图
  4. 210312阶段三通过sqlite3源码安装sqlite3
  5. 基于Myeclipse的三大框架(SSH)整合
  6. TikZ绘图示例——尺规作图: 鸭蛋圆形的近似画法
  7. TinycoreLinux的安装使用
  8. [转]C#操作注册表
  9. python 在线培训费用-Python人工智能在线培训班学费多少钱?
  10. ajax 怎么添加,添加功能(Ajax版)
  11. Java中对象的实例化
  12. 西门子plc cpu228 4路模拟量输入 2路模拟量输出
  13. JS页面跳转页面大全
  14. PreaparedStatement中execut的使用
  15. DNA测序技术发展史:一代、二代、三代测序技术简要原理及比较
  16. import java.sql.*;问题:The package java.sql is not accessible
  17. 一文讲解单片机、ARM、MCU、DSP、FPGA、嵌入式错综复杂的关系
  18. 让机器人飞入寻常百姓家,优必选这三步棋很关键
  19. 谈谈Sublime Text 3 与 Soda Theme
  20. AI公司CEO冒充中科大少年班校友!清华、斯坦福名校经历全造假

热门文章

  1. VTK:Utilities之Screenshot
  2. VTK:Filtering之IterativeClosestPointsTransform
  3. OpenGL Compute Shader Raytracing 计算着色器光线追踪的实例
  4. C++floyd warshall算法求最短路径(附完整源码)
  5. C++和 C 的区别
  6. QT实现RSS新闻阅读器
  7. QT的QSqlDatabase类的使用
  8. QT的QNdefRecord类的使用
  9. mysql myisam 主从_MySQL的主从复制Replication之MyIsam和InnoDB数据复制发布
  10. 07/08_flink shell,基本原理及应用场景、特点、架构图、集群解剖、JobManager、TaskManagers、tasks和操作链、Session/job集群、组件介绍等、应用场景