前言

如果你沒有看過之前的(一)或者沒有下載這份手冊的話,下面有鏈接,還是對照手冊食用畢竟好

http://www.cnblogs.com/linkstar/p/6413402.html

該說的我覺得(一)里面我都說完了,那么就直接進(jìn)入正題吧。

 

異常日志

對于異常的處理,很多時候?qū)τ谖覀儊碚f是很偷懶的,不是嗎?

我見過太多的就是打印出異常的日志,或者是連日志都不寫,直接控制臺輸出一下就啥也沒有了。更有甚者直接把所有異常往外拋的。還有就是直接try-catch所有的代碼,“信誓旦旦”的認(rèn)為所有的異常我都捕獲了,你總不能再出問題了吧。

對于這些。。。我送一句話,不去處理的異常就是錯誤。

異常捕獲之所以存在,是因?yàn)閖ava希望,即使突然出現(xiàn)異常,有效的處理,讓這個問題不會影響到整個應(yīng)用的運(yùn)行,從而提高程序的穩(wěn)定性,也會提醒程序員發(fā)現(xiàn)和解決問題。

 

異常處理

首先給一下在java中異常的分類,大多數(shù)我們都應(yīng)該遇到過,有些可能沒遇到過,了解他們的關(guān)系。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

3、這就是我在前面所說的,有的同學(xué)偷懶,就捕獲全部的異常。其實(shí)我們要做的其實(shí)很簡單,對于不穩(wěn)定的代碼進(jìn)行捕獲他有可能出現(xiàn)的異常,做相應(yīng)的異常處理,現(xiàn)在的IDE都很智能,都會提示哪里會出現(xiàn)什么樣的異常,對于我們來說已經(jīng)很方便了。

 

4、將異常處理為可以和用戶或者說是使用者可以理解的錯誤。我要補(bǔ)充的是:但是要和原有的錯誤進(jìn)行區(qū)分。比如登錄功能,我只是做個假設(shè)嘛,如果真的出現(xiàn)異常,你看看你捕獲的是什么異常,不能都只是提示用戶“用戶名密碼錯誤?!?,那用戶鬼知道是你服務(wù)器的bug導(dǎo)致登錄失敗,等再去看日志已經(jīng)晚了,例子可能不是很恰當(dāng),但差不多是這個意思。

 

6、我補(bǔ)充一下 try-with-resources 語句,這個是JDK7的特性。我原來也不知道,也是看了手冊才知道有這個東西。會考慮使用。

第一、 try-with-resources 會自動關(guān)閉資源。

第二、關(guān)閉順序和打開順序相反。

第三、還是可以使用catch和finally但是,catch和finally會在資源關(guān)閉后才運(yùn)行。

我這邊給出簡單的語法形式

try(資源的打開)

     資源的使用

}catch{

具體參考官方文檔:

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

 

9、返回值能為null就為null,我之前看到有書中寫到“如果一個團(tuán)隊(duì)在寫代碼的時候,遇到List的時候,永遠(yuǎn)不返回null如果沒有數(shù)據(jù)就返回一個size為0的List,但是不是null,這樣大家都不需要對List判空,只需要判斷大小即可,否則對于一個List不僅需要判空也需要判斷大小?!钡俏以趯?shí)際中發(fā)現(xiàn),有的時候null作為一個識別是很好的,就像手冊中說的,我們只需要在接口上面明確給出,什么樣的情況之下會返回null,什么樣的情況下不會即可,讓使用者去判斷,我覺得這樣在實(shí)際中這個識別還是很有用的,畢竟NPE大家都不希望的,不判斷心里不安心。

 

13、在后期優(yōu)化的時候,抽取公共方法很重要,后期修改如果不是公共的話,有可能出現(xiàn),有的這邊改了,那邊是類似或者相同的方法,但是卻沒改的情況就很尷尬。

 

日志規(guī)約

1、第一條就把我嚇了個半死,本人使用的是Log4j,確實(shí)有依賴,但是確實(shí)這條說的沒錯,但是可能這對與項(xiàng)目大的情況下比較重要,現(xiàn)在對于我來說并不準(zhǔn)備換,可能之后會作考慮。

 

后面幾條我總結(jié)個人一起說一下,首先日志的打印我們這邊的規(guī)矩是這樣的。

一、日志描述必須清楚,when?where?who?what?什么時候,這個倒是log4j會有,where就是那里發(fā)生的錯誤,案發(fā)地點(diǎn)在哪里,who就是誰出現(xiàn)的這個錯誤,what就是出現(xiàn)的是什么錯誤。這些明確,一般這個錯誤定位就簡單了。

二、日志必須進(jìn)行級別分類,不能一股腦全部debug也不能全部error。

三、不必要的日志不寫,不能浪費(fèi)磁盤資源,不能導(dǎo)致日志繁重讓別的錯誤找起來麻煩。

四、如果有專人,那么專人會去查看,否則自己必須去在測試時查看自己的日志是否出現(xiàn)問題,有問題立即處理解決。

我這邊也學(xué)到了一些,一個是日志的分類其實(shí)很重要,對于定位錯誤問題很重要,否則對著那么長的日志誰看的都煩心,日志存放的時間,我們之前好像都是永久存放的。。。有人固定去刪除??赡?5天這個時間比較有參考價值。

在日志上面除了以上的幾點(diǎn)要注意的之外,還需要注意的是,不要只看項(xiàng)目的日志,有時一些容器本身產(chǎn)生的日志也大的可怕,比如經(jīng)常使用的tomcat,它本身就會產(chǎn)生很多的日志文件,對于服務(wù)器也會占用資源,所以也要進(jìn)行處理。網(wǎng)上搜索如何關(guān)閉tomcat的日志文件打印即可。

 

總結(jié)

這里是對于那些像我一樣的年輕的程序員說的,不要害怕去看異常和日志,很多人看到一大堆英文就害怕,其實(shí)都是紙老虎,看明白了之后慢慢你就不怕看了。

一開始的時候我也害怕看它,也看不懂,漸漸的就學(xué)會了,慢慢就喜歡上了。

因?yàn)槟隳軓腻e誤中汲取教訓(xùn)而且積累了很多的經(jīng)驗(yàn),說實(shí)話,失敗的經(jīng)驗(yàn)或許比成功的經(jīng)驗(yàn)更多更重要,不是嗎?