Java 7功能概述

前面我们讨论了所有未纳入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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

缓存技术

提升系统性能的主要方式之一就是缓存。它可以挡掉大部分的数据库访问的冲击&#xff0c;如果没有它&#xff0c;系统很可能会因为数据库不可用导致整个系统崩溃。 但是缓存带来了另外一些棘手的问题&#xff1a; 数据的一致性和实时性。 例如&#xff0c;数据库中的数据状态已经…

水晶报表分组分栏_web报表可视化设计器工具推荐

古往今来&#xff0c;信息就是决胜的关键。在科技时代的今天亦是如此。企业的数据管理在帮助企业加强管控、提高竞争力等方面具有不可或缺的作用。这就不得不说到报表工具。企业想要将储存于各种商业信息系统中的数据转化成有用的信息&#xff0c;最终帮助决策者做出更快、更好…

嵌套矩形——DAG上的动态规划

有向无环图&#xff08;DAG,Directed Acyclic Graph&#xff09;上的动态规划是学习动态规划的基础。很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。 题目描述&#xff1a; 有n个矩形&#xff0c;每个矩形可以用两个整数a,b描述&#xff0c;表示它的长和宽。矩形…

Twisted

Twisted定义Twisted是一个基于事件驱动的网络引擎框架网络框架&#xff0c;别人预先定义好的一个框架&#xff08;一个项目&#xff09;&#xff0c;如.net某个web框架有25个class&#xff0c;从BeginRequest依次执行类里的process方法&#xff0c;程序员自己定义一个类&#x…

从Spring到Java EE 6

我最近在一个非常复杂的项目中工作&#xff0c;其中融合了许多Java EE 6技术&#xff08;例如JPA&#xff0c;JAXB&#xff0c;JMS&#xff0c;JTA&#xff0c;JAX-RS等&#xff09;。 出于生产力和计划方面的原因&#xff0c;将原型应用程序设计为独立的纯Spring应用程序。 当…

Centos 6.5 搭建php环境(nginx+mariadb+php7)

1.mariaDb vim /etc/yum.repos.d/MariaDB.repo [mariadb] name MariaDB baseurl http://yum.mariadb.org/5.5/centos5-x86 gpgkeyhttps://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck1#如果服务器已经安装了MariaDB-Galera-server包&#xff0c;你可能需要在安装MariaDB-s…

MAC itunes无法验证服务器s.mzstatic/itunes无法更新服务器解决方案

打开host文件&#xff1a; 一、用终端打开&#xff1a; sudo vi /etc/hosts 输入完这行命令后需要输入电脑密码&#xff0c;然后确认&#xff0c;进入host文件 然后按i键进入编辑模式&#xff0c;在最后一行添加&#xff1a;23.214.233.166 s.mzstatic.com 如下图 添加完后&…

硬币问题——固定终点的最长路和最短路

问题描述&#xff1a; 有n种硬币&#xff0c;面值分别为V1,V2...,Vn,每种都有无限多。给定非负整数S&#xff0c;可以选用多少个硬币&#xff0c;使得面值之和恰好为S&#xff1f;输出硬币数目的最小值和最大值。0 < n < 100, 0 < S < 10000, 1 < Vi < S。 …

读取nas_NAS怎么玩?除了存放小姐姐,它竟然还有这些功能

自从有了电脑&#xff0c;就一直在折腾"存储那点事儿"&#xff0c;说到底&#xff0c;电脑的本质就是存储&#xff0c;而自己弄家用存储方面的东西算下来也有几年了。单机的硬盘存储比较简单&#xff0c;但是随着家里各种设备的增多&#xff0c;各个设备间的文件共享…

ZK Web框架思想

我曾多次被要求提出一些有关ZK的意见。 因此&#xff0c;根据我作为ZK用户4年的经验&#xff0c;以下是一些想法&#xff1a; 总体开发人员经验&#xff0c;社区和文档 “就是这样” ZK提供的大多数东西都能很好地工作&#xff0c;并且如果您以前开发过任何桌面Java应用程序&…

