所屬欄目:電子技術(shù)論文 發(fā)布日期:2016-11-17 14:35 熱度:
程序員在涉及程序的過(guò)程中難免會(huì)遇到一些異常問(wèn)題,這些問(wèn)題對(duì)于程序員來(lái)說(shuō)是個(gè)不大不小的障礙,也是一種考驗(yàn),能否解決這些問(wèn)題對(duì)后續(xù)的工作有著關(guān)鍵的影響。
《軟件和信息服務(wù)》軟件科技期刊,創(chuàng)刊于1984年,由中國(guó)電子信息產(chǎn)業(yè)發(fā)展研究院、北京中電報(bào)發(fā)展有限公司主辦。計(jì)算機(jī)科學(xué)技術(shù)刊物。旨在推動(dòng)計(jì)算機(jī)在我國(guó)的應(yīng)用,推動(dòng)我國(guó)軟件產(chǎn)業(yè)的建立和發(fā)展,促進(jìn)軟件應(yīng)用社會(huì)化、軟件開(kāi)發(fā)工程化、軟件成果商品化和軟件經(jīng)營(yíng)企業(yè)化等方面的工作更好開(kāi)展。
異常的工作原理,在有問(wèn)題的地方產(chǎn)生異常,馬上停止當(dāng)前的工作,轉(zhuǎn)向異常處理代碼,如果找不到異常處理代碼,就會(huì)見(jiàn)異常向一層匯報(bào),上一層接到異常會(huì)做同樣的事,轉(zhuǎn)向異常處理代碼,或者再將異常向上匯報(bào),這樣逐層間錯(cuò)誤傳遞出去,直到有一層處理了異常或是一直報(bào)告給程序的使用者——用戶。
這個(gè)層就是調(diào)用棧,當(dāng)用戶A運(yùn)行程序B,B從函數(shù)C開(kāi)始執(zhí)行,調(diào)用函數(shù)D,再調(diào)用函數(shù)E,再調(diào)用函數(shù)F,這時(shí)F出現(xiàn)了異常,那么這個(gè)異常的調(diào)用棧就是A(棧底)—〉B—〉C—〉D—〉E—〉F(棧頂),這個(gè)異常就會(huì)沿著這個(gè)棧從棧頂開(kāi)始向棧底的方向報(bào)告,如果在函數(shù)C中有對(duì)這個(gè)異常的處理代碼,那么這個(gè)異常的報(bào)告鏈就是F—〉E—〉D—〉C。可以看出,如果在完整的調(diào)用棧中沒(méi)有處理這個(gè)異常的代碼,用戶A就成了異常報(bào)告的終點(diǎn),向windows界面系統(tǒng),會(huì)彈出一個(gè)惱人的消息對(duì)話框哈。
那么用戶A向誰(shuí)報(bào)告呢,哈哈,這個(gè)已經(jīng)不屬于程序的范圍了,感覺(jué)用會(huì)對(duì)程序而言好像上帝一樣,訴說(shuō)痛苦已經(jīng)讓上帝都聽(tīng)到了,就心滿意足了哈哈,看來(lái)程序真虔誠(chéng)哈哈。對(duì)于異常這個(gè)特性,也可以比喻成下屬向上級(jí)報(bào)告問(wèn)題,如果下屬知情不報(bào),問(wèn)題就嚴(yán)重了,你要是領(lǐng)導(dǎo)知道下屬是這樣的八成就踢了他,相反如果你有一個(gè)報(bào)告機(jī)制健全的下屬隊(duì)伍,哈哈你就威風(fēng)了。日本企業(yè)文蛤中有個(gè)宗旨——聯(lián)絡(luò),商談,報(bào)告,其實(shí)就是想讓員工都具有向上級(jí)匯報(bào)的習(xí)慣。現(xiàn)在再看看程序,哈哈,你不用給她們灌輸什么企業(yè)文化,不用她們講述什么報(bào)告的重要性,她們本身就是忠實(shí)報(bào)告的,如果把程序員比作企業(yè)老總,那么程序就是訓(xùn)練一隊(duì)有素的員工。
怎樣處理異常。在這里有個(gè)原則就是“永遠(yuǎn)不要去處理你不知道怎么處理的異常”,
也就是只處理你知道如何處理的異常,對(duì)那些你不知道的異常必須廣開(kāi)言路,并積極地向上級(jí)匯報(bào)。什么叫知道如何處理呢?先說(shuō)一下處理異常有哪些方式,大體有,彈出提示消息框(這個(gè)消息框不同于那個(gè)惱人的異常報(bào)告消息框,她是捕獲異常后,根據(jù)處理的具體環(huán)境程序員主動(dòng)編寫(xiě)的友好的提示消息框),記錄錯(cuò)誤日志,吞掉,做善后工作等等,那么出現(xiàn)異常時(shí)就要站在出現(xiàn)異常的模塊的立場(chǎng)上考慮一下我應(yīng)該選擇哪種處理方式呢?如果不能做出選擇就選擇不處理,即向上級(jí)報(bào)告。
舉個(gè)例子,函數(shù)Fun1是創(chuàng)建并返回一個(gè)活動(dòng)的數(shù)據(jù)連接對(duì)象的方法,他接受一個(gè)數(shù)據(jù)庫(kù)連接字符串,如果調(diào)用者(上級(jí))給他一個(gè)錯(cuò)誤的連接字符串,這時(shí)Fun1創(chuàng)建不了連接對(duì)象,產(chǎn)生了一個(gè)創(chuàng)建不了連接對(duì)象的異常,那么這時(shí)他應(yīng)該怎樣處理這個(gè)異常呢?彈出友好的消息框?說(shuō)什么友好,Fun1根本就不知道是什么原因使他接收到了錯(cuò)誤的連接字符串,彈一個(gè)“連接字符串有誤”,用戶肯定都有殺你的心,這個(gè)提示和用戶的業(yè)務(wù)邏輯有嘛關(guān)系!記錄錯(cuò)誤日志,這個(gè)還行,但是記錄下來(lái)的文字無(wú)非就是“連接字符串有誤,連接字符串是:SQL……”,好點(diǎn)的話,從連接字符串中看出了問(wèn)題,一般情況下還得根據(jù)代碼上下文去找問(wèn)題原因。
這個(gè)方式不是不行是不好。吞掉,哈哈開(kāi)什么玩笑,你既創(chuàng)建不了連接,又不吱一聲,想讓調(diào)用者瘋了呀,這個(gè)肯定不行。做善后工作,行,確實(shí)應(yīng)該清理一下現(xiàn)場(chǎng),免得浪費(fèi)資源,但是還是沒(méi)吱一聲,所以這個(gè)方式做的不徹底。沒(méi)招了,哈,其實(shí)上面的分析給我們指明了一條路,幫助我們祛除了錯(cuò)誤的選擇,這條路就是向上匯報(bào),或是不加任何出來(lái)代碼,或是記錄日志,做些善后,再重新將異常拋出。
那么什么時(shí)候就知道怎樣處理異常了,這就得看實(shí)際的情況和用戶的要求了,這句話等于沒(méi)說(shuō),就像其他的標(biāo)題醒目但給出的結(jié)論卻模棱兩可文章一樣,哈哈,這里可以給幾個(gè)建議,
1,一般地,底層模塊或是方法中不要處理異常,
2,編寫(xiě)公共模塊、DLL等是,不能采用彈出對(duì)話框等依賴(lài)于平臺(tái),框架的方式處理異常,
3,編寫(xiě)公共模塊、DLL等時(shí),必須在使用文檔中注明每個(gè)方法屬性可能拋出的異常。
4,永遠(yuǎn)不要寫(xiě) try 這樣的語(yǔ)句。
{ } catch(Exception) { o nothing } 自定義異常。明白了異常的原理和機(jī)制后,就可以自己定義異常了,這樣的實(shí)踐往往在編寫(xiě)控件、公共模塊、DLL等的時(shí)候,用錯(cuò)誤編號(hào)在網(wǎng)上搜索一下,能找出一大堆關(guān)于錯(cuò)誤代碼的描述。其中大多數(shù)是M(icro)S(oft)制定的,MS 從操作系統(tǒng)到各種各樣的框架都有對(duì)各種異常的編號(hào),對(duì)每種異常做出了詳細(xì)的定義,如果你還用過(guò)像Spread等商業(yè)控件,也可以看到他里邊的各種各樣的異常定義,也就是說(shuō)我們自己也可以定義異常,在必要的時(shí)候,這樣就可以讓自己寫(xiě)的模塊也加入到訓(xùn)練有素的員工隊(duì)伍中了。至于如何定義異常,具體的編成語(yǔ)言有具體的做法,比如C#中指定一異常一個(gè)從Exception繼承來(lái)的類(lèi),VB中異常是個(gè)全局變量等等,參見(jiàn)感興趣語(yǔ)言的語(yǔ)法指南就可以了。
對(duì)異常的重新認(rèn)識(shí),一直以來(lái)許多人都認(rèn)為異常是非常可怕的,可惡的,她是錯(cuò)誤的化身,她有惱人的彈出對(duì)話框,弄得用戶跟兇煞惡神似的哈哈,其實(shí)這些都是誤解,異常一直默默地忠實(shí)的報(bào)告著程序中出現(xiàn)的嚴(yán)重的不可回避的問(wèn)題,她為了程序、系統(tǒng)的正確性、嚴(yán)謹(jǐn)性呼喚你,希望你重視這些問(wèn)題,希望你用智慧解決這些問(wèn)題,她是多么的可愛(ài),又是多么的高尚,從來(lái)沒(méi)有因?yàn)閷?duì)她的誤解而放棄自己的使命……異常很重要,我們更好學(xué)會(huì)如何去使用她。
文章標(biāo)題:程序開(kāi)發(fā)中異常的理解及處理異常
轉(zhuǎn)載請(qǐng)注明來(lái)自:http://www.optiwork.cn/fblw/dianxin/dianzijishu/34026.html
攝影藝術(shù)領(lǐng)域AHCI期刊推薦《Phot...關(guān)注:105
Nature旗下多學(xué)科子刊Nature Com...關(guān)注:152
中小學(xué)教師值得了解,這些教育學(xué)...關(guān)注:47
2025年寫(xiě)管理學(xué)論文可以用的19個(gè)...關(guān)注:192
測(cè)繪領(lǐng)域科技核心期刊選擇 輕松拿...關(guān)注:64
及時(shí)開(kāi)論文檢索證明很重要關(guān)注:52
中國(guó)水產(chǎn)科學(xué)期刊是核心期刊嗎關(guān)注:54
國(guó)際出書(shū)需要了解的問(wèn)題解答關(guān)注:58
合著出書(shū)能否評(píng)職稱(chēng)?關(guān)注:48
電信學(xué)有哪些可投稿的SCI期刊,值...關(guān)注:66
通信工程行業(yè)論文選題關(guān)注:73
SCIE、ESCI、SSCI和AHCI期刊目錄...關(guān)注:120
評(píng)職稱(chēng)發(fā)論文好還是出書(shū)好關(guān)注:68
復(fù)印報(bào)刊資料重要轉(zhuǎn)載來(lái)源期刊(...關(guān)注:51
英文期刊審稿常見(jiàn)的論文狀態(tài)及其...關(guān)注:69
Web of Science 核心合集期刊評(píng)估...關(guān)注:58
電子信息論文范文
智能科學(xué)技術(shù)論文 廣播電視論文 光電技術(shù)論文 計(jì)算機(jī)信息管理論文 計(jì)算機(jī)網(wǎng)絡(luò)論文 計(jì)算機(jī)應(yīng)用論文 通信論文 信息安全論文 微電子應(yīng)用論文 電子技術(shù)論文 生物醫(yī)學(xué)工程論文 軟件開(kāi)發(fā)論文
期刊百科問(wèn)答
copyright © www.optiwork.cn, All Rights Reserved
搜論文知識(shí)網(wǎng) 冀ICP備15021333號(hào)-3