精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品视频不卡| 欧美v国产在线一区二区三区| 91福利视频导航| 欧美成人免费观看视频| 95精品视频| 亚洲精品久久7777| 好吊色欧美一区二区三区视频| 在线观看亚洲欧美| 欧美一级色片| 欧美在线观看禁18| 中文字幕一区二区中文字幕| 精品国产乱码一区二区三 | 亚洲一区免费网站| 国产无遮挡aaa片爽爽| 天天躁日日躁狠狠躁欧美| 精品久久香蕉国产线看观看亚洲| 日韩理论片在线观看| 国产精品一级视频| 狠狠入ady亚洲精品经典电影| 精品中文字幕久久久久久| 亚洲免费看av| 国产精品一品| 久久精品人人爽人人爽| 国产日韩综合一区二区性色av| 久久久久无码国产精品| 久久综合影院| 91精品国产一区二区| 777777av| 91黄色在线| 久久精品免视看| 国产91亚洲精品一区二区三区| 五月婷婷亚洲综合| 欧美 日韩 国产 一区| 精品久久久久久久久久久久久久久| 鲁一鲁一鲁一鲁一色| 欧美另类极品| 久久久久久久久久久久久女国产乱| 成人女保姆的销魂服务| 黄色片网站在线免费观看| 久久久人成影片免费观看| 亚洲美女动态图120秒| 日韩欧美中文视频| av资源中文在线| 国产精品久久久久久久久免费桃花 | 99riav1国产精品视频| 日韩在线欧美在线| 性欧美成人播放77777| 久久视频社区| 欧美色欧美亚洲另类二区| 亚洲熟妇国产熟妇肥婆| 伊人福利在线| 亚洲天堂免费看| 色播亚洲婷婷| 蜜桃在线一区二区| 极品少妇一区二区| 国产成一区二区| 日本免费观看视| 欧美日韩调教| 久久99精品久久久久久琪琪| av资源在线免费观看| 国产探花一区在线观看| 日韩电影在线观看中文字幕| 中文字幕第三区| 精品国产不卡一区二区| 在线亚洲一区观看| 国产精品视频一区二区三区四区五区| 黄页在线观看免费| 中文字幕一区二区视频| 五月天亚洲综合情| 国产69久久| 国产性做久久久久久| 看高清中日韩色视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 日本国产一级片| 国产亚洲精彩久久| 欧美日韩美少妇| 欧美一级特黄a| 国产成人精品123区免费视频| 欧美午夜片在线免费观看| 国产男女在线观看| 在线观看福利电影| 色婷婷综合久久| 僵尸世界大战2 在线播放| 人妖欧美1区| 亚洲图片欧美激情| 一区二区三区四区免费观看| caoporm免费视频在线| 亚洲九九爱视频| 波多野结衣av一区二区全免费观看 | 亚洲一区二区少妇| 精品人妻av一区二区三区| 国产91丝袜在线播放| 亚洲综合av影视| 免费观看成年人视频| 99国产精品久| 亚洲v国产v在线观看| 免费在线观看黄| 一二三四社区欧美黄| 成人免费观看在线| 综合另类专区| 欧美精品tushy高清| 精品国产午夜福利在线观看| 国产91精品入| 亚洲欧美一区二区三区在线| 老司机精品免费视频| 欧美a级片网站| 欧美一二三视频| 无码人妻丰满熟妇区五十路| 久久精品国产亚洲aⅴ | 国产欧美日韩综合精品一区二区三区 | 97久久人人超碰| 亚欧精品在线| 成入视频在线观看| 欧洲另类一二三四区| www.成人黄色| 精品国产一区二区三区成人影院| 亚洲图中文字幕| 精品99久久久久成人网站免费| 亚洲欧美卡通另类91av| 国产日韩欧美电影在线观看| 六月婷婷中文字幕| 亚洲特级片在线| 国产免费999| 日韩a级大片| 欧美高清电影在线看| 在线黄色av网站| 国产亚洲欧美中文| 成人在线免费观看av| 91综合精品国产丝袜长腿久久| 日日骚av一区| 国产99久久久久久免费看| 久久综合久久综合久久| 日韩中文字幕在线免费| 亚洲日本va中文字幕| 久久精品国产亚洲| 青青艹在线观看| 久久久99精品久久| 日本精品免费在线观看| 国产精品巨作av| 欧美激情小视频| 精品人妻一区二区三区蜜桃| **网站欧美大片在线观看| 欧美婷婷精品激情| 日本黄色精品| 国产日韩精品综合网站| 亚洲成人影院麻豆| 欧美日韩国产中文| 91大神福利视频| 狠狠色狠狠色综合| 一区二区三区四区免费观看| 国产精品免费精品自在线观看| 视频一区视频二区国产精品 | 顶级黑人搡bbw搡bbbb搡| 日韩专区中文字幕一区二区| 日本免费高清一区| h1515四虎成人| 日韩网站免费观看高清| 91国内精品视频| 亚洲视频在线观看一区| 天堂网成人在线| 欧美日韩精品| 国产亚洲欧美另类一区二区三区| 91资源在线观看| 日韩av在线最新| 在线视频一区二区三区四区| 久久久久久亚洲综合| av免费网站观看| 国产成人精品一区二区免费看京| 国产成人激情小视频| yjizz视频网站在线播放| 欧美日本一区二区三区| 五月天婷婷色综合| 成人免费av在线| 少妇性饥渴无码a区免费| 久久99久久人婷婷精品综合| 国产精品色悠悠| 91精选在线| 国产视频久久网| 中文字幕无码乱码人妻日韩精品| 亚洲视频精选在线| 色哟哟视频在线| 久久婷婷av| 中文字幕一区二区三区在线乱码 | 91精品国产综合久久久久久久久久 | 欧美在线视频免费播放| 成人在线免费电影| 欧美一区二区美女| 黄色片免费观看视频| 中文字幕二三区不卡| 永久看看免费大片| 国产精品普通话对白| 在线视频不卡国产| 久久国产精品免费精品3p| 国产精品99导航| 99自拍视频在线观看| 日韩av网址在线| 亚洲影院一区二区三区| 亚洲国产毛片aaaaa无费看| av黄色免费网站| 国产精品一区二区三区四区 | 精油按摩中文字幕久久| 黄页网站在线观看视频| 色喇叭免费久久综合| 精品高清视频| 成人在线视频www| 日本精品va在线观看| h网站久久久| 国产午夜精品一区理论片飘花| 国产99999| 欧美伊人久久大香线蕉综合69| 免费无遮挡无码永久在线观看视频 | 亚洲区第一页| 欧美 另类 交| 国产一区二区三区不卡视频网站| 亚洲aaa激情| 91成人在线| 欧美性视频精品| 欧美日韩色网| www.欧美精品| 国产黄色免费在线观看| 欧美精品一区男女天堂| 国产免费高清视频| 欧美视频中文字幕| 久久久久久久久久久影院| 一区二区三区精品视频| 美国黄色片视频| 久久久国际精品| 少妇饥渴放荡91麻豆| 国产成人啪午夜精品网站男同| 超碰在线播放91| 丝袜亚洲另类欧美| 免费毛片网站在线观看| 五月天久久久| 一级做a爰片久久| 欧美成人milf| 亚洲图色在线| 日本高清免费电影一区| 无码免费一区二区三区免费播放| 国产一区二区观看| 欧美日韩精品免费观看视一区二区| 另类尿喷潮videofree| av色综合网| 999久久久久久久久6666| 91久久国产综合久久91精品网站| 成人久久网站| 日韩av手机在线观看| 亚洲欧美一区二区三区| 7777精品视频| 亚洲色图官网| 日韩av片免费在线观看| 神马久久午夜| 日韩美女写真福利在线观看| 欧美日韩电影免费看| 国产aⅴ夜夜欢一区二区三区| bl在线肉h视频大尺度| 欧美极品在线视频| 国产乱码在线| 欧美一区二区三区……| 日韩高清中文字幕一区二区| 国产成人啪精品视频免费网| 日韩精品一区二区三区av| 国产噜噜噜噜噜久久久久久久久 | 久久久夜夜夜| 免费黄色一级网站| 久久精品国产一区二区| 天美一区二区三区| eeuss影院一区二区三区| 国产亚洲无码精品| 国产精品色噜噜| www青青草原| 婷婷综合五月天| 草莓视频18免费观看| 欧美久久久久久蜜桃| 亚洲第一黄色片| 日韩高清欧美高清| h视频在线播放| 欧美成人免费大片| 国产v日韩v欧美v| 国产精品老女人精品视频| 97精品资源在线观看| 国产乱码一区| 精品国产一区二区三区噜噜噜| 综合操久久久| 亚洲麻豆一区| 国产无色aaa| 成人av一区二区三区| 精品无码国产污污污免费网站 | 成人国产在线| 国产高清自拍一区| 国产麻豆一区二区三区精品视频| 2025韩国大尺度电影| 夜久久久久久| 国内外成人免费在线视频| 大美女一区二区三区| 蜜桃av乱码一区二区三区| 亚洲欧美成人一区二区三区| 国产 日韩 欧美 在线| 6080国产精品一区二区| 婷婷丁香花五月天| 久久精品国产电影| 一区一区三区| 91在线观看网站| 精品国产精品久久一区免费式| 日韩一区二区高清视频| 日本欧美一区二区| 国产高潮视频在线观看| 中文字幕一区在线观看视频| 亚洲男人的天堂在线视频| 日韩欧美中文一区| wwwww在线观看免费视频| 午夜精品一区二区三区在线视 | 亚洲国产精品资源| 国产在线激情| 国产精品你懂得| 婷婷成人综合| 2018日日夜夜| 粉嫩av一区二区三区粉嫩| 91免费在线看片| 色欧美日韩亚洲| 免费国产黄色片| 欧美插天视频在线播放| 国产成人精品一区二区三区在线| 精品综合久久久| 国产精品二区影院| 亚洲曰韩产成在线| 好吊妞视频一区二区三区| 日韩欧美的一区二区| 老司机精品影院| 国产精品久久久久久久久免费| 亚州精品视频| 91九色在线观看视频| 成人免费黄色在线| 免费一级肉体全黄毛片| 91精品国产综合久久精品麻豆| 一级毛片视频在线| 国产精品美女av| 欧美三级伦理在线| 亚洲国产精品毛片av不卡在线| 99国产精品国产精品久久| 精品在线视频免费| 精品国产一区二区三区不卡 | 亚洲一区二区av电影| 精品久久无码中文字幕| 久久影视电视剧免费网站| 亚洲国产伊人| 中文字幕一区二区中文字幕| 精品一区二区在线视频| 中文字幕美女视频| 欧美美女黄视频| av毛片在线免费看| 1卡2卡3卡精品视频| 欧美 日韩 国产 一区| 日本中文字幕有码| 亚洲成人资源网| 天天av综合网| 国产精品福利在线观看网址| 欧美熟乱15p| 欧美国产日韩在线视频| 一区二区三区成人| 天堂网av2014| 热草久综合在线| 欧洲激情综合| 亚洲第一色av| 亚洲一区二区三区在线| 亚洲欧美色视频| 国产精品都在这里| 亚洲xxx拳头交| 日本天堂在线播放| 狠狠做深爱婷婷久久综合一区 | 一区二区不卡在线视频 午夜欧美不卡在| av免费在线观看不卡| 国模吧一区二区| 欧美精品色图| 深夜做爰性大片蜜桃| 亚洲v日本v欧美v久久精品| 神马久久高清| 国产免费亚洲高清| 狠狠噜噜久久| 日本理论中文字幕| 91麻豆精品国产综合久久久久久| av老司机在线观看| 神马影院午夜我不卡| 国产一区在线观看视频| 青青草av在线播放| 色妞一区二区三区| 风间由美中文字幕在线看视频国产欧美| 俄罗斯av网站| 136国产福利精品导航| 黄色片一区二区三区| 国产成人激情小视频| 欧美 日韩 国产 一区| 少妇人妻好深好紧精品无码| 欧美一二三区在线| 毛片免费看不卡网站| 中国老女人av| 久久婷婷色综合| 精品美女www爽爽爽视频| 国产精品国模在线| 亚洲高清毛片| 成人免费黄色小视频|