成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java:異常作為控制流?大佬:避免!避免!避免

開發 后端 開發工具
用異常(Exceptions)作為控制流就是這些常見的不良做法中的一種。要避免使用這一方法的原因有二:首先,這會降低單位時間內代碼的響應性能,同時代碼也會非常難讀懂。

Java是一種通用的編程語言,它有著許多不同的方案去解決一些特殊的問題。然而,其中既有需要被遵循的最佳做法,也有一些仍被普遍使用的不良做法。

用異常(Exceptions)作為控制流就是這些常見的不良做法中的一種。要避免使用這一方法的原因有二:首先,這會降低單位時間內代碼的響應性能,同時代碼也會非常難讀懂。

[[283089]]

通過下面這個例子來看看異常是怎樣被用作控制流的。這個代碼的商業用例是:

  1. publicstaticintfindAge(String name) {  
  2. try {  
  3. String ageAsString = findUser(name);  
  4. return ageAsString.length();  
  5. } catch (NameNotFoundException e) {  
  6. return0;  
  7.  
  8.  
  9. privatestaticStringfindUser(String name) {  
  10. if(name==null) {  
  11. thrownew NameNotFoundException();  
  12.  
  13. return name;  

如果用戶提供了一個非空的名字給findAge 方法,那它會返回這個名字的長度。但是如果用戶名為空,那么findUser方法會拋出NameNotFoundException,而在這種情況下,findAge 方法會返回0。

那該如何重構這個代碼來避免異常呢?

Java:異常作為控制流?大佬:避免!避免!避免

老實說,有很多種辦法可以實現,這里就只介紹一種。

  1. publicstaticintfindAgeNoEx(String name) {  
  2. String ageAsString = findUserNoEx(name);  
  3. return ageAsString.length();  
  4.  
  5. privatestaticStringfindUserNoEx(String name) {  
  6. if(name==null) {  
  7. return"";  
  8.  
  9. return name;  

為了找到異常對代碼性能的影響,準備下面這個代碼,其中兩種實現都被執行了1000萬次,Intel Core i7-3630QM CPU上運行時,異常花費了上千毫秒。

  1. publicclassControlFlowWithExceptionOrNot {  
  2. publicstaticclassNameNotFoundExceptionextends RuntimeException {  
  3. privatestaticfinallong serialVersionUID = 3L 
  4.  
  5. privatestaticfinalint TRIAL = 10000000 
  6. publicstaticvoid main(String[] args) throws InterruptedException {  
  7. long start = System.currentTimeMillis();  
  8. for (int i = 0; i < TRIAL; i++) {  
  9. findAgeNoEx(null);  
  10.  
  11. System.out.println("Duration :" + (System.currentTimeMillis() - start));  
  12. long start2 = System.currentTimeMillis();  
  13. for (int i = 0; i < TRIAL; i++) {  
  14. findAge(null);  
  15.  
  16. System.out.println("Duration :" + (System.currentTimeMillis() - start2));  
  17. };  
  18. publicstaticint findAge(String name) {  
  19. try {  
  20. String ageAsString = findUser(name);  
  21. return ageAsString.length();  
  22. } catch (NameNotFoundException e) {  
  23. return0;  
  24.  
  25.  
  26. privatestaticString findUser(String name) {  
  27. if (name == null) {  
  28. thrownew NameNotFoundException();  
  29.  
  30. return name;  
  31.  
  32. publicstaticint findAgeNoEx(String name) {  
  33. String ageAsString = findUserNoEx(name);  
  34. return ageAsString.length();  
  35.  
  36. privatestaticString findUserNoEx(String name) {  
  37. if (name == null) {  
  38. return"";  
  39.  
  40. return name;  
  41.  
  42.  

輸出:

  1. Duration :16  
  2. Duration :6212 

如果來比較一下這兩種findAge方法的可讀性,可以發現沒有異常的那個十分清晰,不管findUser方法返回什么,findAge方法都會得到它的長度,我們也很確信findUser方法會返回一個字符串。但是那個有異常的就會令人困惑,findUser方法返回不清晰,它可能返回一個字符串也可能拋出一個異常,而且這在方法的簽名上是不可見的。正因為這樣,函數式編程范式中不歡迎異常。

最后,在碰到真正的異常情況時再使用異常會比較好。如果你將異常用作控制流,這可能會導致性能問題,代碼的可讀性也會減弱。

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2015-07-30 10:12:32

JavaNullAssert

2023-10-08 11:09:22

Optional空指針

2024-04-02 11:22:01

死鎖Java并發

2013-03-25 10:15:57

2021-03-01 15:52:14

開源開源軟件陷阱

2024-07-11 11:42:09

2022-04-08 08:00:00

NFT數字資產騙局

2014-06-19 14:25:38

IP設計網絡擁堵

2014-10-15 10:01:12

2013-04-07 17:18:16

僵尸網絡變色龍

2013-10-29 09:37:51

Rapid7云風險安全風險

2021-08-09 09:54:37

內存泄漏JS 阿里云

2021-04-22 07:41:46

JavaScript類型轉換

2021-08-05 15:28:22

JS內存泄漏

2009-04-03 09:08:59

職場IT白領猝死

2010-08-27 13:19:46

2016-04-08 09:24:01

脆弱代碼更新

2018-06-11 15:26:47

云計算企業云陷阱

2021-04-22 11:22:12

云計算數據遷移混合云

2022-02-07 19:17:56

SQL系統MySQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美2区 | 亚洲欧美综合精品另类天天更新 | 久久精品亚洲精品国产欧美 | 亚洲欧洲成人 | 免费爱爱视频 | av在线黄| 久久久久久久91 | 亚洲va欧美va天堂v国产综合 | 国产精品国产三级国产aⅴ入口 | 久久久国产精品入口麻豆 | 91视频在线看 | 精产国产伦理一二三区 | 亚洲精品欧美 | 午夜影院在线播放 | 精品久久一 | 成人在线视频观看 | 亚洲成人一区二区在线 | 日韩高清国产一区在线 | 久久久免费在线观看 | 午夜不卡一区二区 | 日韩高清电影 | 日韩三区在线观看 | 亚洲欧美v | 中国美女av| 黄色大片免费播放 | 龙珠z在线观看 | 免费观看一级特黄欧美大片 | 精产国产伦理一二三区 | 日本天堂视频在线观看 | 91免费小视频 | 欧美性大战久久久久久久蜜臀 | 性做久久久久久免费观看欧美 | 久久久久久成人 | 日韩精品极品视频在线观看免费 | 国产精品久久久久久久久久久久冷 | 国产精品精品3d动漫 | www一级片| 国产粉嫩尤物极品99综合精品 | 国产精品久久久亚洲 | 久久一区二区视频 | 国产视频精品视频 |