[原創(chuàng) - 尚學(xué)堂科技 - 馬士兵老師]
JAVA自學(xué)之路 五:問(wèn)題解決之道
[轉(zhuǎn)載請(qǐng)注明出處:http://www.bjsxt.com/zixue/zixuezhilu_3.html] 既然是學(xué)習(xí),就不可能不遇到問(wèn)題。
既然是自學(xué),就沒(méi)有方便的和老師探討的機(jī)會(huì)。
那么,遇到問(wèn)題之后,環(huán)境配不通,程序調(diào)不過(guò),運(yùn)行不正常,遇見(jiàn)這些惱人的問(wèn)題的時(shí)候,該怎么辦呢?
首先我要恭喜你,遇見(jiàn)問(wèn)題,意味著你又有漲經(jīng)驗(yàn)的機(jī)會(huì)了,每解決一個(gè)問(wèn)題,你的JAVA經(jīng)驗(yàn)值就應(yīng)該上升幾百點(diǎn),問(wèn)題遇到的越多,知識(shí)提升的越快。
但是總是解決不了也是很惱人的,怎么辦呢?
我一般要求我們的學(xué)生都是這樣來(lái)進(jìn)行的。
當(dāng)你遇到一個(gè)問(wèn)題的時(shí)候:
1:要仔細(xì)的觀察錯(cuò)誤的現(xiàn)象,是的,要仔細(xì)
有不少同學(xué)的手非常快,在編譯一個(gè)程序的時(shí)候,報(bào)了一大堆的錯(cuò)誤,掃了一眼之后就開(kāi)始盯著代碼一行一行的找,看清什么錯(cuò)誤了嗎?沒(méi)有!
有的時(shí)候安裝軟件出問(wèn)題了,一個(gè)對(duì)話框彈出來(lái)說(shuō)出錯(cuò)了,馬上舉手問(wèn)老師:“不得了了,出錯(cuò)了,出錯(cuò)了”。
“什么錯(cuò)誤?”
“還沒(méi)看呢?”
這都是典型的不上心的方法!請(qǐng)記住,學(xué)習(xí)編程并不是一件很容易的事情,自己首先要重視,要用心才可以。
在開(kāi)發(fā)中,仔細(xì)觀察出錯(cuò)信息,或者運(yùn)行不正常的信息,是你要做的第一件事。
讀清楚了,才能在以后的步驟中有的放矢,哭了半天,總要知道哭的是誰(shuí)才成。
這里又分三種情況:
A:錯(cuò)誤信息讀懂了,那么請(qǐng)進(jìn)入2步:要仔細(xì)思考問(wèn)題會(huì)出在哪些環(huán)節(jié)
B:沒(méi)讀懂,愣是一點(diǎn)沒(méi)看懂,進(jìn)入第4步吧:google
C:讀了個(gè)半懂,有些眉目但是不太能確定,第2步和第4步結(jié)合著來(lái)。
2:要仔細(xì)思考問(wèn)題會(huì)出在哪些環(huán)節(jié)(重要)
當(dāng)你讀懂了一個(gè)問(wèn)題之后,要好好的思考這個(gè)問(wèn)題可能會(huì)在哪些環(huán)節(jié)上出錯(cuò)。
一輛汽車(chē)從總成線上下來(lái),車(chē)門(mén)子關(guān)不上!
哪錯(cuò)了?你怎么查?
當(dāng)然是順著生產(chǎn)線一站一站的查下來(lái)。
程序也是一樣的,也是一系列語(yǔ)句完成后產(chǎn)生的結(jié)果。
寫(xiě)一個(gè)網(wǎng)絡(luò)程序,總是發(fā)現(xiàn)服務(wù)器端打印不出接收的數(shù)據(jù),有幾個(gè)環(huán)節(jié)會(huì)出錯(cuò)?
仔細(xì)分析這個(gè)現(xiàn)象的環(huán)節(jié):
客戶(hù)端產(chǎn)生數(shù)據(jù)->按“發(fā)送”按鈕->發(fā)送到服務(wù)器->服務(wù)器接收到后打印
這幾個(gè)環(huán)節(jié)都有可能會(huì)出錯(cuò):
有可能客戶(hù)端根本就沒(méi)產(chǎn)生數(shù)據(jù),有可能發(fā)送按鈕按下去后根本就沒(méi)發(fā)出去,或者發(fā)出去的不是你產(chǎn)生的東西,或者根本就沒(méi)連接網(wǎng)絡(luò),或者發(fā)送出去服務(wù)器沒(méi)有接收到,或者接收到之前就打印了等等等等。
學(xué)著去這樣仔細(xì)的分析程序的環(huán)節(jié)和這些環(huán)節(jié)可能會(huì)產(chǎn)生的問(wèn)題,你的經(jīng)驗(yàn)值定然會(huì)大幅度快速的提升,這樣做很累人,但是一件事情如果做下來(lái)一點(diǎn)都不累的話,這個(gè)東西還有價(jià)值嗎?
在網(wǎng)頁(yè)A輸入了一個(gè)人的名字,提交到B,首先存儲(chǔ)到數(shù)據(jù)庫(kù),然后再讀出來(lái),發(fā)現(xiàn)亂碼!怎么辦?
當(dāng)然是分析環(huán)節(jié):
客戶(hù)輸入->HTTP發(fā)送->B接收->存儲(chǔ)到數(shù)據(jù)庫(kù)->讀出->展現(xiàn)到網(wǎng)頁(yè)
每個(gè)環(huán)節(jié)都可能出問(wèn)題,怎么才能知道哪里出的問(wèn)題?繼續(xù)往下讀。
3:如何定位錯(cuò)誤(重要)
分析清楚有哪些環(huán)節(jié)之后,下一步就是定位到底什么環(huán)節(jié)出錯(cuò)了。
定位有以下三種辦法:
A 打印輸出,比如java的System.out.println(),比如js的alert(),這種辦法常用,必須掌握
B Debug,可以參考我們的視頻《坦克大戰(zhàn)》,詳細(xì)講了Eclipse的調(diào)試。
C 刪掉一部分調(diào)試一部分,也就是去掉一部分的功能,做簡(jiǎn)化,然后調(diào)試剩下的功能,JSP和JavaScript常用。可以參考我們的視頻《BBS》等
這些我說(shuō)的比較簡(jiǎn)單,詳細(xì)了解的話請(qǐng)關(guān)注以下我們的視頻吧,在近期會(huì)逐步的將一些知識(shí)點(diǎn)的視頻 進(jìn)行免費(fèi)的公布,http://www.bjsxt.com/download.html
4:如果還不行,google吧
還查不出來(lái)?恭喜你,你遇到的錯(cuò)誤是值得認(rèn)真對(duì)待的錯(cuò)誤,是會(huì)影響你學(xué)習(xí)生涯的錯(cuò)誤,問(wèn)一下google或者百度吧。照著下面的方法查查看。
一般來(lái)講,搜索引擎可以搜到各種知識(shí)點(diǎn),我曾經(jīng)跟同學(xué)們開(kāi)玩笑說(shuō):“學(xué)會(huì)了怎么google或者baidu,其實(shí)沒(méi)必要跟老師學(xué)了,自己全都搞懂了,尚學(xué)堂是沒(méi)必要來(lái)的。”當(dāng)然,只是玩笑,培訓(xùn)的作用有三個(gè):
A:系統(tǒng)化知識(shí)
B:真實(shí)項(xiàng)目鍛煉經(jīng)驗(yàn)
C:少走彎路,節(jié)省時(shí)間
不知不覺(jué)開(kāi)始做廣告了,請(qǐng)?jiān)彛幤湮恢\其事,總得為尚學(xué)堂說(shuō)點(diǎn)什么:)
言歸正傳,如何查搜索引擎?
先精后粗,首先先進(jìn)行盡量精確的查找,比如一個(gè)錯(cuò)誤,SocketException,你懷疑它是在connect()方法出的問(wèn)題,那么當(dāng)然是選這樣的關(guān)鍵詞java connect SocketException
先中后英,本著以解決問(wèn)題為主的想法,練習(xí)英文還是先放在一邊吧,首先應(yīng)該在中文網(wǎng)頁(yè)中查詢(xún),還不行的話,搜索英文的吧,最近的尚學(xué)堂課程中會(huì)帶大家閱讀英文的書(shū)籍。有很多東西就像一層窗戶(hù)紙,遠(yuǎn)看灰蒙蒙怪唬人的,你壯著膽子一捅,它就破了。閱讀英文的書(shū)籍就是如此,不是想象中的那么困難:)寧可在沙場(chǎng)上戰(zhàn)死,也不能被嚇?biāo)啦皇菃幔海?br />
信息篩選,搜索出來(lái)的結(jié)果不見(jiàn)得能夠完全匹配,建議大家多閱讀前幾頁(yè)的搜索結(jié)果,多打開(kāi)幾個(gè)網(wǎng)頁(yè)看看,不過(guò),我的經(jīng)驗(yàn)是超過(guò)3頁(yè)一般就沒(méi)意義了,所以超過(guò)3頁(yè)還沒(méi)有找到合適的答案,或許應(yīng)該調(diào)整一下關(guān)鍵詞,或者放粗整個(gè)搜索的結(jié)果了。
經(jīng)常的進(jìn)行知識(shí)難點(diǎn)的查詢(xún),如果一個(gè)問(wèn)題牽扯的面比較廣,就干脆到網(wǎng)上搜索一些相關(guān)的專(zhuān)題,比如“java 亂碼 mysql” “oracle 創(chuàng)建用戶(hù)”等等,如果有必要,不要犯懶,勤動(dòng)手寫(xiě)一些小小的測(cè)試程序,來(lái)弄明白知識(shí)點(diǎn)的細(xì)節(jié)。這也是漲知識(shí)的重要的途徑。
5:什么?還不行?那么就BBS吧
如果實(shí)在還不行,就到BBS上面問(wèn)一問(wèn)高手吧。
到哪個(gè)BBS上?
google或者百度不就行了么:)關(guān)鍵詞“java論壇”“java bbs”
然后在搜索結(jié)果里好好的看看那些活動(dòng)頻繁的論壇,以后就是你經(jīng)常光顧的地方了。http://community.csdn.net就很不錯(cuò)。
向別人提問(wèn)是非常需要技巧的!
曾經(jīng)有人問(wèn)我這樣的問(wèn)題:“請(qǐng)問(wèn)如何才能學(xué)好java呢?”
這個(gè)要求太泛泛了。
還有人給我一段代碼甚至jar包也寄過(guò)來(lái),然后說(shuō)老師的我的代碼中有個(gè)錯(cuò)誤您幫我查查:(
我沒(méi)有辦法去花大量的時(shí)間建立環(huán)境去調(diào)試一個(gè)還不知道存在不存在的錯(cuò)誤!
還有人在BBS上問(wèn)這樣的問(wèn)題:“是否有人能幫我完成一個(gè)完整聊天的程序?請(qǐng)幫我寫(xiě)一個(gè)登陸模塊吧!”
這個(gè)要求有些過(guò)分了,有人幫你做是你的運(yùn)氣,沒(méi)有人幫你是正常反應(yīng)。
向別人提問(wèn),應(yīng)該首先確定你已經(jīng)做了自己應(yīng)該做的事,簡(jiǎn)單說(shuō)是我前面列舉的1,2,3,4步你都作過(guò)了,然后再求助于人。不要沒(méi)有經(jīng)過(guò)認(rèn)真思考就草率的向別人提問(wèn),自己也不會(huì)有長(zhǎng)足進(jìn)步的。
那我該怎么樣向別人提問(wèn)呢?
在google或百度搜索《提問(wèn)的智慧》,你會(huì)找到答案。
在這里我給出一個(gè)鏈接http://community.csdn.net/IndexPage/SmartQuestion.aspx,磨刀不誤砍柴功,先花點(diǎn)時(shí)間去閱讀一下吧。
得到別人的回答,要懂得感恩。
不需要去寫(xiě)信感謝,不需要支付費(fèi)用,不需要那些花言巧語(yǔ),做到下面這一點(diǎn)就夠了:
當(dāng)你逐步成為高手的時(shí)候,要回答別人在論壇上提出的問(wèn)題,有時(shí)間有精力的前提之下!
6:還解決不了?問(wèn)老師吧,這個(gè)只能是在你參加了培訓(xùn)的前提下了。
7:還解決不了?天哪,是不是思路從根上就搞錯(cuò)了?寫(xiě)信給我,讓我也學(xué)習(xí)一下,共同進(jìn)步吧。mashibing2004@sina.com
posted on 2008-02-24 23:38
冰楓逸范 閱讀(124)
評(píng)論(0) 編輯 收藏