前面我们讨论了所有未纳入Java 7的内容,然后回顾了将其纳入Java 7的有用的Fork / Join框架 。

今天的帖子将带我们了解Project Coin的每个功能-一系列小的语言增强功能,这些功能虽然不是开创性的,但是对于任何能够使用JDK 7的开发人员来说都是有用的。

我提出了一个银行帐户课程,该课程展示了Project Coin功能的基础知识。

看一看…

public class ProjectCoinBanker {private static final Integer ONE_MILLION = 1_000_000;private static final String RICH_MSG = "You need more than $%,d to be considered rich.";public static void main(String[] args) throws Exception {System.out.println(String.format(RICH_MSG, ONE_MILLION));String requestType = args[0];String accountId = args[1];switch (requestType) {case "displayBalance":printBalance(accountId);break;case "lastActivityDate" :printLastActivityDate(accountId);break;case "amIRich" :amIRich(accountId);break;case "lastTransactions" :printLastTransactions(accountId, Integer.parseInt(args[2]));break;case "averageDailyBalance" :printAverageDailyBalance(accountId);break;default: break;}}private static void printAverageDailyBalance(String accountId) {String sql = String.format(AVERAGE_DAILY_BALANCE_QUERY, accountId);try (PreparedStatement s = _conn.prepareStatement(sql);ResultSet rs = s.executeQuery();) {while (rs.next()) {//print the average daily balance results}} catch (SQLException e) {// handle exception, but no need for finally to close resourcesfor (Throwable t : e.getSuppressed()) {System.out.println("Suppressed exception message is " + t.getMessage());}}}private static void printLastTransactions(String accountId, int numberOfTransactions) {List transactions = new ArrayList<>();//... handle fetching/printing transactions}private static void printBalance(String accountId) {try {BigDecimal balance = getBalance(accountId);//print balance} catch (AccountFrozenException | ComplianceViolationException | AccountClosedException e) {System.err.println("Please see your local branch for help with your account.");}}private static void amIRich(String accountId) {try {BigDecimal balance = getBalance(accountId);//find out if the account holder is rich} catch (AccountFrozenException | ComplianceViolationException | AccountClosedException e) {System.out.println("Please see your local branch for help with your account.");}}private static BigDecimal getBalance(String acccountId)throws AccountFrozenException, AccountClosedException, ComplianceViolationException {//... getBalance functionality}}

简要地说,我们的ProjectCoinBanker类演示了以下Project Coin功能的基本用法。

