精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

你可能未曾使用的新 Java 特性

開發 后端
Java 是在過去 20 年中一直在市場流行的編程語言。但是最近幾年各種替代 Java 的聲音不斷。

[[353173]]

 Java 是在過去 20 年中一直在市場流行的編程語言。

但是最近幾年各種替代 Java 的聲音不斷。

與 Python,Kotlin,Swift 等現代編程語言相比,開發人員抱怨 Java 過時的編程語法。

但是很多人不知道的是,Java 新版做了很多改進,并為開發人員提供了更有效的方式來編寫代碼。

如果您想用 Java 更輕松編寫簡潔和優雅的代碼,可以參考以下一些建議,這些語法在 JDK 14 已經提供。

1 Try-with-resource 語句

使用 try-catch 塊處理異常,通常需要通過 finally 塊來添加清除代碼。現在使用 try with resource 語法,開發人員就不用自己操心資源釋放。

我們可以在 try 括號內添加資源,以便在 try-catch 塊執行后關閉或清理該資源

舊語法

  1. Scanner scanner = null
  2. try { 
  3.     scanner = new Scanner(new File("foo.txt")); 
  4.     while (scanner.hasNext()) { 
  5.         System.out.println(scanner.nextLine()); 
  6.     } 
  7. } catch (FileNotFoundException e) { 
  8.     e.printStackTrace(); 
  9. } finally { 
  10.     if (scanner != null) scanner.close(); 

新語法

  1. try (Scanner scanner = new Scanner(new File("foo.txt"))) { 
  2.     while (scanner.hasNext()) { 
  3.         System.out.println(scanner.nextLine()); 
  4.     } 
  5. } catch (FileNotFoundException e) { 
  6.     e.printStackTrace(); 

這將大大減少關閉流或數據庫連接的代碼行,并減少由于忘記關閉流/連接而導致各種錯誤的問題。

2 switch 表達式

開發人員經常遇到需要從條件塊返回值的情況,但是舊的語法不好解決。

舊語法

  1. private String getUserRole(User user){ 
  2.     String userRole = ""
  3.  
  4.     switch(user.getRole()){ 
  5.         case 0: 
  6.             userRole = "Customer"
  7.             break; 
  8.  
  9.         case 1: 
  10.             userRole = "Editor"
  11.             break; 
  12.  
  13.         case 2: 
  14.             userRole = "Admin"
  15.             break; 
  16.  
  17.         default: throw new IllegalStateException("Unexpected value: " + user.getRole()); 
  18.     } 
  19.     return userRole; 

就像 Swift 這些現代語言一樣,Java 12 引入了 switch 表達式,你可以根據條件返回值。

新語法

  1. private String getUserRoleV2(User user){ 
  2.  
  3.     return switch(user.getRole()){ 
  4.         case 0 -> "Customer"
  5.         case 1 -> "Editor"
  6.         case 2 : 
  7.             // for multi line expression use 'yield' keyword 
  8.             user.setRights(AuthRights.absolute); 
  9.             yield "Admin"
  10.         default -> throw new IllegalStateException("Unexpected value: " + user.getRole()); 
  11.     }; 

這大大減少了項目中的 LOC(代碼行),并使修改相對容易。

3 用 var 初始化

Java 本質上是嚴格類型的語言,使用嚴格類型定義是開發人員偏好的問題。但是支持類型推斷可以降低代碼復雜性,Java 10 增加了對局部變量的類型推斷的支持。

  1. private void init(){ 
  2.     var str = "Java 10"; // infers String 
  3.     var list = new ArrayList<String>();  
  4.     var stream = list.stream(); // infers Stream<String> 
  5.  

但 Java 仍然是一種靜態類型的語言,僅在有足夠的信息可用于初始化時才推斷類型。因此如果變量滿足以下條件,則使用 var 初始化是合法的:

  • 它只能是局部變量(類成員或函數參數不支持)
  • 聲明后應立即定義(define)

4 記錄 (record)

使用 Java 最常見的抱怨之一,需要編寫大量代碼來使類可用,例如一堆 toString 或 equals 定義,因此代碼看起來很冗長。Java 14 提供了 Record 語法,使類型聲明更加簡潔,當我們需要在一個類名下綁定多個值時,它非常有用。

這是 Oracle 網站上的一篇文章示例,展示了使用記錄的優勢

  1. var order = new FXOrderClassic(1,  
  2.         CurrencyPair.GBPUSD, 
  3.         Side.Bid, 1.25,  
  4.         LocalDateTime.now(),  
  5.         1000); 

像這樣的標準對象的調用,需要定義類型 FXOrderClassic。

舊語法

  1. public final class FXOrderClassic { 
  2.     private final int units; 
  3.     private final CurrencyPair pair; 
  4.     private final Side side; 
  5.     private final double price; 
  6.     private final LocalDateTime sentAt; 
  7.     private final int ttl; 
  8.  
  9.     public FXOrderClassic(int units, 
  10.                           CurrencyPair pair, 
  11.                           Side side, 
  12.                           double price, 
  13.                           LocalDateTime sentAt, 
  14.                           int ttl) { 
  15.         this.units = units; 
  16.         this.pair = pair; // CurrencyPair is a simple enum 
  17.         this.side = side; // Side is a simple enum 
  18.         this.price = price; 
  19.         this.sentAt = sentAt; 
  20.         this.ttl = ttl; 
  21.     } 
  22.  
  23.     public int units() { 
  24.         return units; 
  25.     } 
  26.  
  27.     public CurrencyPair pair() { 
  28.         return pair; 
  29.     } 
  30.  
  31.     public Side side() { 
  32.         return side; 
  33.     } 
  34.  
  35.     public double price() { return price; } 
  36.  
  37.     public LocalDateTime sentAt() { 
  38.         return sentAt; 
  39.     } 
  40.  
  41.     public int ttl() { 
  42.         return ttl; 
  43.     } 
  44.  
  45.     @Override 
  46.     public boolean equals(Object o) { 
  47.         if (this == o) return true
  48.         if (o == null || getClass() != o.getClass()) 
  49.             return false
  50.  
  51.         FXOrderClassic that = (FXOrderClassic) o; 
  52.  
  53.         if (units != that.units) return false
  54.         if (Double.compare(that.price, price) != 0) 
  55.             return false
  56.         if (ttl != that.ttl) return false
  57.         if (pair != that.pair) return false
  58.         if (side != that.side) return false
  59.         return sentAt != null ? 
  60.                 sentAt.equals(that.sentAt) : that.sentAt == null
  61.     } 
  62.  
  63.     @Override 
  64.     public int hashCode() { 
  65.         int result; 
  66.         long temp
  67.         result = units; 
  68.         result = 31 * result + 
  69.                 (pair != null ? pair.hashCode() : 0); 
  70.         result = 31 * result + 
  71.                 (side != null ? side.hashCode() : 0); 
  72.         temp = Double.doubleToLongBits(price); 
  73.         result = 31 * result + 
  74.                 (int) (temp ^ (temp >>> 32)); 
  75.         result = 31 * result + 
  76.                 (sentAt != null ? sentAt.hashCode() : 0); 
  77.         result = 31 * result + ttl; 
  78.         return result; 
  79.     } 
  80.  
  81.     @Override 
  82.     public String toString() { 
  83.         return "FXOrderClassic{" + 
  84.                 "units=" + units + 
  85.                 ", pair=" + pair + 
  86.                 ", side=" + side + 
  87.                 ", price=" + price + 
  88.                 ", sentAt=" + sentAt + 
  89.                 ", ttl=" + ttl + 
  90.                 '}'
  91.     } 

新語法

  1. public record FXOrder(int units, 
  2.                       CurrencyPair pair, 
  3.                       Side side, 
  4.                       double price, 
  5.                       LocalDateTime sentAt, 
  6.                       int ttl) {} 

5 增強的 instance of

Java 14 引入了 instanceof 模式匹配的功能,這意味著在使用 instanceof 的實例類型檢查時,不再需要顯式的類型轉換。

舊語法

  1. private Entries getEntries(User user){ 
  2.     if (user instanceof Editor) { 
  3.         Editor editor = (Editor) user
  4.  
  5.         // use editor specific methods 
  6.         var entries = editor.getEntries(); 
  7.         return entries; 
  8.     } 
  9.      
  10.     return null

新語法

  1. private Entries getEntries(User user){ 
  2.      
  3.     if (user instanceof Editor editor) { 
  4.         // use group specific methods 
  5.         var entries = editor.getEntries(); 
  6.         return entries; 
  7.     } 
  8.  
  9.     return null

6 文本塊

支持文本塊并不是什么新鮮事,但在 Java 中卻是工程師期待已久的功能。Java 開發人員總是渴望以更簡單的方式打印多行字符串文字,而不使用討厭的串聯。Java 新版支持多行字符串文字。

舊語法

  1. String html = "<HTML>" + 
  2. "\n\t" + "<BODY>" + 
  3. "\n\t\t" + "<H2>\"Hurray! Java 14 is here\"</H2>" + 
  4. "\n\t" + "</BODY>" + 
  5. "\n" + "</HTML>"

使用三引號 ,就可以使用此功能,該功能在使用結構化字符串時非常方便,例如以一定的對齊方式和間距編寫文件或添加多行 html 塊

新語法

  1. String html = ""
  2. <HTML> 
  3.   <BODY> 
  4.     <H2>"Hurray! Java 14 is here"</H2> 
  5.   </BODY> 
  6. </HTML> 
  7. """; 

7 有意義的 NPE (空指針)消息

空指針異常(NPE)一直是 Java 開發人員的噩夢,并且是開發人員遇到的最常見的問題。

但是 NPE 消息常常不能提供有關該問題的足夠信息。

  1. var task = new Task(); 
  2. final boolean isDataConsumed = task.getData().getBucket().isConsumed; 

在代碼段中,可能存在多個故障點,例如

  • getData()返回一個空值
  • getBucket()返回一個空值

但以下 NPE 報錯未提供有關該問題的足夠詳細信息。

為了解決此問題,Oracle 添加 JEP 358,提供有用的 NullPointExceptions

NullPointerException 通過精確描述哪個變量來提高 JVM 生成錯誤信息的可用性。

你可以通過在 Java 命令中添加以下標志來使用此功能

-XX:+ShowCodeDetailsInExceptionMessages

使用該標志,JVM 將提供更多有意義的信息,以便跟蹤確切的故障點

英文原文:

https://medium.com/swlh/working-with-new-generation-of-java-236e2dc38316

本文轉載自微信公眾號「高可用架構」,可以通過以下二維碼關注。轉載本文請聯系高可用架構公眾號。

 

責任編輯:武曉燕 來源: 高可用架構
相關推薦

2019-11-05 16:51:41

JavaScript數據es8

2019-03-04 09:39:41

Java開發代碼

2025-01-30 00:00:00

API指令集計算能力

2013-10-21 17:57:54

2012-03-24 21:02:41

iOS

2022-01-17 22:33:37

Java特定類型

2015-06-29 09:40:10

Rails新特性

2014-08-21 10:34:11

Java 9Java

2024-11-19 10:26:35

2021-02-22 11:51:15

Java開發代碼

2020-09-17 13:10:54

Java1編程語言新特性

2014-07-15 14:48:26

Java8

2025-05-19 00:05:12

2020-11-16 12:09:25

Python開發工具

2017-11-22 09:57:22

HTML5存儲代碼

2023-04-09 23:37:31

JavaScript開發

2022-03-09 08:14:24

CSS容器container

2021-10-12 07:15:03

C++20特性

2011-12-14 16:15:17

MySQL

2020-04-26 10:52:37

LinuxUbuntu 20.0Ubuntu 18.0
點贊
收藏

51CTO技術棧公眾號

欧美性受极品xxxx喷水| 奇米精品一区二区三区在线观看| 日韩三区在线观看| 国产精品免费观看视频| 97在线视频免费播放| www.黄色在线| 涩爱av色老久久精品偷偷鲁| 亚洲国产一区二区三区 | 精品国产第一国产综合精品| 亚洲国产精品一区二区www| 欧美国产一二三区| 国产又黄又爽视频| 国产欧美一级| 精品国偷自产在线| 亚洲最大免费视频| 伊人久久综合网另类网站| 午夜国产精品一区| 亚洲日本欧美在线| 亚洲欧美丝袜中文综合| 紧缚奴在线一区二区三区| 性色av一区二区三区在线观看| 永久免费毛片在线观看| 国产精品国产| 欧美电影一区二区三区| 少妇高潮喷水久久久久久久久久| 亚洲丝袜一区| 中文在线免费一区三区高中清不卡 | 中文字幕在线2021| 美女毛片一区二区三区四区最新中文字幕亚洲 | 久久久精品网站| 麻豆精品免费视频| 精品久久对白| 日韩欧美在线观看一区二区三区| 久草精品在线播放| 国产传媒在线观看| 亚洲综合视频在线| 中文字幕在线中文字幕日亚韩一区 | 中文字幕成在线观看| 一区二区三区四区中文字幕| 视频在线99| 久久视频www| 99精品在线免费| 国产精品xxx在线观看www| 一级做a爱片久久毛片| 久久在线精品| 日韩av手机在线观看| 国产精品成人久久| 欧美日韩国产一区精品一区| 久久大大胆人体| 久久精品日韩无码| 欧美精品久久久久久 | av在线免费播放网站| 久久―日本道色综合久久| 国产一区二区免费电影| www久久久com| 国产成人av一区二区三区在线 | 国产欧美高清视频在线| 亚洲精品一区中文| 国产十八熟妇av成人一区| 一区二区视频| 精品成人a区在线观看| 天堂va欧美va亚洲va老司机| 一区中文字幕电影| 亚洲国产精品一区二区久| 插我舔内射18免费视频| 免费观看成人www动漫视频| 亚洲国产精品久久精品怡红院| 国产调教打屁股xxxx网站| 亚洲一区网址| 日韩第一页在线| 欧美熟妇一区二区| 日韩欧美在线中字| 久久影院中文字幕| 精品爆乳一区二区三区无码av| 欧美不卡在线| 午夜精品久久久久久久99热| 日本中文字幕在线| 免费黄网站欧美| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产青青草视频| 成人精品鲁一区一区二区| 久久精品中文字幕一区二区三区 | 亚洲欧洲日韩在线| 国产一二三四五| japanese色国产在线看视频| 色综合天天狠狠| 成年网站免费在线观看| 深夜福利一区| 亚洲欧美在线播放| 日韩精品一区二区三区在线视频| 午夜欧美精品| 8x拔播拔播x8国产精品| 伊人久久一区二区| 国产成人精品一区二 | 欧美激情亚洲| 热99久久精品| 精品国产18久久久久久| 久久天天做天天爱综合色| 韩国黄色一级大片| 校园春色亚洲| 91精品国产综合久久小美女| aaaaaav| 亚洲成av人电影| 91成人在线播放| 99久久免费国产精精品| 91看片淫黄大片一级在线观看| 午夜免费电影一区在线观看| 国产美女情趣调教h一区二区| 在线亚洲免费视频| 91九色蝌蚪porny| 成人精品中文字幕| 97在线免费观看| 一级爱爱免费视频| 久久亚洲一级片| 四虎精品欧美一区二区免费| 校园春色亚洲色图| 欧美精品一区视频| 成年人免费视频播放| 模特精品在线| 成人精品水蜜桃| 精品黄色免费中文电影在线播放| 欧美日韩免费观看中文| 潘金莲一级淫片aaaaa| 色综合久久网| 国产成人一区二区三区小说| 可以免费看毛片的网站| 亚洲免费观看高清完整版在线观看熊| 激情网站五月天| 久久97久久97精品免视看秋霞| 久久九九免费视频| 中文字幕一区二区三区四区免费看 | 欲求不满的岳中文字幕| 你懂的国产精品永久在线| 国产精品美女主播| 久久久久久青草| 精品美女国产在线| 日本不卡视频一区| 牛牛国产精品| 亚洲xxx大片| 成人看av片| 91精品国产欧美一区二区18| 免费看一级黄色| 久久精品99国产精品| 日韩中文不卡| 成人在线观看免费播放| 亚洲男人天堂网| 国产又大又黄又粗| 91麻豆免费在线观看| 国产视频九色蝌蚪| 欧美1区二区| 538国产精品视频一区二区| 欧美一级做性受免费大片免费| 一区二区三区视频在线观看 | 91亚洲午夜精品久久久久久| www在线观看免费| 美女av一区| 欧洲中文字幕国产精品| 欧美新色视频| 欧亚洲嫩模精品一区三区| 女人十八毛片嫩草av| 另类调教123区| 9l视频自拍9l视频自拍| 亚洲成人黄色| 97视频在线播放| 日本电影一区二区在线观看 | 亚洲国产精品久久久久久6q| 亚洲国产视频a| 97人妻天天摸天天爽天天| 麻豆9191精品国产| 日韩精品无码一区二区三区| 国产精品原创视频| 久久精品中文字幕免费mv| 国产黄色一区二区| 性做久久久久久久久| 狠狠人妻久久久久久综合蜜桃| 噜噜噜躁狠狠躁狠狠精品视频 | 啊v视频在线| 91精品久久久久久久99蜜桃| 日本一级淫片免费放| 久久这里只有精品首页| 奇米影音第四色| 午夜久久福利| 欧美一区1区三区3区公司| 国产极品一区| 久久久久久久久久久免费精品| 天堂中文字幕在线| 欧美日韩免费观看一区二区三区| 永久免费看黄网站| 久久综合久久综合久久综合| 黄色一级片免费的| 亚洲毛片播放| 亚洲欧洲一区二区在线观看| 成功精品影院| 国产精品九九九| 激情在线视频播放| 亚洲一区二区久久| www日本在线| 欧美艳星brazzers| 久久亚洲成人av| 日本一二三四高清不卡| 亚洲欧美高清在线| 捆绑紧缚一区二区三区视频| 老太脱裤让老头玩ⅹxxxx| 日本精品黄色| 精品日产一区2区三区黄免费| 外国成人毛片| 国产不卡av在线免费观看| 日本小视频在线免费观看| 怡红院精品视频| 日日夜夜精品免费| 91精品婷婷国产综合久久性色| 一二三区免费视频| 亚洲国产精品尤物yw在线观看| 老司机精品免费视频| 久久婷婷色综合| 久草免费资源站| 快射视频在线观看| 裤袜国产欧美精品一区| 日韩精品三级| 久久久久久久久国产一区| 国产欧美亚洲一区| 成人一区二区三区在线观看| 国产日产欧美一区二区三区| 亚洲制服丝袜av| 在线播放国产精品二区一二区四区| 日韩经典一区二区三区| 91国自产精品中文字幕亚洲| 99r国产精品视频| 男人添女荫道口喷水视频| 欧美性受xxxx黒人xyx性爽| 国产视频123区| 日韩黄色精品视频| 中国一级免费毛片| 国产精品高潮呻吟AV无码| 国产伦一区二区| 日韩精品亚洲aⅴ在线影院| 色综合视频一区中文字幕| 亚洲成人影院麻豆| 亚洲人成在线一二| 日韩私人影院| 亚洲精品aⅴ中文字幕乱码| 亚洲av无码一区二区乱子伦| 欧美一级久久久| 99在线精品视频免费观看20| 欧美喷潮久久久xxxxx| 中文字幕免费高清在线观看| 欧美性欧美巨大黑白大战| 日韩黄色一级视频| 色婷婷亚洲一区二区三区| 亚洲熟妇无码乱子av电影| 欧美视频裸体精品| 五月天激情国产综合婷婷婷| 欧美日韩亚洲精品内裤| 亚洲另类在线观看| 色噜噜狠狠成人网p站| 成人a v视频| 欧美性感一类影片在线播放| 波多野结衣毛片| 欧美日韩精品一区二区三区蜜桃| 伊人网av在线| 91麻豆精品国产91久久久资源速度 | 欧美人与动xxxxz0oz| 精品国产一区二区三区日日嗨| 国内毛片久久| 精品国产一区二区三| 日本午夜精品| 日本一区二区三区免费观看| 日韩av在线中文字幕| 亚洲高潮无码久久| 影音国产精品| 麻豆传传媒久久久爱| 老司机一区二区| 五月天丁香社区| 久久亚洲综合色| 免费成人深夜夜行网站| 亚洲最新在线观看| 黄色在线观看国产| 欧美日韩一区二区在线视频| www.97超碰| 亚洲色图15p| 成码无人av片在线观看网站| 高清欧美一区二区三区| 欧美性理论片在线观看片免费| 国产在线观看精品| 北条麻妃一区二区三区在线观看 | 99视频精品全部免费在线视频| 国产一级黄色录像片| 久久久国产亚洲精品| 日本一区二区三区在线免费观看| www.亚洲色图.com| 日韩精品电影一区二区三区| 亚洲一区二区在线观看视频| 国产性生活视频| 日韩欧美一区二区免费| 国产污视频在线| 欧美—级a级欧美特级ar全黄 | 成人动漫视频在线观看完整版 | 日韩av懂色| 精品在线视频一区二区| 国产又大又硬又粗| 欧美成人国产| aaa毛片在线观看| 国产成人免费在线观看不卡| 成年人在线免费看片| 亚洲精品国产品国语在线app| 无码人妻av免费一区二区三区 | 亚洲国产美女搞黄色| 中文字幕+乱码+中文字幕明步| 亚洲电影免费观看高清完整版在线观看| 91精品专区| 秋霞午夜一区二区| 婷婷综合国产| 在线码字幕一区| 久久久亚洲人| 在线观看国产免费视频| 亚洲欧美另类久久久精品2019| 色老头在线视频| 日韩电影大片中文字幕| 日韩另类在线| 91在线观看免费网站| 久久在线免费| 男女污污的视频| 91蝌蚪porny成人天涯| 国产精品成人aaaa在线| 欧美zozozo| 国产淫片在线观看| 成人观看高清在线观看免费| 欧美日韩有码| 午夜精品在线免费观看| 久久久精品日韩欧美| 成人午夜淫片100集| 日韩国产高清污视频在线观看| 欧美人与性动交α欧美精品济南到| 亚洲va久久久噜噜噜| 国产探花在线精品一区二区| 欧美变态另类刺激| av中文字幕亚洲| 欧美一级视频免费观看| 精品国产乱码久久久久久久| 蜜臀av在线| 国产精品三区www17con| 女人香蕉久久**毛片精品| 天天摸天天舔天天操| 亚洲人成精品久久久久久| 99国产精品久久久久久久成人| 日韩一区二区久久久| 白嫩亚洲一区二区三区| 国内外成人激情免费视频| 国产一区二区美女| 麻豆视频在线观看| 日韩免费电影一区| 九色91在线| 久久久久久久久一区| 久久精品盗摄| 女人裸体性做爰全过| 欧美精品一卡两卡| 中文字幕有码在线观看| 成人欧美一区二区三区视频xxx | 国产亚洲一卡2卡3卡4卡新区| 中文字幕第21页| 亚洲欧美在线视频观看| a视频免费在线观看| 久久免费国产视频| 色88888久久久久久影院| 日本在线观看a| 国产精品色呦呦| 国产乱色精品成人免费视频 | 国产亚洲欧美精品久久久久久| 精品国产一二三| 小视频免费在线观看| 亚洲 国产 日韩 综合一区| 极品少妇xxxx精品少妇| 欧美人妻一区二区| 日韩毛片在线看| 小明成人免费视频一区| 中文字幕精品在线播放| 99精品久久只有精品| 中文字幕av久久爽| 九九九久久久久久| 同性恋视频一区| 国产福利精品一区二区三区| 亚洲国产wwwccc36天堂| 丁香在线视频| 97超碰人人看人人 | 亚洲成人tv网| av一区在线观看| 国产精品我不卡| 日韩精品乱码av一区二区| 日日噜噜夜夜狠狠久久波多野| 亚洲第一精品自拍| 成人自拍视频网| 国内精品在线观看视频| 中文字幕日韩av资源站| 亚洲av成人无码久久精品老人 | 亚洲男人电影天堂| 天天操天天插天天射| 91九色国产在线| 久久精品午夜| 日本三级免费看| 精品国产一区二区在线 |