java概述
今天的帖子将带我们了解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中的字符串也是不言自明的。 现在,switch语句也接受String。 在我们的示例中,我们打开传递给main方法的String参数来确定发出了什么请求。 附带说明,这纯粹是一个编译器实现,表示可能会在以后添加JVM对String的支持。
类型推断是另一个易于理解的改进。 现在代替我们的旧代码
List<Transaction> transactions = new ArrayList<Transaction>();
我们可以做
List<Transaction> transactions = new ArrayList<>();
因为可以推断类型。 自从引入泛型以来,可能找不到任何人会辩称不应该这样,但现在就在这里。
多次捕获对于异常处理代码的简洁性来说非常有用。 想要实际基于抛出的异常类型做某事的次数太多了,直到现在,我们被迫拥有多个catch块,它们基本上都在做同一件事。 新语法非常干净和合乎逻辑。 我们的例子
catch (AccountFrozenException | ComplianceViolationException | AccountClosedException e)
显示了如何轻松完成。
最后,项目硬币功能的最后演示是尝试使用资源语法并支持检索抑制的异常。 引入了一个新的接口AutoCloseable ,该接口已应用于所有预期的可疑对象,包括输入/输出流,读取器/写入器,通道,套接字,选择器和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概述