OC第一讲:类和对象

今天终于开始进行OC的学习了 一.首先讲了NSLog NSLog是oc里面的输出语句&#xff0c;其用法和printf差不多&#xff0c;但是还是有差别的 1&#xff0c;NSLog是自动换行的&#xff0c;不用像printf那样还需要加\n&#xff1b; 2&#xff0c;NSLog在引号面前需要添加符号&#x…

【转载】关于 Google Chrome 中的全屏模式和 APP 模式

【来源于】新浪微博&#xff1a;阿博 http://www.cnblogs.com/abel/p/3235839.html 全屏模式&#xff1a;kiosk 默认全屏打开一个网页呢&#xff0c;只需要在快捷方式中加上 --kiosk [url] 就可以了。 关于全屏模式&#xff1a; 1、全屏模式下&#xff0c;广告插件&#xff08;…

PL/SQL Developer跑在Oracle 64位数据库上初始化错误

安装完Oracle(64位)、PL/SQL Developer后运行PL/SQL出现如下的错误&#xff1a; 网上查资料说&#xff0c;我的PL/SQL Developer与ORACLE不兼容&#xff0c;即PL/SQL不支持64位的ORACLE&#xff0c;因此得下一个32位的ORCALE客户端并配置相应的参数&#xff1a; 解决步骤小记&a…

gis 联合 融合_GIS技术进化 | 我们为何需要跨平台GIS技术体系?

10月30日&#xff0c;超图在2019 GIS 软件技术大会上发布了SuperMap GIS 10i系列产品。SuperMap GIS 10i全面融入人工智能(AI)技术&#xff0c;创新并构建了GIS基础软件“BitCC”五大技术体系&#xff0c;即大数据GIS、人工智能GIS、新一代三维GIS、云原生GIS和跨平台GIS&#…

Spring陷阱:代理

作为Spring框架的用户和发烧友多年&#xff0c;我遇到了一些关于此堆栈的误解和问题。 另外&#xff0c;在某些地方抽象非常可怕地泄漏&#xff0c;以便有效&#xff0c;安全地利用开发人员需要意识到的所有功能。 这就是为什么我开始Spring陷阱系列的原因。 在第一部分中&…

UVa11925 Generating Premutations

留坑(p.254) 1 #include<cstdio>2 #include<cstring>3 #include<cstdlib>4 #include<algorithm>5 #include<iostream>6 7 using namespace std;8 9 void setIO(const string& s) { 10 freopen((s ".in").c_str(), "r&qu…

xamarin UWP中MessageDialog与ContentDialog的区别

MessageDialog与ContentDialog的异同点解析&#xff1a; 相同点一&#xff1a;都是uwp应用上的一个弹窗控件。都能做为弹出应用。 相异点一&#xff1a;所在命名空间不同&#xff0c;MessageDialog在Windows.UI.Popups.MessageDialog下&#xff0c;而ContentDialog在Windows.UI…

python筛选大量数据_python(数据筛选)

在Python3中&#xff1a;(1)xrange的功能合并到range里面&#xff0c;xrange已经不存在 -> range和xrange用法(2)filter已经不能返回一个list&#xff0c;而是只能返回一个迭代对象&#xff0c;需要套在一个list()里面&#xff0c;且&#xff0c;需要注意的是&#xff0c;fi…

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

不指定数据库可以正常连接&#xff1a; 指定数据库和使用PL/SQL Developer都出现错误&#xff1a; 在此说明一下我的环境&#xff1a;Oralce装的是64位的在使用PL/SQL Developer时曾出现过初始化错误&#xff0c;解决办法就是下载oracle 32位客户端并相应的配置。 解决方案一&a…

Devoxx 2011印象

Devoxx 2011结束了&#xff0c;它很棒。 最终&#xff0c;在不得不与妻子和孩子度过周末之后&#xff08;上个星期我很少见过&#xff09;&#xff0c;我找到了写下一些东西的时间。 对我来说&#xff0c;这是第六个Devoxx&#xff0c;我的第一个是2006年-那时我还是一个学生&a…