锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
緙栫▼鎬濇兂
浼樼紼嬪簭鍛?8澶у師鍒欙細http://sd.csdn.net/a/20110729/302424.html
嫻嬭瘯鐩稿叧
easyMock鏁欑▼錛?a >http://skydream.iteye.com/blog/829340
]]>
]]>
]]>
浜屻乂isitor Pattern
鐩殑錛氬皝瑁呬竴浜涙柦鍔犱簬鏌愮鏁版嵁緇撴瀯鍏冪礌涔嬩笂鐨勬搷浣溿?br /> UML鍥撅細
涓昏鍘熺悊錛?#8220;鍙嶄紶鐞?#8221;錛孍lement鏉isitor涔嬮棿浜岃疆璋冪敤錛岃皟鐢ㄨ繃紼嬩腑鐢╯inlge dispatch紜畾綾誨瀷
]]>
]]>
]]>
2錛夊綰跨▼錛屾妸鎺ュ彈璇鋒眰鍜屽鐞嗚姹傜殑綰跨▼鍒嗗紑錛屾帴鍙楀悗浜ょ粰 worker澶勭悊
3錛夌嚎紼嬫睜錛屾ц兘鏈浣籌紝鏈夋晥鍦伴槻姝㈣礋杞借繃閲嶏紝閲嶅鍒╃敤綰跨▼錛岃姹傚鏃訛紝璁╄姹傛帓闃熸帴鏀跺鐞?br />
4錛変富瑕佺敤socket鏉ラ氫俊錛?ServerSocket 鍜?Socket
鍏蜂綋鏂囩珷璇風湅錛歨ttp://tutorials.jenkov.com/java-multithreaded-servers/index.html
]]>
鍥炶皟鏄竴縐嶅弻鍚戣皟鐢ㄦā寮忥紝涔熷氨鏄錛岃璋冪敤鏂瑰湪鎺ュ彛琚皟鐢ㄦ椂涔熶細璋冪敤瀵規柟鐨勬帴鍙o紱
寮傛璋冪敤鏄竴縐嶇被浼兼秷鎭垨浜嬩歡鐨勬満鍒訛紝涓嶈繃瀹冪殑璋冪敤鏂瑰悜鍒氬ソ鐩稿弽錛屾帴鍙g殑鏈嶅姟鍦ㄦ敹鍒版煇縐嶈鎭垨鍙戠敓鏌愮浜嬩歡鏃訛紝浼氫富鍔ㄩ氱煡瀹㈡埛鏂癸紙鍗寵皟鐢ㄥ鎴鋒柟鐨勬帴鍙o級錛屽JMS錛?
闃呰鍏ㄦ枃
]]>
]]>
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
鏁扮粍綾?/span>Array鏄?/span>Java涓渶鍩烘湰鐨勪竴涓瓨鍌ㄧ粨鏋勩傚畠鐢ㄤ簬瀛樺偍涓緇勮繛緇殑瀵硅薄鎴栧熀鏈被鍨嬬殑鏁版嵁銆傚叾涓殑鍏冪礌鐨勭被鍨嬪繀欏葷浉鍚屻?/span>
Array鏄渶鏈夋晥鐜囩殑涓 縐嶏細
1銆佹晥鐜囬珮錛屼絾瀹歸噺鍥哄畾涓旀棤娉曞姩鎬佹敼鍙樸?/span> Array榪樻湁涓涓己鐐規槸錛屾棤娉曞垽鏂叾涓疄闄呭瓨鏈夊灝戝厓绱狅紝length鍙槸鍛婅瘔鎴戜滑Array鐨勫閲忋?/span>
2銆?/span>Java涓湁涓涓?/span>Arrays綾伙紝涓撻棬鐢ㄦ潵鎿嶄綔Array錛屾彁渚涙悳绱€佹帓搴忋佸鍒剁瓑闈欐佹柟娉曘?/span> equals()錛氭瘮杈冧袱涓?/span>Array鏄惁鐩哥瓑錛?/span>Array鎷ユ湁鐩稿悓鍏冪礌涓暟錛屼笖鎵鏈夊搴斿厓绱犱袱涓ょ浉絳夈?/span> fill()錛氬皢鍊煎~鍏?/span>Array涓?/span> sort()錛氱敤鏉ュArray榪涜鎺掑簭銆?/span> binarySearch()錛氬湪鎺掑ソ搴忕殑Array涓鎵懼厓绱犮?/span> System.arraycopy()錛?/span>Array鐨勫鍒躲?/span>
Java Collections Framework鎴愬憳涓昏鍖呮嫭涓ょ綾誨瀷錛屽嵆錛?/span>Collection鍜?/span>Map綾誨瀷銆?/span> 鍦?/span>Java涓彁渚涗簡Collection鍜?/span>Map鎺ュ彛銆傚叾涓?/span>List鍜?/span>Set緇ф壙浜?/span>Collection鎺ュ彛錛?/span>Vector銆?/span>ArrayList銆?/span> LinkedList涓変釜綾誨疄鐜?/span>List鎺ュ彛錛?/span>HashSet銆?/span>TreeSet瀹炵幇Set鎺ュ彛錛?/span>HashTable銆?/span>HashMap銆?/span> TreeMap瀹炵幇Map鎺ュ彛銆傜敱姝ゅ彲瑙侊紝Java涓敤8縐嶇被鍨嬬殑鍩烘湰鏁版嵁緇撴瀯鏉ュ疄鐜板叾Collections Framework錛涗笅闈㈠垎鍒繘琛屼粙緇嶃?/span>
Vector錛氬熀浜?/span>Array鐨?/span>List錛屾ц兘涔熷氨涓嶅彲鑳借秴瓚?/span>Array錛屽茍涓?/span>Vector鏄?/span>"sychronized"鐨?/span>錛岃繖涓篃鏄?/span>Vector鍜?/span>ArrayList鐨勫敮涓鐨勫尯鍒?/span>
ArrayList錛氬悓Vector涓鏍鋒槸涓涓熀浜?/span>Array鐨勶紝浣嗘槸涓嶅悓鐨勬槸ArrayList涓嶆槸鍚屾鐨?/span>銆傛墍浠ュ湪鎬ц兘涓婅姣?/span>Vector浼樿秺涓浜涳紝浣?/span> 鏄綋榪愯鍒板綰跨▼鐜涓椂錛屽彲闇瑕佽嚜宸卞湪綆$悊綰跨▼鐨勫悓姝ラ棶棰樸備粠鍏跺懡鍚嶄腑鍙互鐪嬪嚭瀹冩槸涓縐嶇被浼兼暟緇勭殑褰㈠紡榪涜瀛樺偍錛屽洜姝ゅ畠鐨勯殢鏈鴻闂熷害鏋佸揩銆?/span>
LinkedList錛?/span>LinkedList涓嶅悓浜庡墠闈袱縐?/span>List錛屽畠涓嶆槸鍩轟簬Array鐨勶紝鎵浠ヤ笉鍙?/span>Array鎬ц兘鐨勯檺鍒躲傚畠姣忎竴涓妭鐐癸紙Node錛?/span> 閮藉寘鍚袱鏂歸潰鐨勫唴瀹癸細
1銆佽妭鐐規湰韜殑鏁版嵁錛?/span>data錛夛紱
2銆佷笅涓涓妭鐐圭殑淇℃伅錛?/span>nextNode錛夈傛墍浠ュ綋瀵?/span>LinkedList鍋氭坊鍔狅紝鍒犻櫎鍔ㄤ綔鐨勬椂鍊?/span> 灝變笉鐢ㄥ儚鍩轟簬Array鐨?/span>List涓鏍鳳紝蹇呴』榪涜澶ч噺鐨勬暟鎹Щ鍔ㄣ傚彧瑕佹洿鏀?/span>nextNode鐨勭浉鍏充俊鎭氨鍙互瀹炵幇浜嗘墍浠ュ畠閫傚悎浜庤繘琛岄綣佽繘琛屾彃鍏ュ拰鍒犻櫎鎿?/span> 浣溿傝繖灝辨槸LinkedList鐨勪紭鍔褲?/span>Iterator鍙兘瀵瑰鍣ㄨ繘琛屽悜鍓嶉亶鍘嗭紝鑰?/span> ListIterator鍒欑戶鎵夸簡Iterator鐨勬濇兂錛屽茍鎻愪緵浜嗗List榪涜鍙屽悜閬嶅巻鐨勬柟娉曘?/span>
List鎬葷粨錛?/span>
1銆佹墍鏈夌殑List涓彧鑳藉綰沖崟涓笉鍚岀被鍨嬬殑瀵硅薄緇勬垚鐨勮〃錛岃屼笉鏄?/span>Key錛?/span>Value閿煎銆備緥濡傦細[ tom,1,c ]錛?/span>
2銆佹墍鏈夌殑List涓彲浠ユ湁鐩稿悓鐨勫厓绱狅紝渚嬪Vector涓彲浠ユ湁 [ tom,koo,too,koo ]錛?/span>
3銆佹墍鏈夌殑List涓彲浠ユ湁null鍏冪礌錛屼緥濡?/span>[ tom,null,1 ]錛?/span>
4銆佸熀浜?/span>Array鐨?/span>List錛?/span>Vector錛?/span>ArrayList錛夐傚悎鏌ヨ錛岃?/span>LinkedList錛堥摼琛級閫傚悎娣誨姞錛屽垹闄ゆ搷浣?/span>銆?/span>
HashSet錛氳櫧鐒?/span>Set鍚?/span>List閮藉疄鐜頒簡Collection鎺ュ彛錛屼絾鏄粬浠殑瀹炵幇鏂瑰紡鍗村ぇ涓嶄竴鏍楓?/span>List鍩烘湰涓婇兘鏄互Array涓哄熀紜銆備絾鏄?/span> Set鍒欐槸鍦?/span>HashMap鐨勫熀紜涓婃潵瀹炵幇鐨勶紝榪欎釜灝辨槸Set鍜?/span>List鐨勬牴鏈尯鍒?/span>HashSet鐨勫瓨鍌ㄦ柟寮忔槸鎶?/span>HashMap涓殑Key浣滀負Set鐨?/span> 瀵瑰簲瀛樺偍欏癸紝榪欎篃鏄負浠涔堝湪Set涓笉鑳藉儚鍦?/span>List涓竴鏍鋒湁閲嶅鐨勯」鐨勬牴鏈師鍥狅紝鍥犱負HashMap鐨?/span>key鏄笉鑳芥湁閲嶅鐨勩?/span>HashSet鑳藉揩閫熷畾浣?/span> 涓涓厓绱狅紝浣嗘槸鏀懼埌HashSet涓殑瀵硅薄闇瑕佸疄鐜?/span>hashCode()鏂規硶0銆?/span>
TreeSet鍒欏皢鏀懼叆鍏朵腑鐨勫厓绱犳寜搴忓瓨鏀撅紝榪欏氨瑕佹眰浣犳斁鍏ュ叾涓殑瀵硅薄鏄彲鎺掑簭鐨勶紝榪欏氨鐢ㄥ埌浜嗛泦鍚堟鏋舵彁渚涚殑鍙﹀涓や釜瀹炵敤綾?/span>Comparable鍜?/span> Comparator銆備竴涓被鏄彲鎺掑簭鐨勶紝瀹冨氨搴旇瀹炵幇Comparable鎺ュ彛銆傛湁鏃跺涓被鍏鋒湁鐩稿悓鐨勬帓搴忕畻娉曪紝閭e氨涓嶉渶瑕侀噸澶嶅畾涔夌浉鍚岀殑鎺掑簭綆楁硶錛屽彧瑕佸疄鐜?/span>Comparator鎺ュ彛鍗沖彲銆?/span>TreeSet鏄?/span>SortedSet鐨勫瓙綾伙紝瀹冧笉鍚屼簬HashSet鐨勬牴鏈氨鏄?/span>TreeSet鏄湁搴忕殑銆傚畠鏄氳繃SortedMap鏉ュ疄鐜扮殑銆?/span>
Set鎬葷粨錛?/span>
1銆?/span>Set瀹炵幇鐨勫熀紜鏄?/span>Map錛?/span>HashMap錛夛紱
2銆?/span>Set涓殑鍏冪礌鏄笉鑳介噸澶嶇殑錛屽鏋滀嬌鐢?/span>add(Object obj)鏂規硶娣誨姞宸茬粡瀛樺湪鐨勫璞★紝鍒欎細瑕嗙洊鍓嶉潰鐨勫璞★紱 Set閲岀殑鍏冪礌鏄笉鑳介噸澶嶇殑錛岄偅涔堢敤浠涔堟柟娉曟潵鍖哄垎閲嶅涓庡惁鍛?/span>? 鏄敤==榪樻槸equals()? 瀹冧滑鏈変綍鍖哄埆? Set閲岀殑鍏冪礌鏄笉鑳介噸澶嶇殑錛屽嵆涓嶈兘鍖呭惈涓や釜鍏冪礌e1銆?/span>e2錛?/span>e1.equals錛?/span>e2錛夛級銆傞偅涔堢敤iterator()鏂規硶鏉ュ尯鍒嗛噸澶嶄笌鍚︺?/span> equals()鏄垽璇諱袱涓?/span>Set鏄惁鐩哥瓑銆?/span>==鏂規硶鍐沖畾寮曠敤鍊?/span>(鍙ユ焺)鏄惁鎸囧悜鍚屼竴瀵硅薄銆?/span>
HashMap銆?/span>TreeMap銆?/span>Hashtable錛?/span>
1銆?/span>HashMap涔熺敤鍒頒簡鍝堝笇鐮佺殑綆楁硶錛屼互渚垮揩閫熸煡鎵句竴涓敭錛?/span>TreeMap鍒欐槸瀵歸敭鎸夊簭瀛樻斁錛屽洜姝ゅ畠鏈変竴浜涙墿灞曠殑鏂規硶錛屾瘮濡?/span> firstKey(),lastKey()絳夈?/span>
2銆?/span>Hashtable錛氫笉鍏佽絀猴紙null錛夐敭錛?/span>key錛夋垨鍊鹼紙value錛夛紝Hashtable鐨勬柟娉曟槸Synchronize鐨勶紝鍦ㄥ涓嚎紼嬭闂?/span> Hashtable鏃訛紝涓嶉渶瑕佽嚜宸變負瀹冪殑鏂規硶瀹炵幇鍚屾錛岃?/span>HashMap 灝卞繀欏諱負涔嬫彁渚涘鍚屾銆?/span> Hashtable鍜?/span>HashMap閲囩敤鐨?/span>hash/rehash綆楁硶閮藉ぇ姒備竴鏍鳳紝鎵浠ユц兘涓嶄細鏈夊緢澶х殑宸紓銆?/span>
3銆?/span>HashMap鍜?/span>Hashtable鐨勫尯鍒細HashMap鏄?/span>Hashtable(綰跨▼妗堜緥鐨?/span>)鐨勮交閲忕駭瀹炵幇錛堥潪綰跨▼瀹夊叏鐨勫疄鐜幫級錛屼粬浠兘瀹屾垚浜?/span>Map鎺ュ彛銆備富瑕佸尯鍒湪浜?/span>HashMap鍏佽絀猴紙null錛夐敭錛?/span>key錛夋垨鍊鹼紙value錛?/span>,闈炲悓姝ワ紝鐢變簬闈炵嚎紼嬪畨鍏紝鏁堢巼涓婂彲鑳介珮浜?/span>Hashtable銆?/span>
Map鎬葷粨錛?/span>
鏄竴縐嶆妸閿璞″拰鍊煎璞¤繘琛屽叧鑱旂殑瀹瑰櫒錛?/span>Map鏈変袱縐嶆瘮杈冨父鐢ㄧ殑瀹炵幇錛?/span> HashTable銆?/span>HashMap鍜?/span>TreeMap銆?/span>
鍒涘緩妯″紡 |
緇撴瀯妯″紡 |
琛屼負妯″紡 |
綆鍗曞伐鍘傛ā寮?/span> |
閫傞厤鍣ㄦā寮?/span> |
涓嶅彉妯″紡 |
宸ュ巶鏂規硶妯″紡 |
緙虹渷閫傞厤妯″紡 |
絳栫暐妯″紡 |
鎶借薄宸ュ巶妯″紡 |
鍚堟垚妯″紡 |
妯$増鏂規硶妯″紡 |
鍗曚緥妯″紡 |
瑁呴グ妯″紡 |
瑙傚療鑰呮ā寮?/span> |
澶氫緥妯″紡 |
浠g悊妯″紡 |
榪唬瀛愭ā寮?/span> |
寤洪犳ā寮?/span> |
浜厓妯″紡 |
璐d換閾炬ā寮?/span> |
鍘熷妯″瀷妯″紡 |
闂ㄩ潰妯″紡 |
鍛戒護妯″紡 |
妗ユ妯″紡 |
澶囧繕褰曟ā寮?/span> |
|
鐘舵佹ā寮?/span> |
||
璁塊棶鑰呮ā寮?/span> |
||
瑙i噴鍣ㄦā寮?/span> |
||
璋冨仠鑰呮ā寮?/span> |
妯″紡 |
瀹氫箟 |
鎻忚堪 |
瑁呴グ鑰?/span> |
鍔ㄦ佸湴灝嗚矗浠婚檮鍔犲埌瀵硅薄涓娿傝嫢瑕佹墿灞曞姛鑳斤紝瑁呴グ鑰呮彁渚涗簡姣旂戶鎵挎洿鏈夊脊鎬х殑鏇夸唬鏂規 |
鍖呰涓涓璞★紝浠ユ彁渚涙柊鐨勮涓?/span> |
鐘舵?/span> |
鍏佽瀵硅薄鍦ㄥ唴閮ㄧ姸鎬佹敼鍙樻椂鏀瑰彉瀹冪殑琛屼負錛屽璞$湅璧鋒潵濂藉儚淇敼浜嗗畠鐨勭被 |
灝佽浜嗗熀鏈姸鎬佺殑琛屼負錛屽茍浣跨敤濮旀墭鍦ㄨ涓轟箣闂村垏鎹?/span> |
榪唬鍣?/span> |
鎻愪緵涓縐嶆柟娉曢『搴忚闂竴涓仛鍚堝璞′腑鐨勫悇涓厓绱狅紝鑰屽張涓嶆毚闇插叾鍐呴儴鐨勮〃紺?/span> |
鍦ㄥ璞$殑闆嗗悎涔嬩腑娓歌蛋錛岃屼笉鏆撮湶闆嗗悎鐨勫疄鐜?/span> |
澶栬錛堥棬闈級 |
鎻愪緵涓涓粺涓鐨勬帴鍙o紝鐢ㄦ潵璁塊棶瀛愮郴緇熶腑鐨勪竴緹ゆ帴鍙c傚瑙傚畾涔変簡涓涓珮灞傛帴鍙o紝璁╁瓙緋葷粺鏇村瀹規槗浣跨敤 |
綆鍖栦竴緹ょ被鐨勬帴鍙?/span> |
絳栫暐 |
瀹氫箟綆楁硶鏃忥紝鍒嗗埆灝佽璧鋒潵錛岃瀹冧滑涔嬮棿鍙互浜掔浉鏇挎崲錛屾妯″紡璁╃畻娉曠殑鍙樺寲鐙珛浜庝嬌鐢ㄧ畻娉曠殑瀹㈡埛 |
灝佽鍙互浜掓崲鐨勮涓猴紝騫朵嬌鐢ㄥ鎵樻潵鍐沖畾浣跨敤閭d竴縐?/span> |
浠g悊 |
涓哄彟涓涓璞℃彁渚涗竴涓浛韜垨鐐逛綅絎︿互璁塊棶榪欎釜瀵硅薄 |
鍖呰瀵硅薄錛屼互鎺у埗瀵規瀵硅薄鐨勮闂?/span> |
宸ュ巶鏂規硶 |
瀹氫箟浜嗕竴涓垱寤哄璞$殑鎺ュ彛錛屼絾鐢卞瓙綾誨喅瀹氳瀹炰緥鍖栫殑綾繪槸鍝竴涓傚伐鍘傛柟娉曡綾繪妸瀹炰緥鍖栨帹榪熷埌瀛愮被 |
鐢卞瓙綾誨喅瀹氳鍒涘緩鏄叿浣撶被鏄摢涓涓?/span> |
鎶借薄宸ュ巶 |
鎻愪緵涓涓帴鍙o紝鐢ㄤ簬鍒涘緩鐩稿叧鎴栦緷璧栧璞$殑瀹舵棌錛岃屼笉闇瑕佹槑紜寚瀹氬叿浣撶被 |
鍏佽瀹㈡埛鍒涘緩瀵硅薄鐨勫鏃忥紝鑰屾棤闇鎸囧畾浠栦滑鐨勫叿浣撶被 |
閫傞厤鍣?/span> |
灝嗕竴涓被鐨勬帴鍙o紝杞崲鎴愬鎴鋒湡鏈涘彟涓涓帴鍙c傞傞厤鍣ㄨ鍘熸潵涓嶅吋瀹圭殑綾誨彲浠ュ悎浣滄棤闂?/span> |
灝佽瀵硅薄錛屽茍鎻愪緵涓嶅悓鐨勬帴鍙?/span> |
瑙傚療鑰?/span> |
鍦ㄥ璞′箣闂村畾涔変竴瀵瑰鐨勪緷璧栵紝榪欐牱涓鏉ワ紝褰撲竴涓璞℃敼鍙樻椂錛屼緷璧栧畠鐨勫璞¢兘浼氭敹鍒伴氱煡騫惰嚜鍔ㄦ洿鏂?/span> |
璁╁璞¤兘澶熷湪鐘舵佹敼鍙樻椂琚氱煡 |
妯℃澘鏂規硶 |
鍦ㄤ竴涓柟娉曚腑瀹氫箟涓涓畻娉曠殑楠ㄦ灦錛岃屽皢涓浜涙楠ゅ歡榪熷埌瀛愮被涓傛ā鏉挎柟娉曚嬌寰楀瓙綾誨彲浠ュ湪涓嶆敼鍙樼畻娉曠粨鏋勭殑鎯呭喌涓嬶紝閲嶆柊瀹氫箟綆楁硶涓殑鏌愪簺姝ラ |
鐢卞瓙綾誨喅瀹氬浣曞疄鐜頒竴涓畻娉曚腑鐨勬楠?/span> |
緇勫悎 |
鍏佽浣犲皢瀵硅薄緇勬垚鏍戠粨鏋勬潵琛ㄧ幇“鏁翠綋/閮ㄥ垎”鐨勫眰嬈$粨鏋勩傜粍鍚堣兘璁╁鎴蜂互涓鑷寸殑鏂瑰紡澶勭悊涓埆瀵硅薄鍜屽璞$粍鍚?/span> |
瀹㈡埛鐢ㄤ竴鑷寸殑鏂瑰紡澶勭悊瀵硅薄闆嗗悎鍜屽崟涓璞?/span> |
鍗曚歡錛堝崟浣擄級 |
紜繚涓涓被鍙湁涓涓疄渚嬶紝騫舵彁渚涘叏灞璁塊棶鐐?/span> |
紜繚鍙湁涓涓璞¤鍒涘緩 |
鍛戒護 |
灝嗚姹傚皝瑁呮垚瀵硅薄錛岃繖鍙互璁╀綘浣跨敤涓嶅悓鐨勮姹傘侀槦鍒楋紝鎴栬呮棩蹇楄姹傛潵鍙傛暟鍖栧叾瀹冨璞°傚懡浠ゆā寮忎篃鍙互鏀寔鎾ら攢鎿嶄綔 |
灝佽璇鋒眰涓哄璞?/span> |
涓銆佸湪鍗曞厓嫻嬭瘯棰嗗煙閲岋紝JUnit鍙互璇存槸鐜嬭咃紝瀹冧笉浣嗙簿鑷達紝鑰屼笖浣跨敤鏂逛究銆傛渶鍚庢湁浜涙椂闂達紝鎶奐Unit婧愮爜璇昏錛岄『渚垮涔犱笅璁捐妯″紡 錛氾級
浜屻佸弬鑰冩枃绔?br />
鍦ㄦ繁鍏ョ湅浠g爜涔嬪墠錛屽厛鐪嬩笅闈㈢殑鏂囩珷錛屽JUnit鏈変竴涓熀鏈殑浜嗚В鍚庯紝鐪嬩唬鐮佷細鏇存湁鐩殑鎬с?br />
JUnit瀹樻柟緗戠珯錛?a >http://www.junit.org/
鍒嗘瀽 JUnit 妗嗘灦婧愪唬鐮侊細 http://www.ibm.com/developerworks/cn/java/j-lo-junit-src/
JUnit A cook's tour: http://junit.sourceforge.net/doc/cookstour/cookstour.htm
涓夈佹牳蹇冩灦鏋?br />
鎴戝垎鏋愮殑婧愮爜鐨勭増鏈槸JUnit 3.8.2錛岃繖涓増鏈浉瀵圭畝鐣ワ紝鎶婃牳蹇冩濇兂琛ㄧ幇鍑烘潵浜嗭紝娌℃湁4.X鐗堟湰閭d箞澶氶檮鍔犵殑鍔熻兘
JUnit鏄竴涓ā寮忓瘑闆嗗瀷鐨勬鏋訛紝涓昏鐢ㄧ粍鍚堟ā寮忋佹ā鏍鋒柟娉曘佽瀵熻呮ā寮忋佸弬鏁版敹闆嗘柟娉曘佸懡浠ゆā寮忋佽楗拌呮ā寮忓拰閫傞厤鍣ㄦā寮忋傚叾涓牳蹇冩槸 鍓嶄笁縐?br />
鏍稿績綾諱箣闂寸殑鍏崇郴
Test銆乀estCase鍜孴estSuit鏋勬垚浜嗘祴璇曟鏋剁殑鍩虹錛屽畠浠敤composite妯″紡緇勫悎鍦ㄤ竴璧鳳紝浣垮緱瀹㈡埛绔彲浠ュ皢瀵硅薄鐨勯泦鍚堜互鍙婁釜鍒殑瀵硅薄(TestCase)涓瑙嗗悓浠?TestRusult鐢ㄦ潵淇濆瓨嫻嬭瘯緇撴灉錛屽拰TestListner緇勬垚observer妯″紡錛屾敮鎸佹枃鏈晫闈€佸浘褰㈢晫闈㈠拰 Eclipse 闆嗘垚緇勪歡涓夌鐩戝惉鍣?/font>
鍜孞Unit A cook's tour涓彁鍒扮殑妯″紡鍥懼緢鐩鎬技
綾諱笌綾諱箣闂寸殑鍏崇郴鍦ㄦ灝變笉浣滆В閲婁簡錛屽彲浠ョ湅鐪嬪弬鑰冩枃绔犮傛湁鍏磋叮鐨勬湅鍙嬶紝嬈㈣繋涓璧瘋璁?錛氾級
澶氱敤緇勫悎錛屽皯鐢ㄧ戶鎵?/span>
閽堝鎺ュ彛緙栫▼錛屼笉閽堝瀹炵幇緙栫▼
涓轟氦浜掑璞′箣闂寸殑鏉捐﹀悎璁捐鑰屽姫鍔?/span>
綾誨簲璇ュ鎵╁睍寮鏀撅紝瀵逛慨鏀瑰叧闂?/span>
鍙拰鏈嬪弸浜よ皥
鍒壘鎴戯紝鎴戜細鎵句綘
綾誨簲璇ュ彧鏈変竴涓敼鍙樼殑鐞嗙敱
38銆佸彧閽堝涓嶆甯哥殑鏉′歡浣跨敤寮傚父
寮傚父鍙簲璇ヨ鐢ㄤ簬涓嶆甯哥殑鏉′歡錛屽畠浠案榪滀笉搴旇琚敤浜庝笉姝e父鐨勬潯浠?br />
璁捐API鍚ず錛氫竴涓壇濂界殑API涓嶅簲璇ュ己榪畠鐨勫鎴蜂負浜嗘甯哥殑鎺у埗嫻佽屼嬌鐢ㄥ紓甯搞傚浜庤竟鐣岀殑鍒ゆ柇甯哥敤鐨勬湁涓ょ鏂規硶錛氱姸鎬佹祴璇曟柟娉曞拰鍙璇嗗埆鐨勮繑鍥炲?/p>
40銆佸浜庡彲浠ユ仮澶嶇殑鏉′歡浣跨敤琚鏌ョ殑寮傚父錛屽浜庣▼搴忛敊璇嬌鐢ㄨ繍琛屾椂寮傚父
Thowable錛堝彲鎶涘嚭寮傚父錛夋湁涓夌緇撴瀯錛氳媯鏌ョ殑寮傚父(checked exception)銆佽繍琛屾椂寮傚父錛坮un-time exception)鍜岄敊璇?error)
濡傛灉鏈熸湜璋冪敤鑰呰兘澶熸仮澶嶏紝閭d箞錛屽浜庤繖鏍風殑鏉′歡搴旇浣跨敤琚鏌ョ殑寮傚父
榪愯鏃跺紓甯稿拰閿欒錛屼笉闇瑕佷篃涓嶅簲璇ユ槸琚崟鑾風殑鎶涘嚭鐗?br />
鐢ㄨ繍琛屾椂寮傚父鏉ユ寚鏄庣▼搴忛敊璇?br />
瀵逛簬琚鏌ョ殑寮傚父錛屾彁渚涗竴浜涜緟鍔╂柟娉曟槸闈炲父閲嶈鐨勶紝閫氳繃榪欎簺鏂規硶錛岃皟鐢ㄨ呭彲浠ヨ幏寰椾竴浜涙湁鍔╀簬鎭㈠鐨勪俊鎭?/p>
41銆侀伩鍏嶄笉蹇呰鍦頒嬌鐢ㄨ媯鏌ョ殑寮傚父
42銆佸敖閲忎嬌鐢ㄦ爣鍑嗗紓甯?br />
43銆佹姏鍑虹殑寮傚父瑕侀傚悎浜庣浉搴旂殑鎶借薄
楂樺眰鐨勫疄鐜板簲璇ユ崟鑾蜂綆灞傜殑寮傚父錛屽悓鏃跺鍑轟竴涓彲浠ユ寜鐓ч珮灞傛娊璞¤繘琛岃В閲婄殑---寮傚父杞瘧
浣庡眰鐨勫紓甯稿浜庤皟璇曡寮傚父琚嫧鍑虹殑鎯呭艦闈炲父鏈夊府鍔╃殑璇濓紝鍙互浣跨敤寮傚父閾炬帴銆傚嵆浣庡眰鐨勫紓甯歌楂樺眰鐨勫紓甯鎬繚瀛樿搗鏉ワ紝騫朵笖楂樺眰鐨勫紓甯告彁渚涗竴涓叕鏈夌殑璁塊棶鏂規硶鏉ヨ幏寰椾綆灞傚紓甯?/p>
44銆佹瘡涓紓甯哥殑鎶涘嚭閮藉繀欏繪湁鏂囨。
45銆佸湪緇嗚妭娑堟伅涓寘鍚け璐?-鎹曡幏淇℃伅
涓轟簡鎹曡幏澶辮觸錛屼竴涓紓甯哥殑鐨勫瓧絎︿覆琛ㄧず搴旇鍖呭惈鎵鏈?#8220;瀵瑰紓甯告湁璐$尞”鐨勫弬鏁板拰鍩熺殑鍊?
鍦ㄥ紓甯告瀯閫犲嚱鏁頒腑浠ュ弬鏁板艦寮忓紩鍏ヨ繖浜涗俊鎭?/p>
46銆佸姫鍔涗嬌澶辮觸淇濇寔鍘熷瓙鎬?br />
涓涓け璐ユ柟娉曡皟鐢ㄥ簲璇ヤ嬌鐢ㄥ璞′繚鎸?#8220;瀹冨湪琚皟鐢ㄤ箣鍓嶇殑鐘舵?#8221; ---failure atomic
鍑犵瑙e喅鏂規硶錛氬湪鎵ц鎿嶄綔涔嬪墠媯鏌ュ弬鏁扮殑鏈夋晥鎬?br />
璋冩暣璁$畻鏈鴻繃紼嬶紝浣垮緱浠諱綍鍙兘浼氬け璐ョ殑璁$畻閮ㄥ垎鍙戠敓鍦ㄥ璞$姸鎬佽淇敼涔嬪墠
緙栧啓涓孌墊仮澶嶄唬鐮?br />
鍦ㄥ璞′笂涓存椂閮芥嫹璐濅竴浠斤紝褰撴搷浣滃畬鎴愪箣鍚庢妸涓存椂鎷瘋礉涓殑緇撴灉澶嶅埗緇欏師鏉ョ殑瀵硅薄銆傚錛欳ollections.sort
47銆佷笉瑕佸拷鐣ュ紓甯?br />
鍐欎笂try catch鍧?/p>