  • 数字文字下划线
  • 开关中的弦
  • 多渔获
  • 用于创建类型化对象的类型推断
  • 尝试使用资源和抑制的异常

首先,数字文字中的下划线很容易解释。 我们的例子

private static final Integer ONE_MILLION = 1_000_000;

表明好处是视觉的。 开发人员可以快速查看代码以验证值是否符合预期。 下划线可以在自然分组位置以外的其他地方使用,无论放置在何处。 数字文字中的下划线不能以数字文字开头或结尾,否则,您可以随意将它们放在所需的位置。 尽管此处未进行演示,但还添加了二进制文字支持。 与十六进制文字以0x或0X前缀相同的方式,二进制文字将以0b或0B前缀。

开关中的字符串也是不言自明的。 现在,switch语句也接受String。 在我们的示例中,我们打开传递给main方法的String参数来确定发出了什么请求。 附带说明,这纯粹是一个编译器实现,带有指示,可能会在以后添加JVM对String的支持。

类型推断是另一个易于理解的改进。 现在代替我们的旧代码

List<Transaction> transactions = new ArrayList<Transaction>();

我们可以做

List<Transaction> transactions = new ArrayList<>();

因为可以推断类型。 自从引入泛型以来,可能找不到任何人会辩称不应该这样做,但是现在就在这里。

多次捕获对于异常处理代码的简洁性来说非常有用。 想要实际基于抛出的异常类型来做某事的次数太多了,直到现在,我们被迫拥有多个catch块,它们基本上都在做同一件事。 新语法非常干净和合乎逻辑。 我们的例子

catch (AccountFrozenException | ComplianceViolationException | AccountClosedException e)

显示了如何轻松完成。

最后,Project Coin功能的最后一个演示是尝试使用资源语法并支持检索抑制的异常。 引入了一个新的接口AutoCloseable ,该接口已应用于所有预期的可疑对象,包括Input / OutputStreams,读取器/编写器,通道,套接字,选择器和java.sql资源Statement,ResultSet和Connection。 在我看来,语法不像多捕获更改那样自然,并不是说我有其他选择。

try (PreparedStatement s = _conn.prepareStatement(sql);ResultSet rs = s.executeQuery();) {while (rs.next()) {//print the average daily balance results}} catch (SQLException e) {//handle exception, but no need for finally to close resourcesfor (Throwable t : e.getSuppressed()) {System.out.println("Suppressed exception message is " + t.getMessage());}}

首先,我们看到可以在尝试使用资源时包含多个资源-非常好。 我们甚至可以在与PreparedStatement相同的块中引用先前声明的资源。 我们仍然可以处理我们的异常,但是我们不需要关闭finally块来关闭资源。 还要注意, Throwable上有一个新方法getSuppressed() 。 这使我们可以访问试图“自动关闭”声明的资源时抛出的所有异常。 每个声明的资源最多可以有一个抑制的异常。 注意:如果资源初始化引发异常,它将在声明的catch块中处理。

而已。 没有什么破天荒的事情,但是我们可以不用太多麻烦就可以开始使用的一些简单增强功能。 Project Coin还包括有关varargs和编译器警告的功能。 本质上,它归结为一个新的注释(@SafeVarargs),可以在方法声明中应用该注释,以允许开发人员从其使用的代码中删除@SuppressWarnings(“ varargs”)。 这已应用于JDK中的所有关键可疑对象,但是在任何通用varags方法中都可以使用相同的注释。

在线描述的项目代币功能集充其量是不一致的。 希望这会给您关于JDK 7提案中可以使用的内容的完整摘要。

参考: JCG合作伙伴的 Java 7 –项目硬币功能概述 在Carfey Software Blog上 。

相关文章 :
  • Java 7:尝试资源
  • 具有Java 7中自动资源管理功能的GC
  • 速览Java 7 MethodHandle及其用法
  • 在Java 7中处理文件
  • Java SE 7、8、9 –推进Java
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/11/java-7-feature-overview.html

Java 7功能概述相关推荐

  1. java概述_Java 7功能概述

    java概述 前面我们讨论了所有未纳入Java 7的内容,然后回顾了将其纳入Java的有用的Fork / Join框架 . 今天的帖子将带我们了解Project Coin的每个功能-一系列小的语言增强 ...

  2. Java基础----JAVA语言的概述和开发环境的搭配

    01 JAVA语言的概述和开发环境的搭配 JAVA语言简介 创始人:詹姆斯.高斯林 历史:起初属于sun公司,由高斯林与其合伙人研发而出,用于在各种移动设备上进行程序开发设计,初始起名为green,后 ...

  3. (转)Hibernate框架基础——Java对象持久化概述

    http://blog.csdn.net/yerenyuan_pku/article/details/52732990 Java对象持久化概述 应用程序的分层体系结构 基于B/S的典型三层架构   说 ...

  4. 数据链路层功能概述----上

    目录 一.数据链路层功能概述 1.基本概念 2.数据链路层功能概述 功能一:为网络层提供服务: 功能二:链路管理, 功能三:组帧 功能四:流量控制 功能五:差错控制 3.透明传输 1.字符计数法: 2 ...

  5. Node之父发布新项目deno:下一代Node;百度推出没有广告的简单搜索;甲骨文计划砍掉Java序列化功能;丨Q新闻...

    点击关注 InfoQ,置顶公众号 接收程序员的技术早餐 编辑|小智 音频|Heard 本周要闻:Git 爆任意代码执行漏洞,所有使用者都受影响:Node 之父发布新项目 deno:下一代 Node:G ...

  6. 第一阶段Java SE学习概述

    Java SE学习概述 Java SE 学习分为五个阶段 第一部分:基础程序设计: 第二部分:面现象对象编程: 第三部分:Java SE 高级应用: 第四部分:JavaSE 新特性: 第五部分:MyS ...

  7. PHP和Java的联系,PHP和Java的功能

    PHP和Java的功能 PHP和Java PHP功能的另外一个高招是其调用已有Java对象的方法的能力,这种功能可以让你把PHP集成进已有的基于Java的应用程序.如果你正在你的工作场合推广PHP , ...

  8. Java堆栈功能_【ThinkingInJava】35、用java实现堆栈功能

    /** * 书本:<Thinking In Java> * 功能:用java实现堆栈功能 * 文件:LinkedStack.java * 时间:2015年4月17日14:23:34 * 作 ...

  9. 4.1.1 网络层功能概述

    网络层 4.1.1 网络层功能概述

最新文章

  1. (C++)从字符串中取出整形、浮点型和字符串
  2. eclipse if代码折叠_仅需一页Java代码就能实现网页源码爬取
  3. 利用网站模板创建子网站
  4. Java 结构体之 JavaStruct 使用教程一 初识 JavaStruct
  5. redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用
  6. fastapi PUT更新数据 / PATCH部分更新
  7. 分布式数据库中间件概念
  8. 11.FreeRTOS学习笔记-内存管理
  9. Linux sudo 被曝提权漏洞,任意用户均能以 root 身份运行命令
  10. leetcode 368
  11. 【搜索入门】桐桐的组合
  12. MATLAB 生成随机数
  13. IPSecNAT穿越实验配置
  14. 海康威视错误代码说明(六)(错误代码:82~825)
  15. 旧主机改NAS最终成功的过程
  16. ue4之将Sequence嵌入蓝图
  17. 计算机专业跨考为什么考不了,浙江大学计算机专业考研,为什么这么多跨考计算机...
  18. 项目整体管理:项目整体管理概述
  19. Blender遇到的一些莫名其妙的问题
  20. 如何使用计算机视觉进行视频分析和处理?

热门文章

  1. selenium自动化测试_维持Selenium测试自动化的完美方法
  2. 穹顶灯打不出阴暗面_Java生产监控的阴暗面
  3. dynamodb容器使用_使用DynamoDBMapper插入DynamoDB项目
  4. jpa 忽略bean_在WildFly上将JPA和CDI Bean与骆驼一起使用
  5. CUBA 7.2 –有什么新功能?
  6. apache camel_探索Apache Camel Core –文件组件
  7. java反射教程_Java反射教程
  8. ejb 示例 2018_Java EE EJB拦截器教程和示例
  9. PagingAndSortingRepository –如何与Thymeleaf一起使用
  10. 只需几分钟即可安装Red Hat Container Development Kit(视频)