中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

怎么處理空指針

發布時間:2021-10-25 16:15:10 來源:億速云 閱讀:192 作者:iii 欄目:web開發

這篇文章主要講解了“怎么處理空指針”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么處理空指針”吧!

NullPointerException

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

前端代碼如下:

var setting = {                 url:"findFileById",                 data:{                     id:id                 },                 success:function (data) {                     console.log(data);                 },                 error:function (data) {                     console.log("查詢文件異常")                 }             } ajax(setting);  ajax在這里只是進行了一個封裝  function ajax(setting) {     $.ajax({         type:"post",         url:setting.url+".do",         dataType:setting.dataType||"json",         contentType:"application/json;utf-8",         data:JSON.stringify(setting.data)||{},         async:setting.async,         success:function (data) {             setting.success(data);         },         error:function (data) {             setting.error("接口出錯,請重試");         }     })

后臺業務處理如下:

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

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

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

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

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

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

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

什么時候出現NullPointerException?

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

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

if(a!=null){     if(b!=null){         if(c!=null){             ....         }     } }

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

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

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

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

if(text.equals("xxxxx")){      }

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

你改成:

if("xxxxx".equals(text)){      }

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

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

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

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

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

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

Optional<Product>getProductOptional(String id)

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

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

向AI問一下細節

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

AI

扶余县| 贵阳市| 阿勒泰市| 都安| 平安县| 新津县| 双城市| 张家川| 页游| 荔波县| 宜丰县| 双鸭山市| 通海县| 山东省| 曲水县| 白沙| 苏尼特右旗| 米林县| 同心县| 兰坪| 翁牛特旗| 界首市| 阿拉善左旗| 定日县| 陇川县| 仁怀市| 夹江县| 百色市| 长沙市| 全州县| 孟津县| 长泰县| 呼玛县| 毕节市| 汪清县| 甘谷县| 全南县| 香港| 龙州县| 木里| 靖宇县|