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.pswp.cn/news/373882.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373882.shtml
英文地址,請注明出處:http://en.pswp.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…