亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何避免Java異常作為控制流使用

發布時間:2022-01-07 14:31:39 來源:億速云 閱讀:185 作者:iii 欄目:編程語言

這篇文章主要講解了“如何避免Java異常作為控制流使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何避免Java異常作為控制流使用”吧!

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

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

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

publicstaticintfindAge(String name) {  try {  String ageAsString = findUser(name);  return ageAsString.length();  } catch (NameNotFoundException e) {  return0;  }  }  privatestaticStringfindUser(String name) {  if(name==null) {  thrownew NameNotFoundException();  }  return name;  }

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

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

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

publicstaticintfindAgeNoEx(String name) {  String ageAsString = findUserNoEx(name);  return ageAsString.length();  }  privatestaticStringfindUserNoEx(String name) {  if(name==null) {  return"";  }  return name;  }

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

publicclassControlFlowWithExceptionOrNot {  publicstaticclassNameNotFoundExceptionextends RuntimeException {  privatestaticfinallong serialVersionUID = 3L;  }  privatestaticfinalint TRIAL = 10000000;  publicstaticvoid main(String[] args) throws InterruptedException {  long start = System.currentTimeMillis();  for (int i = 0; i < TRIAL; i++) {  findAgeNoEx(null);  }  System.out.println("Duration :" + (System.currentTimeMillis() - start));  long start2 = System.currentTimeMillis();  for (int i = 0; i < TRIAL; i++) {  findAge(null);  }  System.out.println("Duration :" + (System.currentTimeMillis() - start2));  };  publicstaticint findAge(String name) {  try {  String ageAsString = findUser(name);  return ageAsString.length();  } catch (NameNotFoundException e) {  return0;  }  }  privatestaticString findUser(String name) {  if (name == null) {  thrownew NameNotFoundException();  }  return name;  }  publicstaticint findAgeNoEx(String name) {  String ageAsString = findUserNoEx(name);  return ageAsString.length();  }  privatestaticString findUserNoEx(String name) {  if (name == null) {  return"";  }  return name;  }  }

輸出:

Duration :16  Duration :6212

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

感謝各位的閱讀,以上就是“如何避免Java異常作為控制流使用”的內容了,經過本文的學習后,相信大家對如何避免Java異常作為控制流使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

交口县| 安义县| 专栏| 固镇县| 乐至县| 乌苏市| 历史| 石门县| 嘉兴市| 普兰店市| 兴化市| 石楼县| 隆化县| 云梦县| 鄯善县| 调兵山市| 揭阳市| 香港| 交口县| 桃江县| 吕梁市| 聂拉木县| 阿拉善左旗| 鄄城县| 罗田县| 江津市| 台湾省| 开原市| 肇源县| 广灵县| 中超| 遵义县| 黄冈市| 榆树市| 黄大仙区| 富平县| 正安县| 韶山市| 永吉县| 岑溪市| 密云县|