鍏寮傚父澶勭悊鐨勯檵涔?
銆銆浣犺寰楄嚜宸辨槸涓涓狫ava涓撳鍚楋紵鏄惁鑲畾鑷繁宸茬粡鍏ㄩ潰鎺屾彙浜咼ava鐨勫紓甯稿鐞嗘満鍒訛紵鍦ㄤ笅闈㈣繖孌典唬鐮佷腑錛屼綘鑳藉榪呴熸壘鍑哄紓甯稿鐞嗙殑鍏釜闂鍚楋紵
銆銆1 OutputStreamWriter out = ...
銆銆2 java.sql.Connection conn = ...
銆銆3 try { // 鈶?
銆銆4 銆Statement stat = conn.createStatement();
銆銆5 銆ResultSet rs = stat.executeQuery(
銆銆6 銆銆"select uid, name from user");
銆銆7 銆while (rs.next())
銆銆8 銆{
銆銆9 銆銆out.println("ID錛? + rs.getString("uid") // 鈶?
銆銆10 銆銆銆"錛屽鍚嶏細" + rs.getString("name"));
銆銆11 銆}
銆銆12 銆conn.close(); // 鈶?
銆銆13 銆out.close();
銆銆14 }
銆銆15 catch(Exception ex) // 鈶?
銆銆16 {
銆銆17 銆ex.printStackTrace(); //鈶達紝鈶?
銆銆18 }
銆銆浣滀負涓涓狫ava紼嬪簭鍛橈紝浣犺嚦灝戝簲璇ヨ兘澶熸壘鍑轟袱涓棶棰樸備絾鏄紝濡傛灉浣犱笉鑳芥壘鍑哄叏閮ㄥ叚涓棶棰橈紝璇風戶緇槄璇繪湰鏂囥?
銆銆鏈枃璁ㄨ鐨勪笉鏄疛ava寮傚父澶勭悊鐨勪竴鑸у師鍒欙紝鍥犱負榪欎簺鍘熷垯宸茬粡琚ぇ澶氭暟浜虹啛鐭ャ傛垜浠鍋氱殑鏄垎鏋愬悇縐嶅彲縐頒負鈥滃弽渚嬧濓紙anti-pattern錛夌殑榪濊儗浼樼緙栫爜瑙勮寖鐨勫父瑙佸潖涔犳儻錛屽府鍔╄鑰呯啛鎮夎繖浜涘吀鍨嬬殑鍙嶉潰渚嬪瓙錛屼粠鑰岃兘澶熷湪瀹為檯宸ヤ綔涓晱閿愬湴瀵熻鍜岄伩鍏嶈繖浜涢棶棰樸?
銆銆鍙嶄緥涔嬩竴錛氫涪寮冨紓甯?
銆銆浠g爜錛?5琛?18琛屻?
銆銆榪欐浠g爜鎹曡幏浜嗗紓甯稿嵈涓嶄綔浠諱綍澶勭悊錛屽彲浠ョ畻寰椾笂Java緙栫▼涓殑鏉鎵嬨備粠闂鍑虹幇鐨勯綣佺▼搴﹀拰紲稿紼嬪害鏉ョ湅錛屽畠涔熻鍙互鍜孋/C++紼嬪簭鐨勪竴涓伓鍚嶈繙鎾殑闂鐩告彁騫惰??涓嶆鏌ョ紦鍐插尯鏄惁宸叉弧銆傚鏋滀綘鐪嬪埌浜嗚繖縐嶄涪寮冿紙鑰屼笉鏄姏鍑猴級寮傚父鐨勬儏鍐碉紝鍙互鐧懼垎涔嬩節鍗佷節鍦拌偗瀹氫唬鐮佸瓨鍦ㄩ棶棰橈紙鍦ㄦ瀬灝戞暟鎯呭喌涓嬶紝榪欐浠g爜鏈夊瓨鍦ㄧ殑鐞嗙敱錛屼絾鏈濂藉姞涓婂畬鏁寸殑娉ㄩ噴錛屼互鍏嶅紩璧峰埆浜鴻瑙o級銆?
銆銆榪欐浠g爜鐨勯敊璇湪浜庯紝寮傚父錛堝嚑涔庯級鎬繪槸鎰忓懗鐫鏌愪簺浜嬫儏涓嶅鍔蹭簡錛屾垨鑰呰鑷沖皯鍙戠敓浜嗘煇浜涗笉瀵誨父鐨勪簨鎯咃紝鎴戜滑涓嶅簲璇ュ紼嬪簭鍙戝嚭鐨勬眰鏁戜俊鍙蜂繚鎸佹矇榛樺拰鏃犲姩浜庤》銆傝皟鐢ㄤ竴涓媝rintStackTrace綆椾笉涓娾滃鐞嗗紓甯糕濄備笉閿欙紝璋冪敤printStackTrace瀵硅皟璇曠▼搴忔湁甯姪錛屼絾紼嬪簭璋冭瘯闃舵緇撴潫涔嬪悗錛宲rintStackTrace灝變笉搴斿啀鍦ㄥ紓甯稿鐞嗘ā鍧椾腑鎷呰礋涓昏璐d換浜嗐?
銆銆涓㈠純寮傚父鐨勬儏褰㈤潪甯告櫘閬嶃傛墦寮JDK鐨凾hreadDeath綾葷殑鏂囨。錛屽彲浠ョ湅鍒頒笅闈㈣繖孌佃鏄庯細鈥滅壒鍒湴錛岃櫧鐒跺嚭鐜癟hreadDeath鏄竴縐嶁樻甯哥殑鎯呭艦鈥欙紝浣員hreadDeath綾繪槸Error鑰屼笉鏄疎xception鐨勫瓙綾伙紝鍥犱負璁稿搴旂敤浼氭崟鑾鋒墍鏈夌殑Exception鐒跺悗涓㈠純瀹冧笉鍐嶇悊鐫傗濊繖孌佃瘽鐨勬剰鎬濇槸錛岃櫧鐒禩hreadDeath浠h〃鐨勬槸涓縐嶆櫘閫氱殑闂錛屼絾閴翠簬璁稿搴旂敤浼氳瘯鍥炬崟鑾鋒墍鏈夊紓甯哥劧鍚庝笉浜堜互閫傚綋鐨勫鐞嗭紝鎵浠DK鎶奣hreadDeath瀹氫箟鎴愪簡Error鐨勫瓙綾伙紝鍥犱負Error綾諱唬琛ㄧ殑鏄竴鑸殑搴旂敤涓嶅簲璇ュ幓鎹曡幏鐨勪弗閲嶉棶棰樸傚彲瑙侊紝涓㈠純寮傚父榪欎竴鍧忎範鎯槸濡傛甯歌錛屽畠鐢氳嚦宸茬粡褰卞搷鍒頒簡Java鏈韓鐨勮璁°?
銆銆閭d箞錛屽簲璇ユ庢牱鏀規鍛紵涓昏鏈夊洓涓夋嫨錛?
銆銆1銆佸鐞嗗紓甯搞傞拡瀵硅寮傚父閲囧彇涓浜涜鍔紝渚嬪淇闂銆佹彁閱掓煇涓漢鎴栬繘琛屽叾浠栦竴浜涘鐞嗭紝瑕佹牴鎹叿浣撶殑鎯呭艦紜畾搴旇閲囧彇鐨勫姩浣溿傚啀嬈¤鏄庯紝璋冪敤printStackTrace綆椾笉涓婂凡緇忊滃鐞嗗ソ浜嗗紓甯糕濄?
銆銆2銆侀噸鏂版姏鍑哄紓甯搞傚鐞嗗紓甯哥殑浠g爜鍦ㄥ垎鏋愬紓甯鎬箣鍚庯紝璁や負鑷繁涓嶈兘澶勭悊瀹冿紝閲嶆柊鎶涘嚭寮傚父涔熶笉澶變負涓縐嶉夋嫨銆?
銆銆3銆佹妸璇ュ紓甯歌漿鎹㈡垚鍙︿竴縐嶅紓甯搞傚ぇ澶氭暟鎯呭喌涓嬶紝榪欐槸鎸囨妸涓涓綆綰х殑寮傚父杞崲鎴愬簲鐢ㄧ駭鐨勫紓甯革紙鍏跺惈涔夋洿瀹規槗琚敤鎴蜂簡瑙g殑寮傚父錛夈?
銆銆4銆佷笉瑕佹崟鑾峰紓甯搞?
銆銆緇撹涓錛氭棦鐒舵崟鑾蜂簡寮傚父錛屽氨瑕佸瀹冭繘琛岄傚綋鐨勫鐞嗐備笉瑕佹崟鑾峰紓甯鎬箣鍚庡張鎶婂畠涓㈠純錛屼笉浜堢悊鐫?
銆銆鍙嶄緥涔嬩簩錛氫笉鎸囧畾鍏蜂綋鐨勫紓甯?
銆銆浠g爜錛?5琛屻?
銆銆璁稿鏃跺欎漢浠細琚繖鏍蜂竴縐嶁滅編濡欑殑鈥濇兂娉曞惛寮曪細鐢ㄤ竴涓猚atch璇彞鎹曡幏鎵鏈夌殑寮傚父銆傛渶甯歌鐨勬儏褰㈠氨鏄嬌鐢╟atch(Exception ex)璇彞銆備絾瀹為檯涓婏紝鍦ㄧ粷澶у鏁版儏鍐典笅錛岃繖縐嶅仛娉曚笉鍊煎緱鎻愬°備負浠涔堝憿錛?
銆銆瑕佺悊瑙e叾鍘熷洜錛屾垜浠繀欏誨洖欏句竴涓媍atch璇彞鐨勭敤閫斻俢atch璇彞琛ㄧず鎴戜滑棰勬湡浼氬嚭鐜版煇縐嶅紓甯革紝鑰屼笖甯屾湜鑳藉澶勭悊璇ュ紓甯搞傚紓甯哥被鐨勪綔鐢ㄥ氨鏄憡璇塉ava緙栬瘧鍣ㄦ垜浠兂瑕佸鐞嗙殑鏄摢涓縐嶅紓甯搞傜敱浜庣粷澶у鏁板紓甯擱兘鐩存帴鎴栭棿鎺ヤ粠java.lang.Exception媧劇敓錛宑atch(Exception ex)灝辯浉褰撲簬璇存垜浠兂瑕佸鐞嗗嚑涔庢墍鏈夌殑寮傚父銆?
銆銆鍐嶆潵鐪嬬湅鍓嶉潰鐨勪唬鐮佷緥瀛愩傛垜浠湡姝f兂瑕佹崟鑾風殑寮傚父鏄粈涔堝憿錛熸渶鏄庢樉鐨勪竴涓槸SQLException錛岃繖鏄疛DBC鎿嶄綔涓父瑙佺殑寮傚父銆傚彟涓涓彲鑳界殑寮傚父鏄疘OException錛屽洜涓哄畠瑕佹搷浣淥utputStreamWriter銆傛樉鐒訛紝鍦ㄥ悓涓涓猚atch鍧椾腑澶勭悊榪欎袱縐嶆埅鐒朵笉鍚岀殑寮傚父鏄笉鍚堥傜殑銆傚鏋滅敤涓や釜catch鍧楀垎鍒崟鑾稴QLException鍜孖OException灝辮濂藉浜嗐傝繖灝辨槸璇達紝catch璇彞搴斿綋灝介噺鎸囧畾鍏蜂綋鐨勫紓甯哥被鍨嬶紝鑰屼笉搴旇鎸囧畾娑電洊鑼冨洿澶箍鐨凟xception綾匯?
銆銆鍙︿竴鏂歸潰錛岄櫎浜嗚繖涓や釜鐗瑰畾鐨勫紓甯革紝榪樻湁鍏朵粬璁稿寮傚父涔熷彲鑳藉嚭鐜般備緥濡傦紝濡傛灉鐢變簬鏌愮鍘熷洜錛宔xecuteQuery榪斿洖浜唍ull錛岃鎬庝箞鍔烇紵絳旀鏄瀹冧滑緇х畫鎶涘嚭錛屽嵆涓嶅繀鎹曡幏涔熶笉蹇呭鐞嗐傚疄闄呬笂錛屾垜浠笉鑳戒篃涓嶅簲璇ュ幓鎹曡幏鍙兘鍑虹幇鐨勬墍鏈夊紓甯革紝紼嬪簭鐨勫叾浠栧湴鏂硅繕鏈夋崟鑾峰紓甯哥殑鏈轟細??鐩磋嚦鏈鍚庣敱JVM澶勭悊銆?
銆銆緇撹浜岋細鍦╟atch璇彞涓敖鍙兘鎸囧畾鍏蜂綋鐨勫紓甯哥被鍨嬶紝蹇呰鏃朵嬌鐢ㄥ涓猚atch銆備笉瑕佽瘯鍥懼鐞嗘墍鏈夊彲鑳藉嚭鐜扮殑寮傚父銆?
銆銆鍙嶄緥涔嬩笁錛氬崰鐢ㄨ祫婧愪笉閲婃斁
銆銆浠g爜錛?琛?14琛屻?
銆銆寮傚父鏀瑰彉浜嗙▼搴忔甯哥殑鎵ц嫻佺▼銆傝繖涓亾鐞嗚櫧鐒剁畝鍗曪紝鍗村父甯歌浜轟滑蹇借銆傚鏋滅▼搴忕敤鍒頒簡鏂囦歡銆丼ocket銆丣DBC榪炴帴涔嬬被鐨勮祫婧愶紝鍗充嬌閬囧埌浜嗗紓甯革紝涔熻姝g‘閲婃斁鍗犵敤鐨勮祫婧愩備負姝わ紝Java鎻愪緵浜嗕竴涓畝鍖栬繖綾繪搷浣滅殑鍏抽敭璇峟inally銆?
銆銆finally鏄牱濂戒笢瑗匡細涓嶇鏄惁鍑虹幇浜嗗紓甯革紝Finally淇濊瘉鍦╰ry/catch/finally鍧楃粨鏉熶箣鍓嶏紝鎵ц娓呯悊浠誨姟鐨勪唬鐮佹繪槸鏈夋満浼氭墽琛屻傞仐鎲劇殑鏄湁浜涗漢鍗翠笉涔犳儻浣跨敤finally銆?
銆銆褰撶劧錛岀紪鍐檉inally鍧楀簲褰撳鍔犲皬蹇冿紝鐗瑰埆鏄娉ㄦ剰鍦╢inally鍧椾箣鍐呮姏鍑虹殑寮傚父??榪欐槸鎵ц娓呯悊浠誨姟鐨勬渶鍚庢満浼氾紝灝介噺涓嶈鍐嶆湁闅句互澶勭悊鐨勯敊璇?
銆銆緇撹涓夛細淇濊瘉鎵鏈夎祫婧愰兘琚紜噴鏀俱傚厖鍒嗚繍鐢╢inally鍏抽敭璇嶃?
銆銆鍙嶄緥涔嬪洓錛氫笉璇存槑寮傚父鐨勮緇嗕俊鎭?
銆銆浠g爜錛?琛?18琛屻?
銆銆浠旂粏瑙傚療榪欐浠g爜錛氬鏋滃驚鐜唴閮ㄥ嚭鐜頒簡寮傚父錛屼細鍙戠敓浠涔堜簨鎯咃紵鎴戜滑鍙互寰楀埌瓚沖鐨勪俊鎭垽鏂驚鐜唴閮ㄥ嚭閿欑殑鍘熷洜鍚楋紵涓嶈兘銆傛垜浠彧鑳界煡閬撳綋鍓嶆鍦ㄥ鐞嗙殑綾誨彂鐢熶簡鏌愮閿欒錛屼絾鍗翠笉鑳借幏寰椾換浣曚俊鎭垽鏂鑷村綋鍓嶉敊璇殑鍘熷洜銆?
銆銆printStackTrace鐨勫爢鏍堣窡韙姛鑳芥樉紺哄嚭紼嬪簭榪愯鍒板綋鍓嶇被鐨勬墽琛屾祦紼嬶紝浣嗗彧鎻愪緵浜嗕竴浜涙渶鍩烘湰鐨勪俊鎭紝鏈兘璇存槑瀹為檯瀵艱嚧閿欒鐨勫師鍥狅紝鍚屾椂涔熶笉鏄撹В璇匯?
銆銆鍥犳錛屽湪鍑虹幇寮傚父鏃訛紝鏈濂借兘澶熸彁渚涗竴浜涙枃瀛椾俊鎭紝渚嬪褰撳墠姝e湪鎵ц鐨勭被銆佹柟娉曞拰鍏朵粬鐘舵佷俊鎭紝鍖呮嫭浠ヤ竴縐嶆洿閫傚悎闃呰鐨勬柟寮忔暣鐞嗗拰緇勭粐printStackTrace鎻愪緵鐨勪俊鎭?
銆銆緇撹鍥涳細鍦ㄥ紓甯稿鐞嗘ā鍧椾腑鎻愪緵閫傞噺鐨勯敊璇師鍥犱俊鎭紝緇勭粐閿欒淇℃伅浣垮叾鏄撲簬鐞嗚В鍜岄槄璇匯?
銆銆鍙嶄緥涔嬩簲錛氳繃浜庡簽澶х殑try鍧?
銆銆浠g爜錛?琛?14琛屻?
銆銆緇忓父鍙互鐪嬪埌鏈変漢鎶婂ぇ閲忕殑浠g爜鏀懼叆鍗曚釜try鍧楋紝瀹為檯涓婅繖涓嶆槸濂戒範鎯傝繖縐嶇幇璞′箣鎵浠ュ父瑙侊紝鍘熷洜灝卞湪浜庢湁浜涗漢鍥劇渷浜嬶紝涓嶆効鑺辨椂闂村垎鏋愪竴澶у潡浠g爜涓摢鍑犺浠g爜浼氭姏鍑哄紓甯搞佸紓甯哥殑鍏蜂綋綾誨瀷鏄粈涔堛傛妸澶ч噺鐨勮鍙ヨ鍏ュ崟涓法澶х殑try鍧楀氨璞℃槸鍑洪棬鏃呮父鏃舵妸鎵鏈夋棩甯哥敤鍝佸鍏ヤ竴涓ぇ綆卞瓙錛岃櫧鐒朵笢瑗挎槸甯︿笂浜嗭紝浣嗚鎵懼嚭鏉ュ彲涓嶅鏄撱?
銆銆涓浜涙柊鎵嬪父甯告妸澶ч噺鐨勪唬鐮佹斁鍏ュ崟涓猼ry鍧楋紝鐒跺悗鍐嶅湪catch璇彞涓0鏄嶦xception錛岃屼笉鏄垎紱誨悇涓彲鑳藉嚭鐜板紓甯哥殑孌佃惤騫跺垎鍒崟鑾峰叾寮傚父銆傝繖縐嶅仛娉曚負鍒嗘瀽紼嬪簭鎶涘嚭寮傚父鐨勫師鍥犲甫鏉ヤ簡鍥伴毦錛屽洜涓轟竴澶ф浠g爜涓湁澶鐨勫湴鏂瑰彲鑳芥姏鍑篍xception銆?
緇撹浜旓細灝介噺鍑忓皬try鍧楃殑浣撶Н銆?
銆銆鍙嶄緥涔嬪叚錛氳緭鍑烘暟鎹笉瀹屾暣
銆銆浠g爜錛?琛?11琛屻?
銆銆涓嶅畬鏁寸殑鏁版嵁鏄疛ava紼嬪簭鐨勯殣褰㈡潃鎵嬨備粩緇嗚瀵熻繖孌典唬鐮侊紝鑰冭檻涓涓嬪鏋滃驚鐜殑涓棿鎶涘嚭浜嗗紓甯革紝浼氬彂鐢熶粈涔堜簨鎯呫傚驚鐜殑鎵ц褰撶劧鏄琚墦鏂殑錛屽叾嬈★紝catch鍧椾細鎵ц??灝辮繖浜涳紝鍐嶄篃娌℃湁鍏朵粬鍔ㄤ綔浜嗐傚凡緇忚緭鍑虹殑鏁版嵁鎬庝箞鍔烇紵浣跨敤榪欎簺鏁版嵁鐨勪漢鎴栬澶囧皢鏀跺埌涓浠戒笉瀹屾暣鐨勶紙鍥犺屼篃鏄敊璇殑錛夋暟鎹紝鍗村緱涓嶅埌浠諱綍鏈夊叧榪欎喚鏁版嵁鏄惁瀹屾暣鐨勬彁紺恒傚浜庢湁浜涚郴緇熸潵璇達紝鏁版嵁涓嶅畬鏁村彲鑳芥瘮緋葷粺鍋滄榪愯甯︽潵鏇村ぇ鐨勬崯澶便?
銆銆杈冧負鐞嗘兂鐨勫緗姙娉曟槸鍚戣緭鍑鴻澶囧啓涓浜涗俊鎭紝澹版槑鏁版嵁鐨勪笉瀹屾暣鎬э紱鍙︿竴縐嶅彲鑳芥湁鏁堢殑鍔炴硶鏄紝鍏堢紦鍐茶杈撳嚭鐨勬暟鎹紝鍑嗗濂藉叏閮ㄦ暟鎹箣鍚庡啀涓嬈℃ц緭鍑恒?
銆銆緇撹鍏細鍏ㄩ潰鑰冭檻鍙兘鍑虹幇鐨勫紓甯鎬互鍙婅繖浜涘紓甯稿鎵ц嫻佺▼鐨勫獎鍝嶃?
銆銆鏀瑰啓鍚庣殑浠g爜
銆銆鏍規嵁涓婇潰鐨勮璁猴紝涓嬮潰緇欏嚭鏀瑰啓鍚庣殑浠g爜銆備篃璁告湁浜轟細璇村畠紼嶅井鏈夌偣?鍡︼紝浣嗘槸瀹冩湁浜嗘瘮杈冨畬澶囩殑寮傚父澶勭悊鏈哄埗銆?
銆銆OutputStreamWriter out = ...
銆銆java.sql.Connection conn = ...
銆銆try {
銆銆Statement stat = conn.createStatement();
銆銆ResultSet rs = stat.executeQuery(
銆銆"select uid, name from user");
銆銆while (rs.next())
銆銆{
銆銆out.println("ID錛? + rs.getString("uid") + "錛屽鍚? " + rs.getString("name"));
銆銆}
銆銆}
銆銆catch(SQLException sqlex)
銆銆{
銆銆out.println("璀﹀憡錛氭暟鎹笉瀹屾暣");
銆銆throw new ApplicationException("璇誨彇鏁版嵁鏃跺嚭鐜癝QL閿欒", sqlex);
銆銆}
銆銆catch(IOException ioex)
銆銆{
銆銆throw new ApplicationException("鍐欏叆鏁版嵁鏃跺嚭鐜癐O閿欒", ioex);
銆銆}
銆銆finally
銆銆{
銆銆if (conn != null) {
銆銆try {
銆銆銆conn.close();
銆銆}
銆銆catch(SQLException sqlex2)
銆銆{
銆銆銆System.err(this.getClass().getName() + ".mymethod - 涓嶈兘鍏抽棴鏁版嵁搴撹繛鎺? " + sqlex2.toString());
銆銆}
銆銆}
銆銆if (out != null) {
銆銆try {
銆銆銆out.close();
銆銆}
銆銆catch(IOException ioex2)
銆銆{
銆銆System.err(this.getClass().getName() + ".mymethod - 涓嶈兘鍏抽棴杈撳嚭鏂囦歡" + ioex2.toString());
銆銆}
銆銆}
銆銆}
銆銆鏈枃鐨勭粨璁轟笉鏄斁涔嬪洓嫻風殕鍑嗙殑鏁欐潯錛屾湁鏃跺父璇嗗拰緇忛獙鎵嶆槸鏈濂界殑鑰佸笀銆傚鏋滀綘瀵硅嚜宸辯殑鍋氭硶娌℃湁鐧懼垎涔嬬櫨鐨勪俊蹇冿紝鍔″繀鍔犱笂璇︾粏銆佸叏闈㈢殑娉ㄩ噴銆?
銆銆鍙︿竴鏂歸潰錛屼笉瑕佺瑧璇濊繖浜涢敊璇紝涓嶅Θ闂棶浣犺嚜宸辨槸鍚︾湡鍦板交搴曟憜鑴變簡榪欎簺鍧忎範鎯傚嵆浣挎渶鏈夌粡楠岀殑紼嬪簭鍛樺伓灝斾篃浼氳鍏ユ閫旓紝鍘熷洜寰堢畝鍗曪紝鍥犱負瀹冧滑紜‘瀹炲疄甯︽潵浜嗏滄柟渚庫濄傛墍鏈夎繖浜涘弽渚嬮兘鍙互鐪嬩綔Java緙栫▼涓栫晫鐨勬伓欖旓紝瀹冧滑緹庝附鍔ㄤ漢錛屾棤瀛斾笉鍏ワ紝鏃跺埢璇辨儜鐫浣犮備篃璁告湁浜轟細璁や負榪欎簺閮藉睘浜庨浮鐨挏姣涚殑灝忎簨錛屼笉瓚蟲寕榻匡紝浣嗚璁頒綇錛氬嬁浠ユ伓灝忚屼負涔嬶紝鍕夸互鍠勫皬鑰屼笉涓恒?
鏉ヨ嚜錛?a >http://www.it.com.cn/f/edu/0512/31/218593_1.htm

]]>