91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何避免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

胶南市| 镇原县| 贵州省| 贞丰县| 隆林| 新疆| 临沧市| 武宣县| 澄迈县| 精河县| 郧西县| 无棣县| 中西区| 宜都市| 保亭| 孝感市| 论坛| 普安县| 平山县| 德保县| 莎车县| 青田县| 个旧市| 行唐县| 休宁县| 汤阴县| 龙门县| 九龙坡区| 高尔夫| 海兴县| 常熟市| 大冶市| 寻乌县| 平阴县| 松阳县| 太仆寺旗| 武邑县| 拜城县| 渝中区| 麻城市| 根河市|