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

被同事的空指針硬生生的折磨了好久,終于學會了如何處理空指針

開發 前端
阿粉入職這么久了,無論如何也不會想到會被自己同事寫的一個接口返回的空指針異常折磨致死,折磨的死去活來,卻完全不知道是什么原因,你有沒有過這種經歷呢?

[[349737]]

本文轉載自微信公眾號「Java極客技術」,作者鴨血粉絲。轉載本文請聯系Java極客技術公眾號。

 阿粉入職這么久了,無論如何也不會想到會被自己同事寫的一個接口返回的空指針異常折磨致死,折磨的死去活來,卻完全不知道是什么原因,你有沒有過這種經歷呢?

NullPointerException

標題醒目,是為了給大家說,這個空指針異常,說實話,在項目里面很多都是很容易能夠解決的,但是有時候發生問題的原因卻是你無論如何想不到的,事情是這個樣子的。

前端代碼如下:

  1. var setting = { 
  2.                 url:"findFileById"
  3.                 data:{ 
  4.                     id:id 
  5.                 }, 
  6.                 success:function (data) { 
  7.                     console.log(data); 
  8.                 }, 
  9.                 error:function (data) { 
  10.                     console.log("查詢文件異常"
  11.                 } 
  12.             } 
  13. ajax(setting); 
  14.  
  15. ajax在這里只是進行了一個封裝 
  16.  
  17. function ajax(setting) { 
  18.     $.ajax({ 
  19.         type:"post"
  20.         url:setting.url+".do"
  21.         dataType:setting.dataType||"json"
  22.         contentType:"application/json;utf-8"
  23.         data:JSON.stringify(setting.data)||{}, 
  24.         async:setting.async, 
  25.         success:function (data) { 
  26.             setting.success(data); 
  27.         }, 
  28.         error:function (data) { 
  29.             setting.error("接口出錯,請重試"); 
  30.         } 
  31.     }) 

后臺業務處理如下:

  1. @PostMapping("findFileById"
  2. @ResponseBody 
  3. public File findFileById(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String,Object> map){ 
  4.     return deliverFileService.findFileById(request,map); 

大家肯定會說,這么簡單的事情你都不會,阿粉你干啥吃的,一個查詢文件都有問題,而事實上,在代碼里面我的同事也沒有完全去處理這個空值的問題,結果導致一直都出在ajax里面出現“接口出錯,請重試”的錯誤。

而問題就在于他沒有處理空的數據,而直接就返給我了,這種問題也是非常的奇怪,很多時候不都是應該處理一下空的數據為防止NULL的異常么?而阿粉也第一時間找到了他,他說沒問題,在他那里正常調用,我當時就尷尬了,我給你傳遞的參數是沒問題的,查詢數據如果為空,應該會有提示的才對。于是阿粉只能是簡單的修改了一下他的代碼,變成了

  1. @PostMapping("findFileById"
  2. @ResponseBody 
  3. public File findFileById(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String,Object> map){ 
  4.     return deliverFileService.findFileById(request,map)!= null ?deliverFileService.findFileById(request,map) : new ; new DeliverFile(); 

阿粉不能給他改動太大,只能改成我這里調用如果是 null的時候,返還給我一個空對象就好了,如果不是的話,就把查詢回來的數據完整的返還給我。

那么阿粉現在就來說說這個如何處理我們的空值的問題,不然以后你如果寫好的數據接口,給別人調用,調用出來如果是個空的字符串也就罷了,但如果像是null這種不處理的東西,那么一定會被別人鄙視死。

如何處理空指針異常的問題

什么時候出現NullPointerException?

我們都知道 NullPointerException 是繼承 RuntimeException 的,也就是運行的時候會出的異常信息,當我們寫代碼的時候,如果代碼在運行的時候,我們使用的對象沒有初始化的時候,或者是為空的時候,就會出現空指針的異常,而這個異常也是我們感覺最 Low 的,最不可能出現的異常,但是往往因為自己的不注意,就出現了。

其實這個辦法可就太多了,而很多時候我們也是不去注意這個事情的,就比如說對象,判空操作,但是你如果在每個對象使用的時候都判空,那么你的代碼真的就會出現:

  1. if(a!=null){ 
  2.     if(b!=null){ 
  3.         if(c!=null){ 
  4.             .... 
  5.         } 
  6.     } 

當你看到這種代碼的時候,第一感覺有沒有直接想把這個朋友拉過來捶一頓,這種要是寫多了,人都快瘋了,尤其是二次維護的人員。

其實這種方法雖然笨,但是也算是一個習慣,判空,對功能上來說,肯定是不會出現很多麻煩,但是這么個空值也是很折磨人的,那么我們就來處理一下他吧。

1.這個我們就不說了直接判斷對象是不是為空就行了。

第二個,就是比對equals方法的時候,我們很多時候的寫作習慣就是這種

  1. if(text.equals("xxxxx")){ 
  2.      

其實這么比對沒有問題,但是你有沒有想過,如果說你的text是個空呢?你比對的時候不就出錯了?而曾經也有一個面試官問我,為什么在筆試題里面去把已知的字符串寫在前面,當時可能只是一種習慣,而后來卻發現這是真的有用滴。

你改成:

  1. if("xxxxx".equals(text)){ 
  2.      

就會避免了出現空指針的錯誤了,多好的習慣不是么?

第三個,也是我們在Java8里面提供的特性Optional

ofNullable,就是Optional中提供的,將我們需要的參數傳遞過去,就可以判斷是否為空了。

而對于集合來說,大家就可以使用之前修改的那個方法,判斷是否為null,如果是null,那么我們一定要返回一個哪怕是空對象,或者是一個空的集合,這樣對于之后調用你接口的人來說,也是非常友善的。

我知道很多人會說,那我在接口上面寫上個注釋,查詢返回的值會有可能是個空,大家小心調用,雖然你提示了問題,但是你這是沒有解決問題的體現呀,就相當于,你把所有的異常全部都拋出去了,而沒有去處理他。

我們這時候還可以使用 Java8 里面提供的 Optional ,比如這個樣子

  1. Optional<Product>getProductOptional(String id) 

這個時候,當我們的調用者知道有 Optional 的存在的時候,自然而然的明白了。

關于處理null,你還有其他的好的方式么?

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2021-11-15 06:56:45

系統運行空指針

2022-01-19 09:00:00

Java空指針開發

2015-07-30 10:12:32

JavaNullAssert

2020-04-28 10:54:13

運算符開發Java

2024-12-06 10:12:20

2024-08-12 08:28:35

2025-03-28 08:50:00

指針編程C 語言

2022-01-04 23:13:57

語言PanicGolang

2022-09-08 08:03:30

RocketMQ線程技巧

2023-10-08 11:09:22

Optional空指針

2020-03-30 08:00:38

Nginx徹底搞懂

2024-02-01 12:09:17

Optional容器null

2024-02-28 09:03:20

Optional空指針Java

2022-02-08 09:09:45

智能指針C++

2021-05-12 07:03:25

Switch報空指針

2023-08-04 08:52:52

Optional消滅空指針

2023-07-10 07:17:29

無效化空窗口

2025-06-19 09:13:10

空指針編程C++17

2021-02-28 21:47:51

Java語法糖算數

2024-10-15 15:58:11

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美黑人一级爽快片淫片高清 | 国产四区 | 日日艹夜夜艹 | 狠狠亚洲 | www.中文字幕av | 国产黄色大片在线免费观看 | 欧美性影院 | 伊人成人免费视频 | 欧美一区视频 | 96国产精品久久久久aⅴ四区 | 岛国av免费看 | 夜夜夜夜草| 成人免费一区二区三区视频网站 | 欧美日韩三级视频 | 日韩在线 | 在线播放国产一区二区三区 | 成人在线视频观看 | 欧美国产精品久久久 | 成年人视频在线免费观看 | 国产a视频 | 国产高清精品在线 | 91福利网| 瑟瑟视频在线看 | 丁香久久 | 日日操夜夜操天天操 | 伊人春色在线 | 91色视频在线观看 | 欧美日韩专区 | 国产精品18久久久久久白浆动漫 | 精品一二三 | av在线播放不卡 | 精品久久久精品 | 欧美在线一区二区三区 | 亚洲精品中文字幕在线观看 | 国产亚洲欧美在线 | 亚洲不卡 | 亚洲 成人 在线 | caoporn免费在线视频 | 日韩一区二区三区四区五区 | 97精品超碰一区二区三区 | 久久网一区二区三区 |