锘??xml version="1.0" encoding="utf-8" standalone="yes"?>99人久久精品视频最新地址,狠狠v欧美v日韩v亚洲ⅴ,免费久久久一本精品久久区http://www.shnenglu.com/yunduan5158/archive/2006/07/12/9763.htmlMerlinMerlinWed, 12 Jul 2006 08:38:00 GMThttp://www.shnenglu.com/yunduan5158/archive/2006/07/12/9763.htmlhttp://www.shnenglu.com/yunduan5158/comments/9763.htmlhttp://www.shnenglu.com/yunduan5158/archive/2006/07/12/9763.html#Feedback0http://www.shnenglu.com/yunduan5158/comments/commentRss/9763.htmlhttp://www.shnenglu.com/yunduan5158/services/trackbacks/9763.html鍦ㄨ鍧涗笂闈㈠父甯哥湅鍒板垵瀛﹁呭綰跨▼鐨勬棤鍙浣曪紝鎵浠ユ葷粨鍑轟簡(jiǎn)涓嬮潰涓綃囨枃绔狅紝甯屾湜瀵逛竴浜涙鍦ㄥ涔?fàn)鋴社敤java綰跨▼鐨勫垵瀛﹁呮湁鎵甯姪銆?br />
棣栧厛瑕佺悊瑙g嚎紼嬮鍏堥渶瑕佷簡(jiǎn)瑙d竴浜涘熀鏈殑涓滆タ錛屾垜浠幇鍦ㄦ墍浣跨敤鐨勫ぇ澶氭暟鎿嶄綔緋葷粺閮藉睘浜庡浠誨姟錛屽垎鏃舵搷浣滅郴緇熴傛鏄敱浜庤繖縐嶆搷浣滅郴緇熺殑鍑虹幇鎵嶆湁浜?jiǎn)澶毦U跨▼榪欎釜姒傚康銆傛垜浠嬌鐢ㄧ殑windows,linux灝卞睘浜庢鍒椼備粈涔堟槸鍒嗘椂鎿嶄綔緋葷粺鍛紝閫氫織涓鐐逛笌灝辨槸鍙互鍚屼竴鏃墮棿鎵ц澶氫釜紼嬪簭鐨勬搷浣滅郴緇燂紝鍦ㄨ嚜宸辯殑鐢?shù)鑴戜笂闈㈠Q屼綘鏄笉鏄竴杈瑰惉姝岋紝涓杈硅亰澶╄繕?shù)竴杈圭湅緗戦〉鍛紵浣嗗疄闄呬笂錛屽茍涓嶄笂cpu鍦ㄥ悓鏃舵墽琛岃繖浜涚▼搴忥紝cpu鍙槸灝嗘椂闂村垏鍓蹭負(fù)鏃墮棿鐗囷紝鐒跺悗灝嗘椂闂寸墖鍒嗛厤緇欒繖浜涚▼搴忥紝鑾峰緱鏃墮棿鐗囩殑紼嬪簭寮濮嬫墽琛岋紝涓嶇瓑鎵ц瀹屾瘯錛屼笅涓▼搴忓張鑾峰緱鏃墮棿鐗囧紑濮嬫墽琛岋紝榪欐牱澶氫釜紼嬪簭杞祦鎵ц涓孌墊椂闂達(dá)紝鐢變簬鐜板湪cpu鐨勯珮閫熻綆楄兘鍔涳紝緇欎漢鐨勬劅瑙夊氨鍍忔槸澶氫釜紼嬪簭鍦ㄥ悓鏃舵墽琛屼竴鏍楓?br />涓鑸彲浠ュ湪鍚屼竴鏃墮棿鍐呮墽琛屽涓▼搴忕殑鎿嶄綔緋葷粺閮芥湁榪涚▼鐨勬蹇?涓涓繘紼嬪氨鏄竴涓墽琛屼腑鐨勭▼搴?鑰屾瘡涓涓繘紼嬮兘鏈夎嚜宸辯嫭绔嬬殑涓鍧楀唴瀛樼┖闂?涓緇勭郴緇熻祫婧?鍦ㄨ繘紼嬫蹇典腑,姣忎竴涓繘紼嬬殑鍐呴儴鏁版嵁鍜岀姸鎬侀兘鏄畬鍏ㄧ嫭绔嬬殑.鍥犳鍙互鎯沖儚鍒涘緩騫舵墽琛屼竴涓繘紼嬬殑緋葷粺寮鍍忔槸姣旇緝澶х殑錛屾墍浠ョ嚎紼嬪嚭鐜頒簡(jiǎn)銆傚湪java涓紝紼嬪簭閫氳繃嫻佹帶鍒舵潵鎵ц紼嬪簭嫻?紼嬪簭涓崟涓『搴忕殑嫻佹帶鍒剁О涓虹嚎紼?澶氱嚎紼嬪垯鎸囩殑鏄湪鍗曚釜紼嬪簭涓彲浠ュ悓鏃惰繍琛屽涓笉鍚岀殑綰跨▼,鎵ц涓嶅悓鐨勪換鍔?澶氱嚎紼嬫剰鍛崇潃涓涓▼搴忕殑澶氳璇彞鍙互鐪嬩笂鍘誨嚑涔庡湪鍚屼竴鏃墮棿鍐呭悓鏃惰繍琛?錛堜綘鍙互灝嗗墠闈竴鍙ヨ瘽鐨勭▼搴忔崲鎴愯繘紼嬶紝榪涚▼鏄▼搴忕殑涓嬈℃墽琛岃繃紼?鏄郴緇熻繍琛岀▼搴忕殑鍩烘湰鍗曚綅錛?br />
綰跨▼涓庤繘紼嬬浉浼?鏄竴孌靛畬鎴愭煇涓壒瀹氬姛鑳界殑浠g爜,鏄▼搴忎腑鍗曚釜欏哄簭鐨勬祦鎺у埗;浣嗕笌榪涚▼涓嶅悓鐨勬槸,鍚岀被鐨勫涓嚎紼嬫槸鍏變韓涓鍧楀唴瀛樼┖闂村拰涓緇勭郴緇熻祫婧?鑰岀嚎紼嬫湰韜殑鏁版嵁閫氬父鍙湁寰鐞嗗櫒鐨勫瘎瀛樺櫒鏁版嵁,浠ュ強(qiáng)涓涓緵紼嬪簭鎵ц鏃朵嬌鐢ㄧ殑鍫嗘爤.鎵浠ョ郴緇熷湪浜х敓涓涓嚎紼?鎴栬呭湪鍚勪釜綰跨▼涔嬮棿鍒囨崲鏃?璐熸媴瑕佹瘮榪涚▼灝忕殑澶?姝e洜濡傛,綰跨▼涔熻縐頒負(fù)杞昏礋鑽瘋繘紼?light-weight process).涓涓繘紼嬩腑鍙互鍖呭惈澶氫釜綰跨▼.

澶氫換鍔℃槸鎸囧湪涓涓郴緇熶腑鍙互鍚屾椂榪愯澶氫釜紼嬪簭,鍗蟲(chóng)湁澶氫釜鐙珛榪愯鐨勪換鍔?姣忎釜浠誨姟瀵瑰簲涓涓繘紼嬶紝鍚岃繘紼嬩竴鏍?涓涓嚎紼嬩篃鏈変粠鍒涘緩,榪愯鍒版秷浜$殑榪囩▼,縐頒負(fù)綰跨▼鐨勭敓鍛藉懆鏈?鐢ㄧ嚎紼嬬殑鐘舵?state)琛ㄦ槑綰跨▼澶勫湪鐢熷懡鍛ㄦ湡鐨勫摢涓樁孌?綰跨▼鏈夊垱寤?鍙繍琛?榪愯涓?闃誨,姝諱骸浜斾腑鐘舵?閫氳繃綰跨▼鐨勬帶鍒朵笌璋冨害鍙嬌綰跨▼鍦ㄨ繖鍑犵鐘舵侀棿杞寲姣忎釜紼嬪簭鑷沖皯鑷姩鎷ユ湁涓涓嚎紼?縐頒負(fù)涓葷嚎紼?褰撶▼搴忓姞杞藉埌鍐呭瓨鏃?鍚姩涓葷嚎紼?

[綰跨▼鐨勮繍琛屾満鍒朵互鍙?qiáng)璋冨害妯″瀷]
java涓綰跨▼灝辨槸涓涓被鎴栦竴涓▼搴忔墽琛屾垨綆$悊澶氫釜綰跨▼鎵ц浠誨姟鐨勮兘鍔涳紝姣忎釜綰跨▼鍙互鐙珛浜庡叾浠栫嚎紼嬭岀嫭绔嬭繍琛岋紝褰撶劧涔熷彲浠ュ拰鍏朵粬綰跨▼鍗忓悓榪愯錛屼竴涓被鎺у埗鐫瀹冪殑鎵鏈夌嚎紼嬶紝鍙互鍐沖畾鍝釜綰跨▼寰楀埌浼樺厛綰э紝鍝釜綰跨▼鍙互璁塊棶鍏朵粬綾葷殑璧勬簮錛屽摢涓嚎紼嬪紑濮嬫墽琛岋紝鍝釜淇濇寔浼戠湢鐘舵併?br />涓嬮潰鏄嚎紼嬬殑鏈哄埗鍥撅細(xì)
image

綰跨▼鐨勭姸鎬佽〃紺虹嚎紼嬫鍦ㄨ繘琛岀殑媧誨姩浠ュ強(qiáng)鍦ㄦ鏃墮棿孌靛唴鎵鑳藉畬鎴愮殑浠誨姟.綰跨▼鏈夊垱寤?鍙繍琛?榪愯涓?闃誨,姝諱骸浜斾腑鐘舵?涓涓叿鏈夌敓鍛界殑綰跨▼,鎬繪槸澶勪簬榪欎簲縐嶇姸鎬佷箣涓錛?br />1.鍒涘緩鐘舵?/b>
浣跨敤new榪愮畻絎﹀垱寤轟竴涓嚎紼嬪悗,璇ョ嚎紼嬩粎浠呮槸涓涓┖瀵硅薄,緋葷粺娌℃湁鍒嗛厤璧勬簮,縐拌綰跨▼澶勪簬鍒涘緩鐘舵?new thread)
2.鍙繍琛岀姸鎬?/b>
浣跨敤start()鏂規(guī)硶鍚姩涓涓嚎紼嬪悗,緋葷粺涓鴻綰跨▼鍒嗛厤浜?jiǎn)闄PU澶栫殑鎵闇璧勬簮,浣胯綰跨▼澶勪簬鍙繍琛岀姸鎬?Runnable)
3.榪愯涓姸鎬?/b>
Java榪愯緋葷粺閫氳繃璋冨害閫変腑涓涓猂unnable鐨勭嚎紼?浣垮叾鍗犳湁CPU騫惰漿涓鴻繍琛屼腑鐘舵?Running).姝ゆ椂,緋葷粺鐪熸鎵ц綰跨▼鐨剅un()鏂規(guī)硶.
4.闃誨鐘舵?/b>
涓涓鍦ㄨ繍琛岀殑綰跨▼鍥犳煇縐嶅師鍥犱笉鑳界戶緇繍琛屾椂,榪涘叆闃誨鐘舵?Blocked)
5.姝諱骸鐘舵?/b>
綰跨▼緇撴潫鍚庢槸姝諱骸鐘舵?Dead)

鍚屼竴鏃跺埢濡傛灉鏈夊涓嚎紼嬪浜庡彲榪愯鐘舵?鍒欎粬浠渶瑕佹帓闃熺瓑寰匔PU璧勬簮.姝ゆ椂姣忎釜綰跨▼鑷姩鑾峰緱涓涓嚎紼嬬殑浼樺厛綰?priority),浼樺厛綰х殑楂樹(shù)綆鍙嶆槧綰跨▼鐨勯噸瑕佹垨绱фョ▼搴?鍙繍琛岀姸鎬佺殑綰跨▼鎸変紭鍏堢駭鎺掗槦,綰跨▼璋冨害渚濇嵁浼樺厛綰у熀紜涓婄殑"鍏堝埌鍏堟湇鍔?鍘熷垯.
綰跨▼璋冨害綆$悊鍣ㄨ礋璐g嚎紼嬫帓闃熷拰CPU鍦ㄧ嚎紼嬮棿鐨勫垎閰?騫剁敱綰跨▼璋冨害綆楁硶榪涜璋冨害.褰撶嚎紼嬭皟搴︾鐞嗗櫒閫夌鏌愪釜綰跨▼鏃?璇ョ嚎紼嬭幏寰桟PU璧勬簮鑰岃繘鍏ヨ繍琛岀姸鎬?

綰跨▼璋冨害鏄厛鍗犲紡璋冨害,鍗沖鏋滃湪褰撳墠綰跨▼鎵ц榪囩▼涓竴涓洿楂樹(shù)紭鍏堢駭鐨勭嚎紼嬭繘鍏ュ彲榪愯鐘舵?鍒欒繖涓嚎紼嬬珛鍗寵璋冨害鎵ц.鍏堝崰寮忚皟搴﹀垎涓?鐙崰寮忓拰鍒嗘椂鏂瑰紡.
鐙崰鏂瑰紡涓?褰撳墠鎵ц綰跨▼灝嗕竴鐩存墽琛屼笅鍘?鐩?鍒版墽琛屽畬姣曟垨鐢變簬鏌愮鍘熷洜涓誨姩鏀懼純CPU,鎴朇PU琚竴涓洿楂樹(shù)紭鍏堢駭鐨勭嚎紼嬫姠鍗?br />鍒嗘椂鏂瑰紡涓?褰撳墠榪愯綰跨▼鑾峰緱涓涓椂闂寸墖,鏃墮棿鍒版椂,鍗充嬌娌℃湁鎵ц瀹屼篃瑕佽鍑篊PU,榪涘叆鍙繍琛岀姸鎬?絳夊緟涓嬩竴涓椂闂寸墖鐨勮皟搴?緋葷粺閫変腑鍏朵粬鍙繍琛岀姸鎬佺殑綰跨▼鎵ц
鍒嗘椂鏂瑰紡鐨勭郴緇熶嬌姣忎釜綰跨▼宸ヤ綔鑻ュ共姝?瀹炵幇澶氱嚎紼嬪悓鏃惰繍琛?br />
鍙﹀璇鋒敞鎰忎笅闈㈢殑綰跨▼璋冨害瑙勫垯錛堝鏋滄湁涓嶇悊瑙o紝涓嶆ワ紝寰涓嬬湅錛夛細(xì)
鈶犲鏋滀袱涓垨鏄袱涓互涓婄殑綰跨▼閮戒慨鏀逛竴涓璞★紝閭d箞鎶婃墽琛屼慨鏀圭殑鏂規(guī)硶瀹氫箟涓鴻鍚屾鐨勶紙Synchronized錛?濡傛灉瀵硅薄鏇存柊褰卞搷鍒板彧璇繪柟娉曪紝閭d箞鍙害鏂規(guī)硶涔熷簲璇ュ畾涔変負(fù)鍚屾鐨?br />鈶″鏋滀竴涓嚎紼嬪繀欏葷瓑寰呬竴涓璞$姸鎬佸彂鐢熷彉鍖栵紝閭d箞瀹冨簲璇ュ湪瀵硅薄鍐呴儴絳夊緟錛岃屼笉鏄湪澶栭儴絳夊緟錛屽畠鍙互璋冪敤涓涓鍚屾鐨勬柟娉曪紝騫惰榪欎釜鏂規(guī)硶璋冪敤wait()
鈶㈡瘡褰撲竴涓柟娉曟敼鍙樻煇涓璞$殑鐘舵佺殑鏃跺欙紝瀹冨簲璇ヨ皟鐢╪otifyAll()鏂規(guī)硶錛岃繖緇欑瓑寰呴槦鍒楃殑綰跨▼鎻愪緵鏈轟細(xì)鏉ョ湅涓鐪嬫墽琛岀幆澧冩槸鍚﹀凡鍙戠敓鏀瑰彉
鈶h浣弚ait(),notify(),notifyAll()鏂規(guī)硶灞炰簬Object綾伙紝鑰屼笉鏄疶hread綾伙紝浠旂粏媯(gè)鏌ョ湅鏄惁姣忔鎵цwait()鏂規(guī)硶閮芥湁鐩稿簲鐨刵otify()鎴杗otifyAll()鏂規(guī)硶錛屼笖瀹冧滑浣滅敤涓庣浉鍚岀殑瀵硅薄 鍦╦ava涓瘡涓被閮芥湁涓涓富綰跨▼錛岃鎵ц涓涓▼搴忥紝閭d箞榪欎釜綾誨綋涓竴瀹氳鏈塵ain鏂規(guī)硶錛岃繖涓猰an鏂規(guī)硶涔熷氨鏄痡ava class涓殑涓葷嚎紼嬨備綘鍙互鑷繁鍒涘緩綰跨▼錛屾湁涓ょ鏂規(guī)硶錛屼竴鏄戶鎵縏hread綾伙紝鎴栨槸瀹炵幇Runnable鎺ュ彛銆備竴鑸儏鍐典笅錛屾渶濂介伩鍏嶇戶鎵匡紝鍥犱負(fù)java涓槸鍗曟牴緇ф壙錛屽鏋滀綘閫夌敤緇ф壙錛岄偅涔堜綘鐨勭被灝卞け鍘諱簡(jiǎn)寮規(guī)э紝褰撶劧涔熶笉鑳藉叏鐒跺惁瀹氱戶鎵縏hread,璇ユ柟娉曠紪鍐欑畝鍗?鍙互鐩存帴鎿嶄綔綰跨▼,閫傜敤浜庡崟閲嶇戶鎵挎儏鍐點(diǎn)傝嚦浜庨夌敤閭d竴縐嶏紝鍏蜂綋鎯呭喌鍏蜂綋鍒嗘瀽銆?br />

eg.緇ф壙Thread
				public class MyThread_1 extends Thread
{
public void run()
{
//some code
}
}


eg.瀹炵幇Runnable鎺ュ彛
				public class MyThread_2 implements Runnable
{
public void run()
{
//some code
}
}



褰撲嬌鐢ㄧ戶鎵垮垱寤虹嚎紼嬶紝榪欐牱鍚姩綰跨▼錛?br />
				new MyThread_1().start()
		


褰撲嬌鐢ㄥ疄鐜版帴鍙e垱寤虹嚎紼嬶紝榪欐牱鍚姩綰跨▼錛?br />
				new Thread(new MyThread_2()).start()
		


娉ㄦ剰錛屽叾瀹炴槸鍒涘緩涓涓嚎紼嬪疄渚嬶紝騫朵互瀹炵幇浜?jiǎn)Runnable鎺ュ彛鐨勭被涓哄弬鏁頒紶鍏ヨ繖涓疄渚嬶紝褰撴墽琛岃繖涓嚎紼嬬殑鏃跺欙紝MyThread_2涓璻un閲岄潰鐨勪唬鐮佸皢琚墽琛屻?br />涓嬮潰鏄畬鎴愮殑渚嬪瓙錛?br />
				public class MyThread implements Runnable
{

public void run()
{
System.out.println("My Name is "+Thread.currentThread().getName());
}
public static void main(String[] args)
{
new Thread(new MyThread()).start();
}
}



鎵ц鍚庡皢鎵撳嵃鍑猴細(xì)
My Name is Thread-0

浣犱篃鍙互鍒涘緩澶氫釜綰跨▼錛屽儚涓嬮潰榪欐牱
				new Thread(new MyThread()).start();
new Thread(new MyThread()).start();
new Thread(new MyThread()).start();



閭d箞浼?xì)鎵撳嵃鍑哄Q?br /> My Name is Thread-0
My Name is Thread-1
My Name is Thread-2


鐪嬩簡(jiǎn)涓婇潰鐨勭粨鏋滐紝浣犲彲鑳戒細(xì)璁や負(fù)綰跨▼鐨勬墽琛岄『搴忔槸渚濇鎵ц鐨勶紝浣嗘槸閭e彧鏄竴鑸儏鍐碉紝鍗冧竾涓嶈鐢ㄤ互涓烘槸綰跨▼鐨勬墽琛屾満鍒訛紱褰卞搷綰跨▼鎵ц欏哄簭鐨勫洜绱犳湁鍑犵偣錛氶鍏堢湅鐪嬪墠闈㈡彁鍒扮殑浼樺厛綰у埆


				public class MyThread implements Runnable
{

public void run()
{
System.out.println("My Name is "+Thread.currentThread().getName());
}
public static void main(String[] args)
{
Thread t1=new Thread(new MyThread());
Thread t2=new Thread(new MyThread());
Thread t3=new Thread(new MyThread());
t2.setPriority(Thread.MAX_PRIORITY);//璧嬩簣鏈楂樹(shù)紭鍏堢駭
t1.start();
t2.start();
t3.start();
}
}


鍐嶇湅鐪嬬粨鏋滐細(xì)
My Name is Thread-1
My Name is Thread-0
My Name is Thread-2



綰跨▼鐨勪紭鍏堢駭鍒嗕負(fù)10綰э紝鍒嗗埆鐢?鍒?0鐨勬暣鏁頒唬琛紝榛樿鎯呭喌鏄?銆備笂闈㈢殑t2.setPriority(Thread.MAX_PRIORITY)絳変環(huán)涓巘2.setPriority(10錛?br />鐒跺悗鏄嚎紼嬬▼搴忔湰韜殑璁捐錛屾瘮濡備嬌鐢╯leep,yield,join錛寃ait絳夋柟娉曪紙璇︽儏璇風(fēng)湅JDKDocument)

				public class MyThread implements Runnable
{
public void run()
{
try
{
int sleepTime=(int)(Math.random()*100);//浜х敓闅忔満鏁板瓧錛?br />Thread.currentThread().sleep(sleepTime);//璁╁叾浼戠湢涓瀹氭椂闂達(dá)紝鏃墮棿鍙堜笂闈leepTime鍐沖畾
//public static void sleep(long millis)throw InterruptedException 錛圓PI錛?br />System.out.println(Thread.currentThread().getName()+" 鐫′簡(jiǎn) "+sleepTime);
}catch(InterruptedException ie)//鐢變簬綰跨▼鍦ㄤ紤鐪犲彲鑳借涓柇錛屾墍浠ヨ皟鐢╯leep鏂規(guī)硶鐨勬椂鍊欓渶瑕佹崟鎹夊紓甯?br />{
ie.printStackTrace();
}
}
public static void main(String[] args)
{
Thread t1=new Thread(new MyThread());
Thread t2=new Thread(new MyThread());
Thread t3=new Thread(new MyThread());
t1.start();
t2.start();
t3.start();
}
}


鎵ц鍚庤瀵熷叾杈撳嚭錛?br />
Thread-0 鐫′簡(jiǎn) 11
Thread-2 鐫′簡(jiǎn) 48
Thread-1 鐫′簡(jiǎn) 69




涓婇潰鐨勬墽琛岀粨鏋滄槸闅忔満鐨勶紝鍐嶆墽琛屽緢鍙兘鍑虹幇涓嶅悓鐨勭粨鏋溿傜敱浜庝笂闈㈡垜鍦╮un涓坊鍔犱簡(jiǎn)浼戠湢璇彞錛屽綋綰跨▼浼戠湢鐨勬椂鍊欏氨浼?xì)璁╁嚭cpu錛宑pu灝嗕細(xì)閫夋嫨鎵ц澶勪簬runnable鐘舵佷腑鐨勫叾浠栫嚎紼嬶紝褰撶劧涔熷彲鑳藉嚭鐜拌繖縐嶆儏鍐碉紝浼戠湢鐨凾hread绔嬪嵆榪涘叆浜?jiǎn)runnable鐘舵侊紝cpu鍐嶆鎵ц瀹冦?br />[綰跨▼緇勬蹇礭
綰跨▼鏄彲浠ヨ緇勭粐鐨勶紝java涓瓨鍦ㄧ嚎紼嬬粍鐨勬蹇碉紝姣忎釜綰跨▼閮芥槸涓涓嚎紼嬬粍鐨勬垚鍛?綰跨▼緇勬妸澶氫釜綰跨▼闆嗘垚涓轟竴涓璞?閫氳繃綰跨▼緇勫彲浠ュ悓鏃跺鍏朵腑鐨勫涓嚎紼嬭繘琛屾搷浣?濡傚惎鍔ㄤ竴涓嚎紼嬬粍鐨勬墍鏈夌嚎紼嬬瓑.Java鐨勭嚎紼嬬粍鐢眏ava.lang鍖呬腑鐨凾hread鈥斺擥roup綾誨疄鐜?
ThreadGroup綾葷敤鏉ョ鐞嗕竴緇勭嚎紼?鍖呮嫭:綰跨▼鐨勬暟鐩?綰跨▼闂寸殑鍏崇郴,綰跨▼姝e湪鎵ц鐨勬搷浣?浠ュ強(qiáng)綰跨▼灝嗚鍚姩鎴栫粓姝㈡椂闂寸瓑.綰跨▼緇勮繕鍙互鍖呭惈綰跨▼緇?鍦↗ava鐨勫簲鐢ㄧ▼搴忎腑,鏈楂樺眰鐨勭嚎紼嬬粍鏄悕浣峬ain鐨勭嚎紼嬬粍,鍦╩ain涓繕鍙互鍔犲叆綰跨▼鎴栫嚎紼嬬粍,鍦╩ian鐨勫瓙綰跨▼緇勪腑涔熷彲浠ュ姞鍏ョ嚎紼嬪拰綰跨▼緇?褰㈡垚綰跨▼緇勫拰綰跨▼涔嬮棿鐨勬爲(wèi)鐘剁戶鎵垮叧緋匯傚儚涓婇潰鍒涘緩鐨勭嚎紼嬮兘鏄睘浜巑ain榪欎釜綰跨▼緇勭殑銆?br />鍊熺敤涓婇潰鐨勪緥瀛愶紝main閲岄潰鍙互榪欐牱鍐欙細(xì)

				public static void main(String[] args)
{
/***************************************
ThreadGroup(String name)
ThreadGroup(ThreadGroup parent, String name)
***********************************/
ThreadGroup group1=new ThreadGroup("group1");
ThreadGroup group2=new ThreadGroup(group1,"group2");
Thread t1=new Thread(group2,new MyThread());
Thread t2=new Thread(group2,new MyThread());
Thread t3=new Thread(group2,new MyThread());
t1.start();
t2.start();
t3.start();
}



綰跨▼緇勭殑宓屽錛宼1,t2,t3琚姞鍏roup2,group2鍔犲叆group1銆?br />鍙﹀涓涓瘮杈冨灝辨槸鍏充簬綰跨▼鍚屾鏂歸潰鐨勶紝璇曟兂榪欐牱涓縐嶆儏鍐碉紝浣犳湁涓絎斿瓨?gòu)茟譁ㄩ摱琛屽Q屼綘鍦ㄤ竴瀹墮摱琛屼負(fù)浣犵殑璐︽埛瀛樻錛岃屼綘鐨勫瀛愬湪鍙︿竴瀹墮摱琛屼粠榪欎釜璐︽埛鎻愭錛岀幇鍦ㄤ綘鏈?000鍧楀湪浣犵殑璐︽埛閲岄潰銆備綘瀛樺叆浜?000錛屼絾鏄敱浜庡彟涓鏂逛篃鍦ㄥ榪欑瑪瀛樻榪涜鎿嶄綔錛屼漢瀹跺紑濮嬫墽琛岀殑鏃跺欏彧鐪嬪埌璐︽埛閲岄潰鍘熸潵鐨?000鍏冿紝褰撲綘鐨勫瀛愭彁嬈?000鍏冨悗錛屼綘濡誨瓙鎵鍦ㄧ殑閾惰灝辮涓轟綘鐨勮處鎴烽噷闈㈡病鏈夐挶浜?jiǎn)锛岃屼綘鎵鍦ㄧ殑閾惰鍗磋涓轟綘榪樻湁2000鍏冦?br />鐪嬬湅涓嬮潰鐨勪緥瀛愶細(xì)

				class BlankSaving //鍌ㄨ搫璐︽埛
{
private static int money=10000;
public void add(int i)
{
money=money+i;
System.out.println("Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?+i+"]");
}
public void get(int i)
{
money=money-i;
System.out.println("Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?+i+"]");
if(money<0)
System.out.println("浣欓涓嶈凍錛?);
}
public int showMoney()
{
return money;
}
}


class Operater implements Runnable
{
String name;
BlankSaving bs;
public Operater(BlankSaving b,String s)
{
name=s;
bs=b;



}
public static void oper(String name,BlankSaving bs)
{



if(name.equals("husband"))
{
try
{
for(int i=0;i<10;i++)
{
Thread.currentThread().sleep((int)(Math.random()*300));
bs.add(1000);
}
}catch(InterruptedException e){}
}else
{
try
{



for(int i=0;i<10;i++)
{
Thread.currentThread().sleep((int)(Math.random()*300));
bs.get(1000);
}
}catch(InterruptedException e){}
}
}
public void run()
{
oper(name,bs);
}
}
public class BankTest
{
public static void main(String[] args)throws InterruptedException
{
BlankSaving bs=new BlankSaving();
Operater o1=new Operater(bs,"husband");
Operater o2=new Operater(bs,"wife");
Thread t1=new Thread(o1);
Thread t2=new Thread(o2);
t1.start();
t2.start();
Thread.currentThread().sleep(500);
}



}



涓嬮潰鏄叾涓竴嬈$殑鎵ц緇撴灉錛?br />


---------first--------------
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]


鐪嬪埌浜?jiǎn)鍚楀Q岃繖鍙笉鏄紜殑闇姹傦紝鍦╤usband榪樻病鏈夌粨鏉熸搷浣滅殑鏃跺欙紝wife灝辨彃浜?jiǎn)杩涙潵锛寴q欐牱寰堝彲鑳藉鑷存剰澶栫殑緇撴灉銆傝В鍐沖姙娉曞緢綆鍗曪紝灝辨槸灝嗗鏁版嵁榪涜鎿嶄綔鏂規(guī)硶澹版槑涓簊ynchronized,褰撴柟娉曡璇ュ叧閿瓧澹版槑鍚庯紝涔熷氨鎰忓懗鐫錛屽鏋滆繖涓暟鎹鍔犻攣錛屽彧鏈変竴涓璞″緱鍒拌繖涓暟鎹殑閿佺殑鏃跺欒瀵硅薄鎵嶈兘瀵硅繖涓暟鎹繘琛屾搷浣溿備篃灝辨槸褰撲綘瀛樻鐨勬椂鍊欙紝榪欑瑪璐︽埛鍦ㄥ叾浠栧湴鏂規(guī)槸涓嶈兘榪涜鎿嶄綔鐨勶紝鍙湁浣犲瓨?gòu)茟之屾瘯锛岄摱琛尳帯鐞嗕汉鍛槥畣杼庢埊偋i攣锛屽叾浠栦汉鎵嶈兘瀵箻q欎釜璐︽埛榪涜鎿嶄綔銆?br />淇敼public static void oper(String name,BlankSaving bs)涓簆ublic static void oper(String name,BlankSaving bs)錛屽啀鐪嬬湅緇撴灉:

Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Husband 鍚戦摱琛屽瓨鍏ヤ簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]
Wife 鍚戦摱琛屽彇璧頒簡(jiǎn) [錕?000]




褰撲笀澶畬鎴愭搷浣滃悗錛屽瀛愭墠寮濮嬫墽琛屾搷浣滐紝榪欐牱鐨勮瘽錛屽鍏變韓瀵硅薄鐨勬搷浣滃氨涓嶄細(xì)鏈夐棶棰樹(shù)簡(jiǎn)銆?br />[wait and notify]
浣犲彲浠ュ埄鐢ㄨ繖涓や釜鏂規(guī)硶寰堝ソ鐨勬帶鍒剁嚎紼嬬殑鎵ц嫻佺▼錛屽綋綰跨▼璋冪敤wait鏂規(guī)硶鍚庯紝綰跨▼灝嗚鎸傝搗錛岀洿鍒拌鍙︿竴綰跨▼鍞ら啋錛坣otify錛夋垨鍒欐槸濡傛灉wait鏂規(guī)硶鎸囧畾鏈夋椂闂村緱璇濓紝鍦ㄦ病鏈夎鍞ら啋鐨勬儏鍐典笅錛屾寚瀹氭椂闂存椂闂磋繃鍚庝篃灝嗚嚜鍔ㄨ鍞ら啋銆備絾鏄娉ㄦ剰涓瀹氾紝琚敜閱掑茍涓嶆槸鎸囬┈涓婃墽琛岋紝鑰屾槸浠庣粍濉炵姸鎬佸彉?shù)负鍙瘶q愯鐘舵侊紝鍏舵槸鍚﹁繍琛岃繕瑕佺湅cpu鐨勮皟搴︺?br />浜嬩緥浠g爜錛?br />
				class MyThread_1 extends Thread
{
Object lock;
public MyThread_1(Object o)
{
lock=o;
}
public void run()
{
try
{
synchronized(lock)
{
System.out.println("Enter Thread_1 and wait");
lock.wait();
System.out.println("be notified");
}
}catch(InterruptedException e){}
}
}
class MyThread_2 extends Thread
{
Object lock;
public MyThread_2(Object o)
{
lock=o;
}
public void run()
{
synchronized(lock)
{
System.out.println("Enter Thread_2 and notify");
lock.notify();
}
}
}
public class MyThread
{
public static void main(String[] args)
{
int[] in=new int[0];//notice
MyThread_1 t1=new MyThread_1(in);
MyThread_2 t2=new MyThread_2(in);
t1.start();
t2.start();
}
}




鎵ц緇撴灉濡備笅錛?br /> Enter Thread_1 and wait
Enter Thread_2 and notify
Thread_1 be notified


鍙兘浣犳敞鎰忓埌浜?jiǎn)鍦ㄤ娇鐢╳ait and notify鏂規(guī)硶寰楁椂鍊欐垜浣跨敤浜?jiǎn)synchronized鍧楁潵鍖呰榪欎袱涓柟娉曪紝榪欐槸鐢變簬璋冪敤榪欎袱涓柟娉曠殑鏃跺欑嚎紼嬪繀欏昏幏寰楅攣錛屼篃灝辨槸涓婇潰浠g爜涓殑lock[]錛屽鏋滀綘涓嶇敤synchronized鍖呰榪欎袱涓柟娉曠殑寰楄瘽錛屽張鎴栧垯閿佷笉涓鏄悓涓鎶婏紝姣斿鍦∕yThread_2涓璼ynchronized(lock)鏀逛負(fù)synchronized(this),閭d箞鎵ц榪欎釜紼嬪簭鐨勬椂鍊欏皢浼?xì)鎶涘嚭java.lang.IllegalMonitorStateException鎵ц鏈熷紓甯搞傚彟澶杦ait and notify鏂規(guī)硶鏄疧bject涓殑錛屽茍涓嶅湪Thread榪欎釜綾諱腑銆傛渶鍚庝綘鍙兘娉ㄦ剰鍒頒簡(jiǎn)榪欑偣錛歩nt[] in=new int[0];涓轟粈涔堜笉鏄垱寤簄ew Object鑰屾槸涓涓?闀垮害鐨勬暟緇勶紝閭f槸鍥犱負(fù)鍦╦ava涓垱寤轟竴涓?闀垮害鐨勬暟緇勬潵鍏呭綋閿佹洿鍔犻珮鏁堛?br />
Thread浣滀負(fù)java涓竴閲嶈緇勬垚閮ㄥ垎錛屽綋鐒惰繕鏈夊緢澶氬湴鏂歸渶瑕佹洿娣卞埢鐨勮璇嗭紝涓婇潰鍙槸瀵筎hread鐨勪竴浜涘父璇嗗拰鏄撻敊闂鍋氫簡(jiǎn)涓涓畝瑕佺殑鎬葷粨錛岃嫢瑕佺湡姝g殑鎺屾彙java鐨勭嚎紼嬶紝榪橀渶瑕佽嚜宸卞鍋氭葷粨


Merlin 2006-07-12 16:38 鍙戣〃璇勮
]]>
[杞琞緇忓吀java闂http://www.shnenglu.com/yunduan5158/archive/2006/07/12/9753.htmlMerlinMerlinWed, 12 Jul 2006 08:02:00 GMThttp://www.shnenglu.com/yunduan5158/archive/2006/07/12/9753.htmlhttp://www.shnenglu.com/yunduan5158/comments/9753.htmlhttp://www.shnenglu.com/yunduan5158/archive/2006/07/12/9753.html#Feedback1http://www.shnenglu.com/yunduan5158/comments/commentRss/9753.htmlhttp://www.shnenglu.com/yunduan5158/services/trackbacks/9753.html絎竴錛岃皥璋坒inal, finally, finalize鐨勫尯鍒?br />
銆銆
final鈥斾慨楗扮錛堝叧閿瓧錛夊鏋滀竴涓被琚0鏄庝負(fù)final錛屾剰鍛崇潃瀹冧笉鑳藉啀媧劇敓鍑烘柊鐨勫瓙綾伙紝涓嶈兘浣滀負(fù)鐖剁被琚戶鎵褲傚洜姝や竴涓被涓嶈兘鏃㈣澹版槑涓?abstract鐨勶紝鍙堣澹版槑涓篺inal鐨勩傚皢鍙橀噺鎴栨柟娉曞0鏄庝負(fù)final錛屽彲浠ヤ繚璇佸畠浠湪浣跨敤涓笉琚敼鍙樸傝澹版槑涓篺inal鐨勫彉閲忓繀欏誨湪澹版槑鏃剁粰瀹氬垵鍊鹼紝鑰屽湪浠ュ悗鐨勫紩鐢ㄤ腑鍙兘璇誨彇錛屼笉鍙慨鏀廣傝澹版槑涓篺inal鐨勬柟娉曚篃鍚屾牱鍙兘浣跨敤錛屼笉鑳介噸杞姐?br />
銆銆
finally鈥斿啀寮傚父澶勭悊鏃舵彁渚?finally 鍧楁潵鎵ц浠諱綍娓呴櫎鎿嶄綔銆傚鏋滄姏鍑轟竴涓紓甯革紝閭d箞鐩稿尮閰嶇殑 catch 瀛愬彞灝變細(xì)鎵ц錛岀劧鍚庢帶鍒跺氨浼?xì)杩涘?finally 鍧楋紙濡傛灉鏈夌殑璇濓級(jí)銆?br />
銆銆
finalize鈥旀柟娉曞悕銆侸ava 鎶鏈厑璁鎬嬌鐢?finalize() 鏂規(guī)硶鍦ㄥ瀮鍦炬敹闆嗗櫒灝嗗璞′粠鍐呭瓨?shù)腑娓呴櫎鍑哄幹M箣鍓嶅仛蹇呰鐨勬竻鐞嗗伐浣溿傝繖涓柟娉曟槸鐢卞瀮鍦炬敹闆嗗櫒鍦ㄧ‘瀹氳繖涓璞℃病鏈夎寮曠敤鏃跺榪欎釜瀵硅薄璋冪敤鐨勩傚畠鏄湪 Object 綾諱腑瀹氫箟鐨勶紝鍥犳鎵鏈夌殑綾婚兘緇ф壙浜?jiǎn)瀹冦傚瓙綾昏鐩?finalize() 鏂規(guī)硶浠ユ暣鐞嗙郴緇熻祫婧愭垨鑰呮墽琛屽叾浠栨竻鐞嗗伐浣溿俧inalize() 鏂規(guī)硶鏄湪鍨冨溇鏀墮泦鍣ㄥ垹闄ゅ璞′箣鍓嶅榪欎釜瀵硅薄璋冪敤鐨勩?br />

銆銆
絎簩錛孉nonymous Inner Class (鍖垮悕鍐呴儴綾? 鏄惁鍙互extends(緇ф壙)鍏跺畠綾伙紝鏄惁鍙互implements(瀹炵幇)interface(鎺ュ彛)?

銆銆
鍖垮悕鐨勫唴閮ㄧ被鏄病鏈夊悕瀛楃殑鍐呴儴綾匯備笉鑳絜xtends(緇ф壙) 鍏跺畠綾伙紝浣嗕竴涓唴閮ㄧ被鍙互浣滀負(fù)涓涓帴鍙o紝鐢卞彟涓涓唴閮ㄧ被瀹炵幇銆?br />

銆銆
絎笁錛孲tatic Nested Class 鍜?Inner Class鐨勪笉鍚岋紝璇村緱瓚婂瓚婂ソ(闈㈣瘯棰樻湁鐨勫緢絎肩粺)銆?br />
銆銆
Nested Class 錛堜竴鑸槸C++鐨勮娉曪級(jí)錛孖nner Class (涓鑸槸JAVA鐨勮娉?銆侸ava鍐呴儴綾諱笌C++宓屽綾繪渶澶х殑涓嶅悓灝卞湪浜庢槸鍚︽湁鎸囧悜澶栭儴鐨勫紩鐢ㄤ笂銆傚叿浣撳彲瑙乭ttp: //www.frontfree.net/articles/services/view.asp?id=704&page=1

銆銆
娉細(xì) 闈?rùn)鎬佸唴閮ㄧ被錛圛nner Class錛夋剰鍛崇潃1鍒涘緩涓涓猻tatic鍐呴儴綾葷殑瀵硅薄錛屼笉闇瑕佷竴涓閮ㄧ被瀵硅薄錛?涓嶈兘浠庝竴涓猻tatic鍐呴儴綾葷殑涓涓璞¤闂竴涓閮ㄧ被瀵硅薄


銆銆
絎洓錛?amp;鍜?amp;&鐨勫尯鍒?br />
銆銆
&鏄綅榪愮畻絎︺?amp;&鏄竷?yōu)當(dāng)閫昏緫榪愮畻絎︺?br />

銆銆
絎簲錛孒ashMap鍜孒ashtable鐨勫尯鍒?br />
銆銆
閮藉睘浜嶮ap鎺ュ彛鐨勭被錛屽疄鐜頒簡(jiǎn)灝嗘儫涓閿槧灝勫埌鐗瑰畾鐨勫間笂銆?br />
銆銆
HashMap 綾繪病鏈夊垎綾繪垨鑰呮帓搴忋傚畠鍏佽涓涓?null 閿拰澶氫釜 null 鍊箋?br />
銆銆
Hashtable 綾諱技浜?HashMap錛屼絾鏄笉鍏佽 null 閿拰 null 鍊箋傚畠涔熸瘮 HashMap 鎱紝鍥犱負(fù)瀹冩槸鍚屾鐨勩?br />

銆銆
絎叚錛孋ollection 鍜?Collections鐨勫尯鍒?br />
銆銆
Collections鏄釜java.util涓嬬殑綾伙紝瀹冨寘鍚湁鍚勭鏈夊叧闆嗗悎鎿嶄綔鐨勯潤(rùn)鎬佹柟娉曘?br />
銆銆
Collection鏄釜java.util涓嬬殑鎺ュ彛錛屽畠鏄悇縐嶉泦鍚堢粨鏋勭殑鐖舵帴鍙c?br />


銆銆
絎竷錛屼粈涔堟椂鍊欑敤assert銆?br />
銆銆
鏂█鏄竴涓寘鍚竷?yōu)當(dāng)琛ㄨ緫旨忕殑璇彞锛屽湪鎵ц杩欎釜璇彞鏃跺亣瀹氳琛ㄨ緫旨忎?true銆傚鏋滆〃杈懼紡璁$畻涓?false錛岄偅涔堢郴緇熶細(xì)鎶ュ憡涓涓?Assertionerror銆傚畠鐢ㄤ簬璋冭瘯鐩殑錛?br />
銆銆
assert(a > 0); // throws an Assertionerror if a <= 0

銆銆

鏂█鍙互鏈変袱縐嶅艦寮忥細(xì)

銆銆
assert Expression1 ;


assert Expression1 : Expression2 ;

銆銆
Expression1 搴旇鎬繪槸浜х敓涓涓竷?yōu)當(dāng)鍊箋?br />
銆銆
Expression2 鍙互鏄緱鍑轟竴涓肩殑浠繪剰琛ㄨ揪寮忋傝繖涓肩敤浜庣敓鎴愭樉紺烘洿澶氳皟璇曚俊鎭殑 String 娑堟伅銆?br />
銆銆
鏂█鍦ㄩ粯璁ゆ儏鍐典笅鏄鐢ㄧ殑銆傝鍦ㄧ紪璇戞椂鍚敤鏂█錛岄渶瑕佷嬌鐢?source 1.4 鏍囪錛?br />
銆銆
javac -source 1.4 Test.java

銆銆
瑕佸湪榪愯鏃跺惎鐢ㄦ柇璦錛屽彲浣跨敤 -enableassertions 鎴栬?-ea 鏍囪銆?br />
銆銆
瑕佸湪榪愯鏃墮夋嫨紱佺敤鏂█錛屽彲浣跨敤 -da 鎴栬?-disableassertions 鏍囪銆?br />
銆銆
瑕佺郴緇熺被涓惎鐢ㄦ柇璦錛屽彲浣跨敤 -esa 鎴栬?-dsa 鏍囪銆傝繕鍙互鍦ㄥ寘鐨勫熀紜涓婂惎鐢ㄦ垨鑰呯鐢ㄦ柇璦銆?br />
銆銆
鍙互鍦ㄩ璁℃甯告儏鍐典笅涓嶄細(xì)鍒拌揪鐨勪換浣曚綅緗笂鏀劇疆鏂█銆傛柇璦鍙互鐢ㄤ簬楠岃瘉浼犻掔粰縐佹湁鏂規(guī)硶鐨勫弬鏁般備笉榪囷紝鏂█涓嶅簲璇ョ敤浜庨獙璇佷紶閫掔粰鍏湁鏂規(guī)硶鐨勫弬鏁幫紝鍥犱負(fù)涓嶇鏄惁鍚敤浜?jiǎn)鏂a錛屽叕鏈夋柟娉曢兘蹇呴』媯(gè)鏌ュ叾鍙傛暟銆備笉榪囷紝鏃㈠彲浠ュ湪鍏湁鏂規(guī)硶涓紝涔熷彲浠ュ湪闈炲叕鏈夋柟娉曚腑鍒╃敤鏂█嫻嬭瘯鍚庣疆鏉′歡銆傚彟澶栵紝鏂█涓嶅簲璇ヤ互浠諱綍鏂瑰紡鏀瑰彉紼嬪簭鐨勭姸鎬併?


銆銆
絎叓錛孏C鏄粈涔? 涓轟粈涔堣鏈塆C? (鍩虹)銆?

銆銆
GC鏄瀮鍦炬敹闆嗗櫒銆侸ava 紼嬪簭鍛樹(shù)笉鐢ㄦ媴蹇?jī)鍐呭瓨绠$悊锛屽洜湄?fù)鍨冨溇鏀墮泦鍣ㄤ細(xì)鑷姩榪涜綆$悊銆傝璇鋒眰鍨冨溇鏀墮泦錛屽彲浠ヨ皟鐢ㄤ笅闈㈢殑鏂規(guī)硶涔嬩竴錛?br />
銆銆
System.gc()

銆銆
Runtime.getRuntime().gc()


銆銆
絎節(jié)錛孲tring s = new String("xyz");鍒涘緩浜?jiǎn)鍑犱釜String Object?

銆銆
涓や釜瀵硅薄錛屼竴涓槸"xyx",涓涓槸鎸囧悜"xyx"鐨勫紩鐢ㄥ璞銆?br />

銆銆
絎崄錛孧ath.round(11.5)絳夋柤澶氬皯? Math.round(-11.5)絳夋柤澶氬皯?

銆銆銆銆
Math.round(11.5)榪斿洖錛坙ong錛?2錛孧ath.round(-11.5)榪斿洖錛坙ong錛?11;


銆銆
絎崄涓錛宻hort s1 = 1; s1 = s1 + 1;鏈変粈涔堥敊? short s1 = 1; s1 += 1;鏈変粈涔堥敊?

銆銆
short s1 = 1; s1 = s1 + 1;鏈夐敊錛宻1鏄痵hort鍨嬶紝s1+1鏄痠nt鍨?涓嶈兘鏄懼紡杞寲涓簊hort鍨嬨傚彲淇敼涓簊1 =(short)(s1 + 1) 銆俿hort s1 = 1; s1 += 1姝g‘銆?br />

銆銆
絎崄浜岋紝sleep() 鍜?wait() 鏈変粈涔堝尯鍒? 鎼炵嚎紼嬬殑鏈鐖?br />
銆銆
sleep()鏂規(guī)硶鏄嬌綰跨▼鍋滄涓孌墊椂闂寸殑鏂規(guī)硶銆傚湪sleep 鏃墮棿闂撮殧鏈熸弧鍚庯紝綰跨▼涓嶄竴瀹氱珛鍗蟲(chóng)仮澶嶆墽琛屻傝繖鏄洜涓哄湪閭d釜鏃跺埢錛屽叾瀹冪嚎紼嬪彲鑳芥鍦ㄨ繍琛岃屼笖娌℃湁琚皟搴︿負(fù)鏀懼純鎵ц錛岄櫎闈?br />
(a)"閱掓潵"鐨勭嚎紼嬪叿鏈夋洿楂樼殑浼樺厛綰с?br />
銆銆
(b)姝e湪榪愯鐨勭嚎紼嬪洜涓哄叾瀹冨師鍥犺岄樆濉炪?br />
銆銆
wait()鏄嚎紼嬩氦浜掓椂錛屽鏋滅嚎紼嬪涓涓悓姝ュ璞 鍙戝嚭涓涓獁ait()璋冪敤錛岃綰跨▼浼?xì)鏆傚仠鎵ц锛岃璋冨璞q涘叆絳夊緟鐘舵侊紝鐩村埌琚敜閱掓垨絳夊緟鏃墮棿鍒般?br />

銆銆
絎崄涓夛紝Java鏈夋病鏈塯oto?

銆銆
Goto鈥攋ava涓殑淇濈暀瀛楋紝鐜板湪娌℃湁鍦╦ava涓嬌鐢ㄣ?br />

銆銆
絎崄鍥涳紝鏁扮粍鏈夋病鏈塴ength()榪欎釜鏂規(guī)硶? String鏈夋病鏈塴ength()榪欎釜鏂規(guī)硶錛?br />
銆銆
鏁扮粍娌℃湁length()榪欎釜鏂規(guī)硶錛屾湁length鐨勫睘鎬с?br />
銆銆
String鏈夋湁length()榪欎釜鏂規(guī)硶銆?br />

銆銆
絎崄浜旓紝Overload鍜孫verride鐨勫尯鍒侽verloaded鐨勬柟娉曟槸鍚﹀彲浠ユ敼鍙樿繑鍥炲肩殑綾誨瀷?

銆銆
鏂規(guī)硶鐨勯噸鍐橭verriding鍜岄噸杞絆verloading鏄疛ava澶氭佹х殑涓嶅悓琛ㄧ幇銆傞噸鍐橭verriding鏄埗綾諱笌瀛愮被涔嬮棿澶氭佹х殑涓縐嶈〃鐜幫紝閲嶈澆Overloading鏄竴涓被涓鎬佹х殑涓縐嶈〃鐜般傚鏋滃湪瀛愮被涓畾涔夋煇鏂規(guī)硶涓庡叾鐖剁被鏈夌浉鍚岀殑鍚嶇О鍜屽弬鏁幫紝鎴戜滑璇磋鏂規(guī)硶琚噸鍐?(Overriding)銆傚瓙綾葷殑瀵硅薄浣跨敤榪欎釜鏂規(guī)硶鏃訛紝灝嗚皟鐢ㄥ瓙綾諱腑鐨勫畾涔夛紝瀵瑰畠鑰岃█錛岀埗綾諱腑鐨勫畾涔夊鍚岃"灞忚斀"浜?jiǎn)銆傚鏋滃湪涓涓被涓畾涔変簡(jiǎn)澶氫釜鍚屽悕鐨勬柟娉曪紝瀹冧滑鎴栨湁涓嶅悓鐨勫弬鏁頒釜鏁版垨鏈変笉鍚岀殑鍙傛暟綾誨瀷錛屽垯縐頒負(fù)鏂規(guī)硶鐨勯噸杞?Overloading)銆侽verloaded鐨勬柟娉曟槸鍙互鏀瑰彉榪斿洖鍊肩殑綾誨瀷銆?br />

銆銆
絎崄鍏紝Set閲岀殑鍏冪礌鏄笉鑳介噸澶嶇殑錛岄偅涔堢敤浠涔堟柟娉曟潵鍖哄垎閲嶅涓庡惁鍛? 鏄敤==榪樻槸equals()? 瀹冧滑鏈変綍鍖哄埆?

銆銆
Set閲岀殑鍏冪礌鏄笉鑳介噸澶嶇殑錛岄偅涔堢敤iterator()鏂規(guī)硶鏉ュ尯鍒嗛噸澶嶄笌鍚︺俥quals()鏄垽璇諱袱涓猄et鏄惁鐩哥瓑銆?br />
銆銆
equals()鍜?=鏂規(guī)硶鍐沖畾寮曠敤鍊兼槸鍚︽寚鍚戝悓涓瀵硅薄equals()鍦ㄧ被涓瑕嗙洊錛屼負(fù)鐨勬槸褰撲袱涓垎紱葷殑瀵硅薄鐨勫唴瀹瑰拰綾誨瀷鐩擱厤鐨勮瘽錛岃繑鍥炵湡鍊箋?br />

銆銆
絎崄涓冿紝緇欐垜涓涓綘鏈甯歌鍒扮殑runtime exception銆?br />
銆銆
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, 銆銆ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException


銆銆
絎崄鍏紝error鍜宔xception鏈変粈涔堝尯鍒?

銆銆
error 琛ㄧず鎭㈠涓嶆槸涓嶅彲鑳戒絾寰堝洶闅劇殑鎯呭喌涓嬬殑涓縐嶄弗閲嶉棶棰樸傛瘮濡傝鍐呭瓨婧㈠嚭銆備笉鍙兘鎸囨湜紼嬪簭鑳藉鐞嗚繖鏍風(fēng)殑鎯呭喌銆?br />
銆銆
exception 琛ㄧず涓縐嶈璁℃垨瀹炵幇闂銆備篃灝辨槸璇達(dá)紝瀹冭〃紺哄鏋滅▼搴忚繍琛屾甯革紝浠庝笉浼?xì)鍙戠敓鐨勬儏鍐点?br />

銆銆
絎崄涔?jié)锛孡ist, Set, Map鏄惁緇ф壙鑷狢ollection鎺ュ彛?

銆銆
List錛孲et鏄?br />
銆銆
Map涓嶆槸


銆銆
絎簩鍗侊紝abstract class鍜宨nterface鏈変粈涔堝尯鍒?

銆銆
澹版槑鏂規(guī)硶鐨勫瓨鍦ㄨ屼笉鍘誨疄鐜板畠鐨勭被琚彨鍋氭娊璞$被錛坅bstract class錛夛紝瀹冪敤浜庤鍒涘緩涓涓綋鐜版煇浜涘熀鏈涓虹殑綾伙紝騫朵負(fù)璇ョ被澹版槑鏂規(guī)硶錛屼絾涓嶈兘鍦ㄨ綾諱腑瀹炵幇璇ョ被鐨勬儏鍐點(diǎn)備笉鑳藉垱寤篴bstract 綾葷殑瀹炰緥銆傜劧鑰屽彲浠ュ垱寤轟竴涓彉閲忥紝鍏剁被鍨嬫槸涓涓娊璞$被錛屽茍璁╁畠鎸囧悜鍏蜂綋瀛愮被鐨勪竴涓疄渚嬨備笉鑳芥湁鎶借薄鏋勯犲嚱鏁版垨鎶借薄闈?rùn)鎬佹柟娉曘侫bstract 綾葷殑瀛愮被涓哄畠浠埗綾諱腑鐨勬墍鏈夋娊璞℃柟娉曟彁渚涘疄鐜幫紝鍚﹀垯瀹冧滑涔熸槸鎶借薄綾諱負(fù)銆傚彇鑰屼唬涔嬶紝鍦ㄥ瓙綾諱腑瀹炵幇璇ユ柟娉曘傜煡閬撳叾琛屼負(fù)鐨勫叾瀹冪被鍙互鍦ㄧ被涓疄鐜拌繖浜涙柟娉曘?br />
銆銆
鎺ュ彛錛坕nterface錛夋槸鎶借薄綾葷殑鍙樹(shù)綋銆傚湪鎺ュ彛涓紝鎵鏈夋柟娉曢兘鏄娊璞$殑銆傚緇ф壙鎬у彲閫氳繃瀹炵幇榪欐牱鐨勬帴鍙h岃幏寰椼傛帴鍙d腑鐨勬墍鏈夋柟娉曢兘鏄娊璞$殑錛屾病鏈変竴涓湁紼嬪簭浣撱傛帴鍙e彧鍙互瀹氫箟static final鎴愬憳鍙橀噺銆傛帴鍙g殑瀹炵幇涓庡瓙綾葷浉浼鹼紝闄や簡(jiǎn)璇ュ疄鐜扮被涓嶈兘浠庢帴鍙e畾涔変腑緇ф壙琛屼負(fù)銆傚綋綾誨疄鐜扮壒孌婃帴鍙f椂錛屽畠瀹氫箟錛堝嵆灝嗙▼搴忎綋緇欎簣錛夋墍鏈夎繖縐嶆帴鍙g殑鏂規(guī)硶銆傜劧鍚庯紝瀹冨彲浠ュ湪瀹炵幇浜?jiǎn)璇ユ帴鍙g殑绫荤殑鋼Q浣曞璞′笂璋冪敤鎺ュ彛鐨勬柟娉曘傜敱浜庢湁鎶借薄綾伙紝瀹冨厑璁鎬嬌鐢ㄦ帴鍙e悕浣滀負(fù)寮曠敤鍙橀噺鐨勭被鍨嬨傞氬父鐨勫姩鎬佽仈緙栧皢鐢熸晥銆傚紩鐢ㄥ彲浠ヨ漿鎹㈠埌鎺ュ彛綾誨瀷鎴栦粠鎺ュ彛綾誨瀷杞崲錛宨nstanceof 榪愮畻絎﹀彲浠ョ敤鏉ュ喅瀹氭煇瀵硅薄鐨勭被鏄惁瀹炵幇浜?jiǎn)鎺ュ彛銆?br />

銆銆
絎簩鍗佷竴錛宎bstract鐨刴ethod鏄惁鍙悓鏃舵槸static,鏄惁鍙悓鏃舵槸native錛屾槸鍚﹀彲鍚屾椂鏄痵ynchronized?

銆銆
閮戒笉鑳?br />

銆銆
絎簩鍗佷簩錛屾帴鍙f槸鍚﹀彲緇ф壙鎺ュ彛? 鎶借薄綾繪槸鍚﹀彲瀹炵幇(implements)鎺ュ彛? 鎶借薄綾繪槸鍚﹀彲緇ф壙瀹炰綋綾?concrete class)?

銆銆
鎺ュ彛鍙互緇ф壙鎺ュ彛銆傛娊璞$被鍙互瀹炵幇(implements)鎺ュ彛錛屾娊璞$被鏄惁鍙戶鎵垮疄浣撶被錛屼絾鍓嶆彁鏄疄浣撶被蹇呴』鏈夋槑紜殑鏋勯犲嚱鏁般?br />


絎簩鍗佷笁錛屽惎鍔ㄤ竴涓嚎紼嬫槸鐢╮un()榪樻槸start()?

銆銆
鍚姩涓涓嚎紼嬫槸璋冪敤start()鏂規(guī)硶錛屼嬌綰跨▼鎵浠h〃鐨勮櫄鎷熷鐞嗘満澶勪簬鍙繍琛岀姸鎬侊紝榪欐剰鍛崇潃瀹冨彲浠ョ敱JVM璋冨害騫舵墽琛屻傝繖騫朵笉鎰忓懗鐫綰跨▼灝變細(xì)绔嬪嵆榪愯銆俽un()鏂規(guī)硶鍙互浜х敓蹇呴』閫鍑虹殑鏍囧織鏉ュ仠姝竴涓嚎紼嬨?br />

銆銆
絎簩鍗佸洓錛屾瀯閫犲櫒Constructor鏄惁鍙override?

銆銆
鏋勯犲櫒Constructor涓嶈兘琚戶鎵匡紝鍥犳涓嶈兘閲嶅啓Overriding錛屼絾鍙互琚噸杞絆verloading銆?br />

銆銆
絎簩鍗佷簲錛屾槸鍚﹀彲浠ョ戶鎵縎tring綾?

銆銆
String綾繪槸final綾繪晠涓嶅彲浠ョ戶鎵褲?br />

銆銆
絎簩鍗佸叚錛屽綋涓涓嚎紼嬭繘鍏ヤ竴涓璞$殑涓涓猻ynchronized鏂規(guī)硶鍚庯紝鍏跺畠綰跨▼鏄惁鍙繘鍏ユ瀵硅薄鐨勫叾瀹冩柟娉?

銆銆
涓嶈兘錛屼竴涓璞$殑涓涓猻ynchronized鏂規(guī)硶鍙兘鐢變竴涓嚎紼嬭闂?br />

銆銆
絎簩鍗佷竷錛宼ry {}閲屾湁涓涓猺eturn璇彞錛岄偅涔堢揣璺熷湪榪欎釜try鍚庣殑finally {}閲岀殑code浼?xì)涓嶄細(xì)琚墽琛屽Q屼粈涔堟椂鍊欒鎵ц錛屽湪return鍓嶈繕鏄悗?

銆銆
浼?xì)鎵ц锛屽湪return鍓嶆墽琛屻?br />

銆銆
浜屽崄鍏紝緙栫▼棰? 鐢ㄦ渶鏈夋晥鐜囩殑鏂規(guī)硶綆楀嚭2涔樹(shù)互8絳夋柤鍑?

銆銆
鏈塁鑳屾櫙鐨勭▼搴忓憳鐗瑰埆鍠滄闂繖縐嶉棶棰樸?


銆銆
絎簩鍗佷節(jié)錛屼袱涓璞″肩浉鍚?x.equals(y) == true)錛屼絾鍗村彲鏈変笉鍚岀殑hash code錛岃繖鍙ヨ瘽瀵逛笉瀵?


涓嶅錛屾湁鐩稿悓鐨刪ash code銆?


銆銆
絎笁鍗侊紝褰撲竴涓璞¤褰撲綔鍙傛暟浼犻掑埌涓涓柟娉曞悗錛屾鏂規(guī)硶鍙敼鍙樿繖涓璞$殑灞炴э紝騫跺彲榪斿洖鍙樺寲鍚庣殑緇撴灉錛岄偅涔堣繖閲屽埌搴曟槸鍊間紶閫掕繕鏄紩鐢ㄤ紶閫?

銆銆
鏄間紶閫掋侸ava 緙栫▼璇█鍙敱鍊間紶閫掑弬鏁般傚綋涓涓璞″疄渚嬩綔涓轟竴涓弬鏁拌浼犻掑埌鏂規(guī)硶涓椂錛屽弬鏁扮殑鍊煎氨鏄璇ュ璞$殑寮曠敤銆傚璞$殑鍐呭鍙互鍦ㄨ璋冪敤鐨勬柟娉曚腑鏀瑰彉錛屼絾瀵硅薄鐨勫紩鐢ㄦ槸姘歌繙涓嶄細(xì)鏀瑰彉鐨勩?


銆銆
絎笁鍗佷竴錛宻wtich鏄惁鑳戒綔鐢ㄥ湪byte涓婏紝鏄惁鑳戒綔鐢ㄥ湪long涓婏紝鏄惁鑳戒綔鐢ㄥ湪String涓?

銆銆
switch錛坋xpr1錛変腑錛宔xpr1鏄竴涓暣鏁拌〃杈懼紡銆傚洜姝や紶閫掔粰 switch 鍜?case 璇彞鐨勫弬鏁板簲璇ユ槸 int銆?short銆?char 鎴栬?byte銆俵ong,string 閮戒笉鑳戒綔鐢ㄤ簬swtich銆?br />

銆銆
絎笁鍗佷簩錛岀紪紼嬮: 鍐欎竴涓猄ingleton鍑烘潵銆?br />
銆銆
Singleton妯″紡涓昏浣滅敤鏄繚璇佸湪Java搴旂敤紼嬪簭涓紝涓涓被Class鍙湁涓涓疄渚嬪瓨鍦ㄣ?br />

涓鑸琒ingleton妯″紡閫氬父鏈夊嚑縐嶇褰㈠紡:

銆銆
絎竴縐嶅艦寮? 瀹氫箟涓涓被錛屽畠鐨勬瀯閫犲嚱鏁頒負(fù)private鐨勶紝瀹冩湁涓涓猻tatic鐨刾rivate鐨勮綾誨彉閲忥紝鍦ㄧ被鍒濆鍖栨椂瀹炰緥璇濓紝閫氳繃涓涓猵ublic鐨刧etInstance鏂規(guī)硶鑾峰彇瀵瑰畠鐨勫紩鐢?緇ц岃皟鐢ㄥ叾涓殑鏂規(guī)硶銆?

銆銆
public class Singleton {

銆銆
private Singleton(){}

銆銆
//鍦ㄨ嚜宸卞唴閮ㄥ畾涔夎嚜宸變竴涓疄渚嬶紝鏄笉鏄緢濂囨紵

銆銆
//娉ㄦ剰榪欐槸private 鍙緵鍐呴儴璋冪敤

銆銆
private static Singleton instance = new Singleton();

銆銆
//榪欓噷鎻愪緵浜?jiǎn)涓涓緵澶栭儴璁塊棶鏈琧lass鐨勯潤(rùn)鎬佹柟娉曪紝鍙互鐩存帴璁塊棶銆銆

銆銆
public static Singleton getInstance() {

銆銆
return instance; 銆銆

銆銆
}

銆銆
}


銆銆
絎簩縐嶅艦寮?

銆銆
public class Singleton {

銆銆
private static Singleton instance = null;

銆銆
public static synchronized Singleton getInstance() {

銆銆
//榪欎釜鏂規(guī)硶姣斾笂闈㈡湁鎵鏀硅繘錛屼笉鐢ㄦ瘡嬈¢兘榪涜鐢熸垚瀵硅薄錛屽彧鏄涓嬈°

銆銆 銆 銆
銆//浣跨敤鏃剁敓鎴愬疄渚嬶紝鎻愰珮?shù)簡(jiǎn)鏁堢巼锛?

銆銆
if (instance==null)

銆銆
instance錛漬ew Singleton();

銆銆
return instance; 銆銆}

銆銆
}

銆銆
鍏朵粬褰㈠紡:

銆銆
瀹氫箟涓涓被錛屽畠鐨勬瀯閫犲嚱鏁頒負(fù)private鐨勶紝鎵鏈夋柟娉曚負(fù)static鐨勩?

銆銆
涓鑸涓虹涓縐嶅艦寮忚鏇村姞瀹夊叏浜?

銆銆
Hashtable鍜孒ashMap

銆銆
Hashtable緇ф壙鑷狣ictionary綾伙紝鑰孒ashMap鏄疛ava1.2寮曡繘鐨凪ap interface鐨勪竴涓疄鐜?br />
銆銆
HashMap鍏佽灝唍ull浣滀負(fù)涓涓猠ntry鐨刱ey鎴栬卾alue錛岃孒ashtable涓嶅厑璁?

銆銆
榪樻湁灝辨槸錛孒ashMap鎶奌ashtable鐨刢ontains鏂規(guī)硶鍘繪帀浜?jiǎn)锛屾斠?guī)垚containsvalue鍜宑ontainsKey銆傚洜涓篶ontains鏂規(guī)硶瀹規(guī)槗璁╀漢寮曡搗璇В銆?br />
銆銆
鏈澶х殑涓嶅悓鏄紝Hashtable鐨勬柟娉曟槸Synchronize鐨勶紝鑰孒ashMap涓嶆槸錛屽湪

銆銆
澶氫釜綰跨▼璁塊棶Hashtable鏃訛紝涓嶉渶瑕佽嚜宸變負(fù)瀹冪殑鏂規(guī)硶瀹炵幇鍚屾錛岃孒ashMap

銆銆
灝卞繀欏諱負(fù)涔嬫彁渚涘鍚屾銆?

銆銆
Hashtable鍜孒ashMap閲囩敤鐨刪ash/rehash綆楁硶閮藉ぇ姒備竴鏍鳳紝鎵浠ユц兘涓嶄細(xì)鏈夊緢澶х殑宸紓銆?br />

Merlin 2006-07-12 16:02 鍙戣〃璇勮
]]>
[杞琞瀵筍tring鐨勬繁鍒葷悊瑙?/title><link>http://www.shnenglu.com/yunduan5158/archive/2006/07/11/9706.html</link><dc:creator>Merlin</dc:creator><author>Merlin</author><pubDate>Tue, 11 Jul 2006 14:29:00 GMT</pubDate><guid>http://www.shnenglu.com/yunduan5158/archive/2006/07/11/9706.html</guid><wfw:comment>http://www.shnenglu.com/yunduan5158/comments/9706.html</wfw:comment><comments>http://www.shnenglu.com/yunduan5158/archive/2006/07/11/9706.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/yunduan5158/comments/commentRss/9706.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/yunduan5158/services/trackbacks/9706.html</trackback:ping><description><![CDATA[ <font face="Arial" color="#000080" size="2">榪戞湡鍒癈SDN璁哄潧鐪嬬湅涓浜涚綉鍙嬭創(chuàng)鐨勯潰璇曢錛屽叾涓叧浜嶴tring鐨勯棶棰樺父甯歌鎻愬強(qiáng)銆傛垜涓鐩翠互涓鴻嚜宸卞緢娓呮榪欎釜涓滆タ浜?jiǎn)锛屽叾瀹炴忿q┒璧鋒潵錛屽彂鐜拌嚜宸卞茍涓嶉偅涔堟竻妤氾紝浼?xì)鐘竴浜涢敊璇紱鍚屾椂涔熶駭鐢熶簡(jiǎn)涓浜涜仈鎯熾傚皬緇撲竴涓嬨?br /><br />1銆?abc"涓巒ew String("abc");<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)緇忓父浼?xì)闂埌鐨勯潰璇曢锛?xì)String s = new String("abc");鍒涘緩浜?jiǎn)鍑犱釜String Object?銆愬榪欓噷鍒涘緩浜?jiǎn)澶殲畱瀵硅? 鍜屼竴閬撳皬灝忕殑闈㈣瘯棰?銆?br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)榪欎釜闂姣旇緝綆鍗曪紝娑夊強(qiáng)鐨勭煡璇嗙偣鍖呮嫭錛?br /><br />寮曠敤鍙橀噺涓庡璞$殑鍖哄埆錛?<br />瀛楃涓叉枃瀛?abc"鏄竴涓猄tring瀵硅薄錛?<br />鏂囧瓧姹燵pool of literal strings]鍜屽爢[heap]涓殑瀛楃涓插璞°?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)涓銆佸紩鐢ㄥ彉閲忎笌瀵硅薄錛氶櫎浜?jiǎn)涓浜涙棭鏈熺殑Java涔︾睄鍜岀幇鍦ㄧ殑鍨冨溇涔︾睄錛屼漢浠兘鍙互浠庝腑姣旇緝娓呮鍦板涔?fàn)鍒颁袱鑰呯殑鍖哄埆銆侫 aa;璇彞澹版槑涓涓被A鐨勫紩鐢ㄥ彉閲廰a[鎴戝父甯哥О涔嬩負(fù)鍙ユ焺]錛岃屽璞′竴鑸氳繃new鍒涘緩銆傛墍浠ラ鐩腑s浠呬粎鏄竴涓紩鐢ㄥ彉閲忥紝瀹冧笉鏄璞°俒ref 鍙ユ焺銆佸紩鐢ㄤ笌瀵硅薄]<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)浜屻丣ava涓墍鏈夌殑瀛楃涓叉枃瀛梉瀛楃涓插父閲廬閮芥槸涓涓猄tring鐨勫璞°傛湁浜篬鐗瑰埆鏄疌紼嬪簭鍛榏鍦ㄤ竴浜涘満鍚堝枩嬈㈡妸瀛楃涓?褰撲綔/鐪嬫垚"瀛楃鏁扮粍錛岃繖涔熸病鏈夊姙娉曪紝鍥犱負(fù)瀛楃涓蹭笌瀛楃鏁扮粍瀛樺湪涓浜涘唴鍦ㄧ殑鑱旂郴銆備簨瀹炰笂錛屽畠涓庡瓧絎︽暟緇勬槸涓ょ瀹屽叏涓嶅悓鐨勫璞°?br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)System.out.println("Hello".length());<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)char[] cc={'H','i'};<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)System.out.println(cc.length);<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)涓夈佸瓧絎︿覆瀵硅薄鐨勫垱寤?鐢變簬瀛楃涓插璞$殑澶ч噺浣跨敤[瀹冩槸涓涓璞★紝涓鑸岃█瀵硅薄鎬繪槸鍦╤eap鍒嗛厤鍐呭瓨]錛孞ava涓負(fù)浜?jiǎn)鑺傜渷鍐呭瓨绌洪棿鍜寴q愯鏃墮棿[濡傛瘮杈冨瓧絎︿覆鏃訛紝==姣攅quals()蹇玗錛屽湪緙栬瘧闃舵灝辨妸鎵鏈夌殑瀛楃涓叉枃瀛楁斁鍒頒竴涓枃瀛楁睜[pool of literal strings]涓紝鑰岃繍琛屾椂鏂囧瓧姹犳垚涓哄父閲忔睜鐨勪竴閮ㄥ垎銆傛枃瀛楁睜鐨勫ソ澶勶紝灝辨槸璇ユ睜涓墍鏈夌浉鍚岀殑瀛楃涓插父閲忚鍚堝茍錛屽彧鍗犵敤涓涓┖闂淬傛垜浠煡閬擄紝瀵逛袱涓紩鐢ㄥ彉閲忥紝浣跨敤==鍒ゆ柇瀹冧滑鐨勫糩寮曠敤]鏄惁鐩哥瓑錛屽嵆鎸囧悜鍚屼竴涓璞★細(xì)<br /><br /></font> <pre class="overflow"> <font face="Arial" color="#000080" size="2">String s1 = "abc" ;<br />String s2 = "abc" ;<br />if( s1 == s2 ) <br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)System.out.println("s1,s2 refer to the same object");<br />else聽(tīng)聽(tīng)聽(tīng)聽(tīng) System.out.println("trouble");</font> </pre> <br /> <br /> <font face="Arial" color="#000080" size="2">聽(tīng)聽(tīng)聽(tīng)聽(tīng)榪欓噷鐨勮緭鍑烘樉紺猴紝涓や釜瀛楃涓叉枃瀛椾繚瀛樹(shù)負(fù)涓涓璞°傚氨鏄錛屼笂闈㈢殑浠g爜鍙湪pool涓垱寤轟簡(jiǎn)涓涓猄tring瀵硅薄銆?br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)鐜板湪鐪婼tring s = new String("abc");璇彞錛岃繖閲?abc"鏈韓灝辨槸pool涓殑涓涓璞★紝鑰屽湪榪愯鏃舵墽琛宯ew String()鏃訛紝灝唒ool涓殑瀵硅薄澶嶅埗涓浠芥斁鍒癶eap涓紝騫朵笖鎶奾eap涓殑榪欎釜瀵硅薄鐨勫紩鐢ㄤ氦緇檚鎸佹湁銆俹k錛岃繖鏉¤鍙ュ氨鍒涘緩浜?涓猄tring瀵硅薄銆?br /><br /></font> <pre class="overflow"> <font face="Arial" color="#000080" size="2">String s1 = new String("abc") ;<br />String s2 = new String("abc") ;<br />if( s1 == s2 ){ //涓嶄細(xì)鎵ц鐨勮鍙</font> </pre> <br /> <br /> <font face="Arial" color="#000080" size="2">聽(tīng)聽(tīng)聽(tīng)聽(tīng)榪欐椂鐢?=鍒ゆ柇灝卞彲鐭ワ紝铏界劧涓や釜瀵硅薄鐨?鍐呭"鐩稿悓[equals()鍒ゆ柇]錛屼絾涓や釜寮曠敤鍙橀噺鎵鎸佹湁鐨勫紩鐢ㄤ笉鍚岋紝<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)BTW錛氫笂闈㈢殑浠g爜鍒涘緩浜?jiǎn)鍑犱釜String Object? [涓変釜錛宲ool涓竴涓紝heap涓?涓俔<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)[Java2 璁よ瘉鑰冭瘯瀛︿範(fàn)鎸囧崡 (絎?鐗?( 鑻辨枃鐗?p197-199鏈夊浘瑙c俔<br /><br /><br />2銆佸瓧絎︿覆鐨?榪愮畻鍜屽瓧絎︿覆杞崲<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)瀛楃涓茶漿鎹㈠拰涓叉帴鏄緢鍩虹鐨勫唴瀹癸紝鍥犳鎴戜互涓鴻繖涓棶棰樼畝鐩村氨鏄佸垎棰樸備簨瀹炰笂錛屾垜鑷繁灝辯瓟閿欎簡(jiǎn)銆?br /><br />String str = new String("jf"); // jf鏄帴鍒?br />str = 1+2+str+3+4;<br />涓鍏卞垱寤轟簡(jiǎn)澶氬皯String鐨勫璞★紵[鎴戝紑濮嬬殑絳旀錛?涓俲f銆乶ew銆?jf銆?jf3銆?jf34]<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)棣栧厛鐪婮LS鐨勬湁鍏寵榪幫細(xì)<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)涓銆佸瓧絎︿覆杞崲鐨勭幆澧僛JLS 5.4 String Conversion]<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)瀛楃涓茶漿鎹㈢幆澧冧粎浠呮寚浣跨敤鍙屽厓鐨?榪愮畻絎︾殑鎯呭喌錛屽叾涓竴涓搷浣滄暟鏄竴涓猄tring瀵硅薄銆傚湪榪欎竴鐗瑰畾鎯呭艦涓嬶紝鍙︿竴鎿嶄綔鏁拌漿鎹㈡垚String錛岃〃杈懼紡鐨勭粨鏋滄槸榪欎袱涓猄tring鐨勪覆鎺ャ?br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)浜屻佷覆鎺ヨ繍綆楃[JLS 15.18.1 String Concatenation Operator + ]<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)濡傛灉涓涓搷浣滄暟/琛ㄨ揪寮忔槸String綾誨瀷錛屽垯鍙︿竴涓搷浣滄暟鍦ㄨ繍琛屾椂杞崲鎴愪竴涓猄tring瀵硅薄錛屽茍涓よ呬覆鎺ャ傛鏃訛紝浠諱綍綾誨瀷閮藉彲浠ヨ漿鎹㈡垚String銆俒榪欓噷錛屾垜婕忔帀浜?3"鍜?4"]<br /><br />濡傛灉鏄熀鏈暟鎹被鍨嬶紝鍒欏鍚岄鍏堣漿鎹㈡垚鍏跺寘瑁呯被瀵硅薄錛屽int x瑙嗕負(fù)杞崲鎴怚nteger(x)銆?<br />鐜板湪灝卞叏閮ㄧ粺涓鍒板紩鐢ㄧ被鍨嬪悜String鐨勮漿鎹簡(jiǎn)銆傝繖縐嶈漿鎹㈠鍚孾as if]璋冪敤璇ュ璞$殑鏃犲弬鏁皌oString鏂規(guī)硶銆俒濡傛灉鏄痭ull鍒欒漿鎹㈡垚"null"]銆傚洜涓簍oString鏂規(guī)硶鍦∣bject涓畾涔夛紝鏁呮墍鏈夌殑綾婚兘鏈夎鏂規(guī)硶錛岃屼笖Boolean, Character, Integer, Long, Float, Double, and String鏀瑰啓浜?jiǎn)璇ユ栆?guī)硶銆?<br />鍏充簬+鏄覆鎺ヨ繕鏄姞娉曪紝鐢辨搷浣滄暟鍐沖畾銆?+2+str+3+4 灝卞緢瀹規(guī)槗鐭ラ亾鏄?3jf34"銆俒BTW :鍦↗LS鐨?5.18.1.3涓婦鐨勪竴涓猨ocular little example錛岀湡鐨勫緢鏃犺叮銆俔<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)涓嬮潰鐨勪緥瀛愭祴璇曚簡(jiǎn)鏀瑰啓toString鏂規(guī)硶鐨勬儏鍐?銆?br /><br /></font> <pre class="overflow"> <font face="Arial" color="#000080" size="2">class A{<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)int i = 10;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)public static void main(String []args){<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)String str = new String("jf");<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)str += new A();<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)System.out.print(str);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)public String toString(){<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return " a.i ="+i+"\n";<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />}</font> </pre> <br /> <br /> <font face="Arial" color="#000080" size="2">涓夈佸瓧絎︿覆杞崲鐨勪紭鍖?br /><br />鎸夌収涓婅堪璇存硶錛宻tr = 1+2+str+3+4;璇彞浼間箮搴旇灝卞簲璇ョ敓鎴?涓猄tring瀵硅薄錛?br /><br />1+2 錛?錛宼hen 3鈫捍nteger(3)鈫?3" in pool? [鍋囪濡傛] <br />"3"+str(in heap) = "3jf"聽(tīng)聽(tīng)聽(tīng)聽(tīng) (in heap) <br />"3jf" +3 ,first 3鈫捍nteger(3)鈫?3" in pool? [鍒欎笉鍒涘緩] then "3jf3" <br />"3jf3"+4 create "4"聽(tīng)聽(tīng)in pool <br />then "3jf34"<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)榪欓噷鎴戝茍涓嶆竻妤?銆?杞崲鎴愬瓧絎︿覆鍚庢槸鍚﹀湪姹犱腑錛屾墍浠ヤ笂榪扮粨鏋滀粛鐒舵槸鐚滄祴銆?br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)涓轟簡(jiǎn)鍑忓皯鍒涘緩涓棿榪囨浮鎬х殑瀛楃涓插璞★紝鎻愰珮鍙嶅榪涜涓叉帴榪愮畻鏃剁殑鎬ц兘錛宎 Java compiler鍙互浣跨敤StringBuffer鎴栬呯被浼肩殑鎶鏈紝鎴栬呮妸杞崲涓庝覆鎺ュ悎騫舵垚涓姝ャ備緥濡傦細(xì)瀵逛簬 a + b + c 錛孞ava緙栬瘧鍣ㄥ氨鍙互灝嗗畠瑙嗕負(fù)[as if]<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)new StringBuffer().append(a).append(b).append(c).toString();<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)娉ㄦ剰錛屽浜庡熀鏈被鍨嬪拰寮曠敤綾誨瀷錛屽湪append(a)榪囩▼涓粛鐒惰鍏堝皢鍙傛暟杞崲錛屼粠榪欎釜瑙傜偣鐪嬶紝str = 1+2+str+3+4;鍒涘緩鐨勫瓧絎︿覆鍙兘鏄?3"銆?4"鍜?3jf34"[浠ュ強(qiáng)涓涓猄tringBuffer瀵硅薄]銆?br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)鐜板湪鎴戜粛鐒朵笉鐭ラ亾鎬庝箞鍥炵瓟str = 1+2+str+3+4;鍒涘緩浜?jiǎn)澶殲畱String鐨勫璞★紝銆傛垨璁革紝榪欎釜闂?shù)笉闇瑕佽繃浜庣爺絀訛紝鑷沖皯SCJP涓嶄細(xì)鑰冨畠銆?br /><br />3銆佽繖鍙堜笉鍚岋細(xì)str = "3"+"jf"+"3"+"4";<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)濡傛灉鏄竴涓畬鍏ㄧ敱瀛楃涓叉枃瀛楃粍鎴愮殑琛ㄨ揪寮忥紝鍒欏湪緙栬瘧鏃訛紝宸茬粡琚紭鍖栬屼笉浼?xì)鍦q愯鏃跺垱寤轟腑闂村瓧絎︿覆銆傛祴璇曚唬鐮佸涓嬶細(xì)<br /><br /></font> <pre class="overflow"> <font face="Arial" color="#000080" size="2">String str1 ="3jf34";<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)String str2 ="3"+"jf"+"3"+"4"; <br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(str1 == str2) {<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)System.out.println("str1 == str2");<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}else {<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)System.out.println("think again");<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(str2.equals(str1))<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)System.out.println("yet str2.equals(str1)");</font> </pre> <br /> <br /> <font face="Arial" color="#000080" size="2">聽(tīng)聽(tīng)聽(tīng)聽(tīng)鍙錛宻tr1涓巗tr2鎸囧悜鍚屼竴涓璞★紝榪欎釜瀵硅薄鍦╬ool涓傛墍鏈夐伒寰狫ava Language Spec鐨勭紪璇戝櫒閮藉繀欏誨湪緙栬瘧鏃跺constant expressions 榪涜綆鍖栥侸LS瑙勫畾錛歋trings computed by constant expressions (&yacute;15.28) are computed at compile time and then treated as if they were literals. <br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)瀵逛簬String str2 ="3"+"jf"+"3"+"4";鎴戜滑璇翠粎浠呭垱寤轟竴涓璞°傛敞鎰忥紝鈥滃垱寤哄灝戝璞♀濈殑璁ㄨ鏄榪愯鏃跺垱寤哄灝戝璞°?br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)BTW錛氱紪璇戞椂浼樺寲<br /><br /></font> <pre class="overflow"> <font face="Arial" color="#000080" size="2">聽(tīng)聽(tīng)聽(tīng)聽(tīng)String x = "aaa " + "bbb ";<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if (false) {<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)x = x + "ccc ";<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)x +=聽(tīng)聽(tīng)"ddd ";<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)絳変環(huán)浜庯細(xì)<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)String x = "aaa bbb ";<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)x = x + "ddd ";</font> </pre> <font face="Arial"> <font color="#000080"> <font size="2"> <font style="BACKGROUND-COLOR: #ffffff"> <font color="#ff0000">//榪欎釜鍦版柟鎴戣嚜宸辮繘琛屼簡(jiǎn)緙栬瘧錛屼笉榪囧拰浠栫殑緇撹涓嶄竴鏍鳳紝濂藉儚褰撶敤x+="ddd"鐨勬椂鍊欏拰鐩存帴鐨剎="aaa"+"bbb"+"ddd" 涓嶅悓錛屼絾鏄叿浣撲負(fù)浠涔堟垜涔熶笉娓呮錛屾鍦ㄧ爺絀朵腑銆傘傘?/font> <br /> <br /> </font>4銆佷笉鍙樼被<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)String瀵硅薄鏄笉鍙敼鍙樼殑(immutable)銆傛湁浜哄str = 1+2+str+3+4;璇彞鎻愬嚭鐤戦棶,鎬庝箞str鐨勫唴瀹瑰彲浠ユ敼鍙橈紵鍏跺疄浠嶇劧鏄洜涓轟笉娓呮錛氬紩鐢ㄥ彉閲忎笌瀵硅薄鐨勫尯鍒俿tr浠呬粎鏄紩鐢ㄥ彉閲忥紝瀹冪殑鍊尖斺斿畠鎸佹湁鐨勫紩鐢ㄥ彲浠ユ敼鍙樸備綘涓嶅仠鍦板垱寤烘柊瀵硅薄錛屾垜灝變笉鏂湴鏀瑰彉鎸囧悜銆俒鍙傝僒IJ鐨凴ead-only classes銆俔<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)涓嶅彉綾葷殑鍏抽敭鏄紝瀵逛簬瀵硅薄鐨勬墍鏈夋搷浣滈兘涓嶅彲鑳芥敼鍙樺師鏉ョ殑瀵硅薄[鍙闇瑕侊紝灝辮繑鍥炰竴涓敼鍙樹(shù)簡(jiǎn)鐨勬柊瀵硅薄]銆傝繖灝變繚璇佷簡(jiǎn)瀵硅薄涓嶅彲鏀瑰彉銆備負(fù)浠涔堣灝嗕竴涓被璁捐鎴愪笉鍙樼被錛熸湁涓涓狾OD璁捐鐨勫師鍒欙細(xì)Law of Demeter銆傚叾騫夸箟瑙h鏄細(xì)<br /><br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)浣跨敤涓嶅彉綾匯傚彧瑕佹湁鍙兘錛岀被搴斿綋璁捐涓轟笉鍙樼被銆?br /></font> </font> </font> <img src ="http://www.shnenglu.com/yunduan5158/aggbug/9706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/yunduan5158/" target="_blank">Merlin</a> 2006-07-11 22:29 <a href="http://www.shnenglu.com/yunduan5158/archive/2006/07/11/9706.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[杞琞abstract class鍜宨nterface鐩稿叧鏁寸悊http://www.shnenglu.com/yunduan5158/archive/2006/07/11/9703.htmlMerlinMerlinTue, 11 Jul 2006 11:53:00 GMThttp://www.shnenglu.com/yunduan5158/archive/2006/07/11/9703.htmlhttp://www.shnenglu.com/yunduan5158/comments/9703.htmlhttp://www.shnenglu.com/yunduan5158/archive/2006/07/11/9703.html#Feedback0http://www.shnenglu.com/yunduan5158/comments/commentRss/9703.htmlhttp://www.shnenglu.com/yunduan5158/services/trackbacks/9703.html abstract class鍜宨nterface鍦↗ava璇█涓兘鏄敤鏉ヨ繘琛屾娊璞$被瀹氫箟鐨?br />
Interface ,緇欏鐣岀殑鎺ュ彛,鎸夌収瑙勫畾鍔炰簨錛?br />Abstract聽(tīng)聽(tīng),鍐呴儴緇ф壙鍏崇郴錛?br />
interface 灝辨槸涓緇勬搷浣滅殑闆嗗悎,瀹冨畾涔変簡(jiǎn)涓涓涓洪泦浣嗕笉浣滀換浣曞叿浣撶殑瀹炵幇,榪欐牱鐨勮瘽,鍏蜂綋鐨勬搷浣?閮藉彲浠ユ斁鍦ㄥ疄鐜扮被涓幓,
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)浣撶幇璁捐涓庡疄鐜板垎紱葷殑璁捐鎬濇兂銆?br />
鍦ㄩ潰鍚戝璞$殑姒傚康涓紝鎵鏈夌殑瀵硅薄閮芥槸閫氳繃綾繪潵鎻忕粯錛屽鏋滀竴涓被涓病鏈夊寘鍚凍澶熺殑淇℃伅鏉ユ弿緇樹(shù)竴涓叿浣撶殑瀵硅薄錛岃繖鏍風(fēng)殑綾誨氨鏄娊璞$被
鎶借薄姒傚康鍦ㄩ棶棰橀鍩熸病鏈夊搴旂殑鍏蜂綋姒傚康錛屾墍浠ョ敤浠ヨ〃寰佹娊璞℃蹇電殑鎶借薄綾繪槸涓嶈兘澶熷疄渚嬪寲鐨勩?br />
=====================================================================================================================
浣跨敤abstract class鐨勬柟寮忓畾涔塂emo鎶借薄綾葷殑鏂瑰紡濡備笅錛?br />

				abstract class Demo {
abstract void method1();
abstract void method2();
鈥?br />}



浣跨敤interface鐨勬柟寮忓畾涔塂emo鎶借薄綾葷殑鏂瑰紡濡備笅錛?br />

				interface Demo {
void method1();
void method2();
鈥?br />}



====================================================================================================================
浠庣紪紼嬪眰闈㈢湅abstract class鍜宨nterface

abstract class鍦↗ava璇█涓〃紺虹殑鏄竴縐嶇戶鎵垮叧緋伙紝涓涓被鍙兘浣跨敤涓嬈$戶鎵垮叧緋?br />涓涓被鍗村彲浠ュ疄鐜板涓猧nterface

鍦╝bstract class鐨勫畾涔変腑錛屾垜浠彲浠ヨ祴浜堟柟娉曠殑榛樿琛屼負(fù)
鍦╥nterface鐨勫畾涔変腑錛屾柟娉曞嵈涓嶈兘鎷ユ湁榛樿琛屼負(fù)

======================================================================================================================
渚嬪瑕佽璁′竴涓艦鐘剁被MShape錛屼粠姝ょ被鍙互媧劇敓 鏂瑰艦銆佸渾褰€佷笁瑙掑艦絳夊瓙綾匯傛垜浠氨鍙互灝哅Shape榪欎釜鐖剁被璁捐涓篴bstract綾匯?br />
姣斿錛屽瓙綾婚兘鏈?color 灞炴э紝鍥犳鍙互鎶?color 榪欎釜鏁版嵁鎴愬憳錛屼互鍙?qiáng)缁?color 璧嬪肩殑method鍧囪璁″湪鐖剁被涓紝
榪欐牱灝變笉鐢ㄥ湪姣忎釜瀛愮被涓璁$浉鍚岀殑浠g爜鏉ュ鐞?color 榪欎釜灞炴с?br />鑰屽鏋滄兂璁$畻鍑犱綍褰㈢姸鐨勯潰縐紝鐢變簬鍚勪釜鍑犱綍褰㈢姸鐨勯潰縐綆楁柟寮忛兘涓嶇浉鍚岋紝鎵浠ユ妸璁$畻闈㈢Н鐨刴ethod鐨勫鐞嗘斁鍦ㄧ埗綾諱腑灝變笉鍚堥傦紝
浣嗙敱浜庢瘡涓嚑浣曞艦鐘墮兘闇瑕佺敤鍒拌繖涓猰ethod錛屽洜姝ゅ彲浠ュ湪鐖剁被涓彧澹版槑璁$畻闈㈢Н鐨刴ethod "area()"錛岃屾妸鍏蜂綋鐨勫鐞嗘斁鍦ㄥ瓙綾諱腑瀹氫箟銆?br />鍗蟲(chóng)妸area()璁捐涓烘娊璞$被銆?br />
浠ヤ笅鏄▼搴忎唬鐮侊細(xì)
//abstract綾?MShape聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)

				abstract class MShape
{
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)protected String color;聽(tīng)聽(tīng) //鏁版嵁鎴愬憳
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)public void setColor(String mcolor)聽(tīng)聽(tīng) //涓鑸柟娉曪紝瀹氫箟浜?jiǎn)鍏蜂綋鐨勫鐞?
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) color=mcolor;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)abstract void area();聽(tīng)聽(tīng) //鎶借薄鏂規(guī)硶錛屾病鏈夊畾涔夊叿浣撶殑澶勭悊
}



//鏂瑰艦綾?br />

				class RectShape extends MShape
{聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)int width,height,rectarea;聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)public RectShape(int w,int h)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) width=w;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) height=h;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)public void area()聽(tīng)聽(tīng)//璁$畻闈㈢Н
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)rectarea=width*height;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
}



//浣跨敤

				public class myapp
{
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)public static void main(String args[])
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)RectShape rect=new RectShape(3,6);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)rect.setColor("Red");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)rect.area();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)System.out.print("color="+rect.color+", area="+rect.rectarea);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
}



鐢辨鍙錛屽湪abstract涓笉浠呭彲浠ュ畾涔変竴鑸殑鏂規(guī)硶錛堝嵆鍙互榪涜鍏蜂綋澶勭悊鐨勬柟娉曪級(jí)錛岃繕鍙互璞nterface涓鏍峰畾涔夋娊璞℃柟娉曘?br />鑰屽湪interface涓彧鑳藉畾涔夋娊璞℃柟娉曘?/font>



Merlin 2006-07-11 19:53 鍙戣〃璇勮
]]>
[杞琞JAVA鎿嶄綔鏁版嵁搴撴柟寮忎笌璁捐妯″紡搴旂敤http://www.shnenglu.com/yunduan5158/archive/2006/07/11/9696.htmlMerlinMerlinTue, 11 Jul 2006 11:10:00 GMThttp://www.shnenglu.com/yunduan5158/archive/2006/07/11/9696.htmlhttp://www.shnenglu.com/yunduan5158/comments/9696.htmlhttp://www.shnenglu.com/yunduan5158/archive/2006/07/11/9696.html#Feedback0http://www.shnenglu.com/yunduan5158/comments/commentRss/9696.htmlhttp://www.shnenglu.com/yunduan5158/services/trackbacks/9696.html1.聽(tīng)聽(tīng) 鍦ㄤ笟鍔″眰浣跨敤JDBC鐩存帴鎿嶄綔鏁版嵁搴擄紞鏈綆鍗曪紝鏈鐩存帴鐨勬搷浣?br />
1錛夋暟鎹簱url,username,password鍐欐鍦ㄤ唬鐮佷腑
聽(tīng)聽(tīng)聽(tīng)聽(tīng)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)String url="jdbc:oracle:thin:@localhost:1521:orcl";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)String user="scott";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)String password="tiger";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)Connection conn= DriverManager.getConnection(url,user,password);聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)Statement stmt=conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)String sql="select * from test";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)ResultSet rs=stmt.executeQuery(sql);

2錛夐噰鐢‵acade鍜孋ommand妯″紡錛屼嬌鐢―BUtil綾誨皝瑁匤DBC鎿嶄綔錛?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)鏁版嵁搴搖rl,username,password鍙互鏀懼湪閰嶇疆鏂囦歡涓紙濡倄ml,properties,ini絳夛級(jí)銆?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)榪欑鏂規(guī)硶鍦ㄥ皬紼嬪簭涓簲鐢ㄨ緝澶氥?br />
2.DAO(Data Accessor Object)妯″紡錛嶆澗鑰﹀悎鐨勫紑濮?br />DAO = data + accessor + domain object

渚嬪User綾伙紞domain object (javabean)
UserDAO綾伙紞accessor 錛屾彁渚涚殑鏂規(guī)硶getUser(int id)錛宻ave(User user)鍐呭寘鍚簡(jiǎn)JDBC鎿嶄綔
鍦ㄤ笟鍔¢昏緫涓嬌鐢ㄨ繖涓や釜綾繪潵瀹屾垚鏁版嵁鎿嶄綔銆?br />
浣跨敤Factory妯″紡鍙互鏂逛究涓嶅悓鏁版嵁搴撹繛鎺ヤ箣闂寸殑縐繪銆?br />
3.鏁版嵁搴撹祫婧愮鐞嗘ā寮?br />3.1 鏁版嵁搴撹繛鎺ユ睜鎶鏈?br />璧勬簮閲嶇敤錛岄伩鍏嶉綣佸垱寤猴紝閲婃斁榪炴帴寮曡搗澶уぇ閲忔ц兘寮閿錛?br />鏇村揩鐨勭郴緇熷搷搴旈熷害錛?br />
閫氳繃瀹炵幇JDBC鐨勯儴鍒嗚祫婧愬璞℃帴鍙? Connection, Statement, ResultSet )錛屽彲浠ヤ嬌鐢―ecorator璁捐妯″紡鍒嗗埆浜х敓涓夌閫昏緫璧勬簮瀵硅薄: PooledConnection, PooledStatement鍜?PooledResultSet銆?br />

涓涓渶綆鍗曞湴鏁版嵁搴撹繛鎺ユ睜瀹炵幇錛?br />public class ConnectionPool {

聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) private static Vector pools;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) private final int POOL_MAXSIZE = 25;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) /**
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)* 鑾峰彇鏁版嵁搴撹繛鎺?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)* 濡傛灉褰撳墠姹犱腑鏈夊彲鐢ㄨ繛鎺ワ紝鍒欏皢姹犱腑鏈鍚庝竴涓繑鍥烇紱鑻ユ病鏈夛紝鍒欏垱寤轟竴涓柊鐨勮繑鍥?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)*/
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) public synchronized Connection getConnection() {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Connection conn = null;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if (pools == null) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) pools = new Vector();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}

聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if (pools.isEmpty()) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) conn = createConnection();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)} else {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) int last_idx = pools.size() - 1;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) conn = (Connection) pools.get(last_idx);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) pools.remove(last_idx);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}

聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return conn;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) }

聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) /**
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)* 灝嗕嬌鐢ㄥ畬姣曠殑鏁版嵁搴撹繛鎺ユ斁鍥炴睜涓?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)* 鑻ユ睜涓繛鎺ュ凡緇忚秴榪囬槇鍊鹼紝鍒欏叧闂榪炴帴錛涘惁鍒欐斁鍥炴睜涓笅嬈″啀浣跨敤
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)*/
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) public synchronized void releaseConnection(Connection conn) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if (pools.size() >= POOL_MAXSIZE)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) try {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)conn.close();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) } catch (SQLException e) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// TODO鑷姩鐢熸垚 catch 鍧?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)e.printStackTrace();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) } else
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) pools.add(conn);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) }

聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) public static Connection createConnection() {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Connection conn = null;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)try {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) String url = "jdbc:oracle:thin:@localhost:1521:orcl";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) String user = "scott";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) String password = "tiger";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) conn = DriverManager.getConnection(url, user, password);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)} catch (InstantiationException e) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // TODO鑷姩鐢熸垚 catch 鍧?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) e.printStackTrace();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)} catch (IllegalAccessException e) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // TODO鑷姩鐢熸垚 catch 鍧?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) e.printStackTrace();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)} catch (ClassNotFoundException e) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // TODO鑷姩鐢熸垚 catch 鍧?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) e.printStackTrace();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)} catch (SQLException e) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // TODO鑷姩鐢熸垚 catch 鍧?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) e.printStackTrace();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return conn;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) }
}

娉ㄦ剰錛氬埄鐢╣etConnection()鏂規(guī)硶寰楀埌鐨凜onnection錛岀▼搴忓憳寰堜範(fàn)鎯湴璋冪敤conn.close()鏂規(guī)硶鍏抽棴浜?jiǎn)鏁版嵁搴摌q炴帴錛岄偅涔堜笂榪扮殑鏁版嵁搴撹繛鎺ユ満鍒朵究褰㈠悓铏氳銆傚湪璋冪敤conn.close()鏂規(guī)硶鏂規(guī)硶鏃跺浣曡皟鐢╮eleaseConnection()鏂規(guī)硶錛熻繖鏄叧閿傝繖閲岋紝鎴戜滑浣跨敤Proxy妯″紡鍜宩ava鍙嶅皠鏈哄埗銆?

public synchronized Connection getConnection() {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Connection conn = null;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if (pools == null) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) pools = new Vector();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}

聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if (pools.isEmpty()) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) conn = createConnection();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)} else {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) int last_idx = pools.size() - 1;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) conn = (Connection) pools.get(last_idx);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) pools.remove(last_idx);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)ConnectionHandler handler=new ConnectionHandler(this);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return handler.bind(con);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) }

public class ConnectionHandler implements InvocationHandler {
聽(tīng)聽(tīng)聽(tīng)聽(tīng) private Connection conn;
聽(tīng)聽(tīng)聽(tīng)聽(tīng) private ConnectionPool pool;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng) public ConnectionHandler(ConnectionPool pool){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)this.pool=pool;
聽(tīng)聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng) /**
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)* 灝嗗姩鎬佷唬鐞嗙粦瀹氬埌鎸囧畾Connection
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)* @param conn
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)* @return
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)*/
聽(tīng)聽(tīng)聽(tīng)聽(tīng) public Connection bind(Connection conn){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)this.conn=conn;
Connection proxyConn=(Connection)Proxy.newProxyInstance(
conn.getClass().getClassLoader(), conn.getClass().getInterfaces(),this);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return proxyConn;
聽(tīng)聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) /* 錛堥潪 Javadoc錛?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)*/
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// TODO鑷姩鐢熸垚鏂規(guī)硶瀛樻牴
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Object obj=null;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if("close".equals(method.getName())){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) this.pool.releaseConnection(this.conn);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)else{
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) obj=method.invoke(this.conn, args);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return obj;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) }
}

聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)鍦ㄥ疄闄呴」鐩腑錛屽茍涓嶉渶瑕佷綘鏉ヤ粠澶村紑濮嬫潵璁捐鏁版嵁搴撹繛鎺ユ睜鏈哄埗錛岀幇鍦ㄦ垚鐔熺殑寮婧愰」鐩紝濡侰3P0,dbcp,Proxool絳夋彁渚涗簡(jiǎn)鑹ソ鐨勫疄鐜般備竴鑸帹鑽愪嬌鐢ˋpache dbcp錛屽熀鏈嬌鐢ㄥ疄渚嬶細(xì)
DataSource ds = null;
聽(tīng)聽(tīng) try{
聽(tīng)聽(tīng)聽(tīng)聽(tīng) Context initCtx = new InitialContext();
聽(tīng)聽(tīng)聽(tīng)聽(tīng) Context envCtx = (Context) initCtx.lookup("java:comp/env");
聽(tīng)聽(tīng)聽(tīng)聽(tīng) ds = (DataSource)envCtx.lookup("jdbc/myoracle");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(ds!=null){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)out.println("Connection is OK!");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Connection cn=ds.getConnection();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(cn!=null){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)out.println("cn is Ok!");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Statement stmt = cn.createStatement();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) ResultSet rst = stmt.executeQuery("select * from BOOK");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)out.println("<p>rst is Ok!" + rst.next());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)while(rst.next()){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)out.println("<P>BOOK_CODE:" + rst.getString(1));
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)cn.close();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}else{
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)out.println("rst Fail!");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)else
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)out.println("Fail!");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) }catch(Exception ne){ out.println(ne);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) }


3.2 Statement Pool
鏅氶緙栬瘧浠g爜錛?br />String strSQL=鈥漵elect name from items where id=?鈥?
PreparedStatement ps=conn.prepareStatement(strSQL);
ps.setString(1, 鈥?鈥?;
ResultSet rs=ps.executeQuery();

浣嗘槸PreparedStatement 鏄笌鐗瑰畾鐨凜onnection鍏寵仈鐨勶紝涓鏃onnection鍏抽棴錛屽垯鐩稿叧鐨凱reparedStatement 涔熶細(xì)鍏抽棴銆?br />涓轟簡(jiǎn)鍒涘緩PreparedStatement 緙撳啿姹狅紝鍙互鍦╥nvoke鏂規(guī)硶涓氳繃sql璇彞鍒ゆ柇姹犱腑榪樻湁娌℃湁鍙敤瀹炰緥銆?br />
4. 鎸佷箙灞傝璁′笌O/R mapping 鎶鏈?br />1錛?Hernate錛氶傚悎瀵規(guī)柊浜у搧鐨勫紑鍙戯紝榪涜灝侀棴鍖栫殑璁捐
Hibernate 2003騫磋Jboss鎺ョ錛岄氳繃鎶妀ava pojo瀵硅薄鏄犲皠鍒版暟鎹簱鐨則able涓紝閲囩敤浜?jiǎn)xml/javareflection鎶鏈瓑銆?.0鎻愪緵浜?jiǎn)瀵瑰瓨鍌q囩▼鍜屾墜鍐檚ql鐨勬敮鎸侊紝鏈韓鎻愪緵浜?jiǎn)hql璇█銆?br />寮鍙戞墍闇瑕佺殑鏂囦歡錛?br />hibernate閰嶇疆鏂囦歡錛?hibernate.cfg.xml 鎴?hibernate.properties
hibernate 鏄犲皠鏂囦歡錛?a.hbm.xml
pojo綾繪簮鏂囦歡錛?a.java銆銆

瀵煎嚭琛ㄤ笌琛ㄤ箣闂寸殑鍏崇郴錛?br />a. 浠巎ava瀵硅薄鍒癶bm鏂囦歡錛歺doclet
b. 浠巋bm鏂囦歡鍒癹ava瀵硅薄錛歨ibernate extension
c. 浠庢暟鎹簱鍒癶bm鏂囦歡錛歮iddlegen
d. 浠巋bm鏂囦歡鍒版暟鎹簱錛歋chemaExport

2錛塈atis 錛氶傚悎瀵歸仐鐣欑郴緇熺殑鏀歸犲拰瀵規(guī)棦鏈夋暟鎹簱鐨勫鐢紝鏈夊緢寮虹殑鐏墊椿鎬?3錛?Apache OJB錛氫紭鍔垮湪浜庡鏍囧噯鐨勫叏闈㈡敮鎸?4錛塃JB錛氶傚悎闆嗙兢鏈嶅姟鍣紝鍏舵ц兘涔熶笉璞℃煇浜涗漢鎵璇熺梾鐨勯偅涔堝樊鍔?5錛?JDO (java data object)
璁劇疆涓涓狿roperties瀵硅薄錛屼粠鑰岃幏鍙栦竴涓狫DO鐨凱ersistenceManagerFactory錛堢浉褰撲簬JDBC榪炴帴姹犱腑鐨凞ataSource錛夛紝榪涜岃幏寰椾竴涓狿ersistenceManager瀵硅薄錛堢浉褰撲簬JDBC涓殑Connection瀵硅薄錛夛紝涔嬪悗錛屼綘鍙互鐢ㄨ繖涓狿ersistenceManager瀵硅薄鏉ュ鍔犮佹洿鏂般佸垹闄ゃ佹煡璇㈠璞°?br />JDOQL鏄疛DO鐨勬煡璇㈣璦錛涘畠鏈夌偣璞QL錛屼絾鍗存槸渚濈収Java鐨勮娉曠殑銆?br />
5. 鍩轟簬寮婧愭鏋剁殑Struts+Spring+Hibernate瀹炵幇鏂規(guī)
紺轟緥錛氳繖鏄竴涓?灞傛灦鏋勭殑web 紼嬪簭錛岄氳繃涓涓狝ction 鏉ヨ皟鐢ㄤ笟鍔′唬鐞嗭紝鍐嶉氳繃瀹冩潵鍥炶皟 DAO綾匯備笅闈㈢殑嫻佺▼鍥捐〃紺轟簡(jiǎn)MyUsers鏄浣曞伐浣滅殑銆傛暟瀛楄〃鏄庝簡(jiǎn)嫻佺▼鐨勫厛鍚庨『搴忥紝浠巜eb灞?UserAction)鍒頒腑闂村眰(UserManager)錛屽啀鍒版暟鎹眰(UserDAO)錛岀劧鍚庤繑鍥炪?br />Spring鏄疉OP, UserManager鍜孶serDAO閮芥槸鎺ュ彛.
1)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) web灞?UserAction) 錛氳皟鐢ㄤ腑闂村眰鐨勬帴鍙f柟娉曪紝灝哢serManager浣滀負(fù)灞炴ф敞鍏ャ?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 閲囩敤嫻佽鐨凷truts妗嗘灦錛岃櫧鐒舵湁寰堝浜轟笉灞戜竴欏撅紝浣嗘槸榪欓」鎶鏈湪涓氱晫鐢ㄧ殑姣旇緝鏅亶錛岃兘婊¤凍鍩烘湰鐨勫姛鑳斤紝鍙互鍑忓皯鍩硅瀛︿範(fàn)鎴愭湰銆?br />2)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 涓棿灞?UserManager)錛氬皢UserDAO浣滀負(fù)灞炴ф敞鍏ワ紝鍏跺疄鐜頒富瑕佹槸璋冪敤鏁版嵁灞傛帴鍙g殑涓浜涙柟娉曪紱瀹冨浜庝簨鍔℃帶鍒朵腑銆?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)閲囩敤Spring妗嗘灦瀹炵幇錛孖OC涓嶢OP鏄畠鐨勪唬鍚嶈瘝錛屽姛鑳介綈鍏紝闈炲父媯掔殑涓涓灦鏋勩?br />3)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 鏁版嵁灞?UserDAO)錛氬疄鐜扮被緇ф壙HibernateDaoSupport綾伙紝鍦ㄨ綾諱腑鍙互璋冪敤getHibernateTemplate()鐨勪竴浜涙柟娉曟墽琛屽叿浣撶殑鏁版嵁鎿嶄綔銆?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)閲囩敤Hibernate鍋歄/R mapping錛屼粠縐嶇榪硅薄鍙互鐪嬪嚭錛孒ibernate灝辨槸EJB3.0鐨刡eta鐗堛?/font>

Merlin 2006-07-11 19:10 鍙戣〃璇勮
]]>
[杞琞鍒濆Java娉ㄦ剰浠涔堬紵http://www.shnenglu.com/yunduan5158/archive/2006/07/11/9691.htmlMerlinMerlinTue, 11 Jul 2006 09:00:00 GMThttp://www.shnenglu.com/yunduan5158/archive/2006/07/11/9691.htmlhttp://www.shnenglu.com/yunduan5158/comments/9691.htmlhttp://www.shnenglu.com/yunduan5158/archive/2006/07/11/9691.html#Feedback0http://www.shnenglu.com/yunduan5158/comments/commentRss/9691.htmlhttp://www.shnenglu.com/yunduan5158/services/trackbacks/9691.html
鎴戝湪瀛︿範(fàn)Java鐨勮繃紼嬩腑涓昏鍥寸粫浠ヤ笅鍑犱釜鏂歸潰鏉ュ涔?fàn)锛?xì)

1錛庢椂鍒繪彁閱掕嚜宸盝ava鏄竴縐峅OP璇█宸ュ叿錛岃屼笉浠呬粎鏄紪鐮侊紝鍙湁榪欐牱鎵嶈兘鎬諱綋鎶婃彙鍜岃繍鐢↗ava銆?

2錛庡湪瀛︿範(fàn)鐨勮繃紼嬩腑錛屾渶濂借兘澶熶簡(jiǎn)瑙ava鐨勫簳灞傛満鍒訛紝鑰屼笉鏄粎浠呭仠鐣欏湪琛ㄥ眰錛屼笉鏄妱涔︿笂鐨勪緥瀛愯繍琛屽嚭緇撴灉灝卞彲浠ャ傝娉ㄦ剰錛屽嵆渚垮涓涓畝鍗曠殑渚嬪瓙涔熻鏈夎愬績(jī)鍘葷悽紓ㄣ佽皟璇曘佹敼鍔ㄣ?

3錛庡湪瀛︿範(fàn)鐨勮繃紼嬩腑涓瀹氳鍔ㄦ墜鍋氥佸啓浠g爜錛岃屼笉鏄姳涓鏈功鐪嬬湅灝辮銆傚緢澶氫笢瑗垮拰浣撲細(xì)蹇呴』鑷繁鍔ㄦ墜鎵嶈兘鐪熸灞炰簬鑷繁錛屾渶濂借兘鍙備笌涓浜涘疄闄呯殑欏圭洰銆?

4錛庡湪瀛﹀埌涓瀹氶樁孌靛悗錛屼綘寮濮嬪笇鏈涚敤瀛﹁繃鐨勪笢瑗垮仛浜涗粈涔堛傝繖鏃剁殑浣犲簲璇ュ紑濮嬪涔?fàn)涓浜涙洿澶氥佹洿澶嶆潅鐨勭煡璇嗭紝姣斿J2EE騫沖彴鐨勬瀯寤恒丒JB鐨勫紑鍙戠瓑銆傚浜庤繖涓閮ㄥ垎錛屾垜寤鴻鏈濂芥壘涓鏈緝钖勭殑涔﹀厛浜?jiǎn)瑙d竴涓ぇ姒傦紝蹇?jī)閲屾湁涓諱綋鐨勮璇嗭紝瀵規(guī)洿澶氱殑鎶鏈湳璇仛涓垵姝ユ帉鎻°傛垜璁や負(fù)榪欎釜闃舵鐪嬬湅銆奐2EE鎶鏈疄璺點(diǎn)嬪緢涓嶉敊錛屽畠鍙互璁╀綘浜?jiǎn)瑙2EE鍖呭惈鐨勫悇縐嶆妧鏈拰妗嗘灦錛屽悓鏃舵彁渚涘緢澶氬疄闄呯殑渚嬪瓙鏉ュ姞娣卞J2EE鐨勬暣浣撲簡(jiǎn)瑙c?

瀛︿範(fàn)Java鐨勫叴瓚e拰鍐沖績(jī)璧蜂簡(jiǎn)寰堝叧閿殑浣滅敤銆傚湪鏈変簡(jiǎn)涓婅堪鍩虹鍚庯紝鎴戜究寮濮嬩竴姝ヤ竴姝ュ湴瀛︿範(fàn)Java銆?


Java鐜鐨勬惌寤?br />

瑕佽繍琛孞ava紼嬪簭錛屽繀欏誨畨瑁匤DK銆侸DK鏄暣涓狫ava鐨勬牳蹇?jī)锛屽叾涓寘鎷簡(jiǎn)Java緙栬瘧鍣ㄣ丣VM銆佸ぇ閲忕殑Java宸ュ叿浠ュ強(qiáng)Java鍩虹API銆?

鍙互浠巋ttp://Java.sun.com涓嬭澆JDK錛屾湁1.4鐗堟湰鍜?.31鐗堟湰銆傛垜鐨勫涔?fàn)鐜涓鍏堝Q岄噰鐢ㄧ殑鏄?.31鐗堟湰銆?

瑙e帇瀹夎銆傜劧鍚庯紝榪涜鐜璁劇疆銆?

1.瀵逛簬Windows騫沖彴瑕佽繘琛屼互涓嬭緗細(xì)

set PATH=YOUR_INSTALL_ DIR\bin; C:\Windows;C:\Windows\Command
set classpath=. ;YOUR_INSTALL_DIR\lib\tools.jar



2.瀵逛簬Linux騫沖彴瑕佺紪杈?etc/profile鏂囦歡錛?

JAVA_HOME=your_install_dir/JDK/j2sdk
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/td.jar:$JAVA_HOME/jr聽(tīng)聽(tīng)
-e/lib/rt.jar:.
PATH=$PATH:$JAVA_HOME/bin
export PATH PS1 USER LOGNAME MAIL HOSTNAME HISTSIZE HISTFILESIZE聽(tīng)聽(tīng)
INPUTRC JAVA_HOME CLASSPATH RESIN_HOME



鏈鍚庯紝鍦ㄧ粓绔笂杈撳叆Java鐪嬭兘涓嶈兘鎵懼埌榪欎釜鍛戒護(hù)錛屽鏋滆兘鎵懼埌瀹夎灝辨垚鍔熶簡(jiǎn)銆?

涓嬮潰浠嬬粛涓涓婮DK鐨勫嚑涓噸瑕佺殑鍛戒護(hù)錛?

鈼咼ava鎵ц宸ュ叿錛屾槸鍚姩JVM錛堣櫄鎷熸満錛夊茍鎵цclass錛圔YTE CODE錛夋枃浠剁殑鍛戒護(hù)錛?

鈼唈avac 緙栬瘧鍣紝鐢?java鏂囦歡鐢熸垚.class鏂囦歡錛?

鈼唈ar Java鍘嬬緝鎵撳寘宸ュ叿錛?

鈼咼avadoc 鏂囨。鐢熸垚鍣ㄣ?

鏈鍚庡氨鏄疛DK Documentation錛岃繖鏄疛DK鐨勮仈鏈哄府鍔╂枃妗o紝鏄渶鏈夌敤鍜屾渶閲嶈鐨勫涔?fàn)鍙傝冩枃妗o紝搴旇澶氱湅銆?


寮濮嬪啓鑷繁鐨勪唬鐮?br />

鐜板湪鐜鏈変簡(jiǎn)錛屽簲璇ュ啓涓畝鍗曠殑浠g爜榪涜嫻嬭瘯浜?jiǎn)銆傝繕鏄粠緇忓吀鐨勨渉ello word鈥濆紑濮嬨?

1錛?鍏堢敤緙栬緫鍣ㄥ啓涓浠g爜錛堟垜鐢ㄧ殑鏄疞inux鐨剉i錛夛細(xì)

[stone@coremsg work]$ vi Hello.Java
聽(tīng)聽(tīng)public class Hello{
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)public static void main(String []argc){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)System.out.println("Hello Word!");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)}



2錛?緙栬瘧錛?

[stone@coremsg work]$ Javac Hello.Java



3錛?鎵ц錛?

[stone@coremsg work]$ Java Hello
聽(tīng)聽(tīng)聽(tīng)聽(tīng) Hello Word!



鎴愬姛浜?jiǎn)锛仒q欏氨鏄垜鐨勭涓涓狫ava紼嬪簭銆備粠閭f椂璧鋒垜鐭ラ亾宸插紑濮嬭蛋榪汮ava鐨勪笘鐣岋紝鎺ヤ笅鏉ュ氨闈犺嚜宸辯殑鍔姏浜?jiǎn)銆傚湪榪欎釜榪囩▼涓紝絎旇呰涓烘湁鍑犵偣闇瑕佹敞鎰忋?

瀛︿範(fàn)涓闂ㄦ柊鐨勮璦錛屽弬鑰冧功鏄涓嶅紑鐨勩傛垜鐨勫緩璁槸寮濮嬫渶濂芥壘涓鏈瘒騫呰緝鐭殑鍏ラ棬涔︽潵瀛︿範(fàn)閭d簺鏈綆鍗曘佹渶鍩烘湰鐨勪笢瑗匡紝鍖呮嫭瀛︿範(fàn)Java璇硶絳夈傚悓鏃訛紝瀵逛竴涓渶綆鍗曠殑紼嬪簭涔熷簲璇ュ鍘昏皟璇曪紝澶氭兂鎯沖鏋滄敼鍔ㄤ竴涓嬩細(xì)鍑虹幇浠涔堢粨鏋滐紵涓轟粈涔堝繀欏婚偅鏍峰啓錛熷鍘繪兂鎯寵繖浜涢棶棰樼劧鍚庡幓鎿嶄綔錛屼細(xì)璁╀綘鏈夋洿澶氱殑鏀惰幏銆傝繖鏍峰弽澶嶅湴鎬濊冩槸寰堟湁鐢ㄧ殑銆傛澶栵紝鍦ㄨ繖涓闃舵榪樺簲璇ュ鐪婮DK鐨勮仈鏈哄府鍔╋紝灝介噺澶氬湴鎺屾彙JDK鎻愪緵鐨凧ava鍩烘湰綾誨簱API銆?

鍦ㄦ湁涓瀹氬熀紜銆佽兘澶熷啓涓浜涚畝鍗曠殑紼嬪簭鍚庯紝鍙互寮濮嬬湅銆奣hinking in Java銆嬭繖鏈功銆傚畠姣旇緝瀹屾暣鍦頒粙緇嶄簡(jiǎn)Java鐨勮娉曘侀潰鍚戝璞$殑鐗規(guī)с佹牳蹇?jī)绫诲簱绛夈傞氳繃榪欎竴灞傛鐨勫涔?fàn)鑳藉鍔犳繁瀵笿ava鐨勭悊瑙e拰搴曞眰鍘熺悊鐨勮繍鐢紝鍚屾椂鍙堝彲浠ュ畬鏁村湴浜?jiǎn)瑙ava鐨勬暣涓綋緋匯傚湪榪欎竴闃舵錛屽簲璇ラ噸鐐瑰涔?fàn)Java鐨勯潰鍚戝璞$紪紼嬭璦鐨勭壒鎬э紝姣斿緇ф壙銆佹瀯閫犲櫒銆佹娊璞$被銆佹帴鍙c佹柟娉曠殑澶氭併侀噸杞姐佽鐩栥丣ava鐨勫紓甯稿鐞嗘満鍒剁瓑錛岃瀵逛笂榪版蹇墊湁闈炲父娓呮鐨勪簡(jiǎn)瑙c傝繖鏍峰仛鐨勭洰鐨勶紝鏄璁╄嚜宸辨妸榪欎簺鎶鏈簲鐢ㄥ埌瀹炶返涓繘琛屽悎鐞嗙殑紼嬪簭璁捐錛堟瘮濡傦紝浣犱細(xì)鑰冭檻涓涓被鏄敤鎶借薄榪樻槸鎺ュ彛鏉ヨ璁$瓑錛夈傝繖灝辮姹傚繀欏誨湪澶ч噺鐨勫疄璺典腑鍘誨簲鐢ㄥ拰瀛︿範(fàn)銆傝繖涔熸槸褰撳垵寰堝鏈嬪弸緇欐垜鐨勫緩璁?


瀛︿範(fàn)鏇村


濡傛灉瑕佺敤Java鏉ュ畬鎴愬悇縐嶅姛鑳芥洿寮哄ぇ鐨勪換鍔★紝閭d箞灝辮瀛︿範(fàn)璇█浠ュ鐨勬洿澶氱殑涓滆タ銆?

1.Java Web緙栫▼

瀵逛簬Java Web 緙栫▼鏉ヨ錛屽簲璇ヨ屼笖蹇呴』鐔熸?zhèn)夊拰鎺屾彙HTTP鍗忚錛屽彲浠ュ弬鑰?Stevens鐨勩奣CP/IP 璇﹁В銆嬬涓夊嵎銆侸ava Servlet鎶鏈彁渚涗簡(jiǎn)鐢熸垚鍔ㄦ乄eb欏甸潰鍐呭鐨勮兘鍔涳紝榪欏湪浣犵殑Java欏圭洰涓槸鏈鍩烘湰鐨勫姛鑳戒箣涓錛屾墍浠ュ繀欏誨涔?fàn)銆傞氳繃榪欎竴闃舵鐨勫涔?fàn)搴旇鎺屾彙Servlet/JSP鐨刉eb緙栫▼銆?

2. J2EE鐨勫涔?

J2EE鍖呭惈鐨勬妧鏈お澶氫簡(jiǎn)銆傚鏋滀綘鎯沖潗鍦ㄦ瀛愭梺杈規(guī)姳鐫涓澶у爢涔︽潵瀛︿範(fàn)鐨勮瘽錛屾晥鏋滀笉澶х殑銆傛垜寤鴻鍦ㄥ紑濮嬭繖涓闃舵鐨勫涔?fàn)鐨勬椂鍊欙紝鍙互鎸変互涓嬫楠ゆ潵鍋氾紝鎬葷殑鎬濇兂鏄滄諱綋鎶婃彙錛屽悇涓嚮鐮粹濄?

鈼?浜?jiǎn)瑙2EE涓殑鎶鏈湳璇殑鍚箟銆?

鎴戠殑鎰熻鏄疛2EE鏍囧噯涓秹鍙?qiáng)鍒扮殑鍚効U嶆妧鏈緢澶氾紝濡傛灉涓寮濮嬪氨涓涓竴涓幓瀛︿範(fàn)鐨勮瘽鏄笉鐜板疄鐨勶紝涔熸槸娌℃晥鏋滅殑銆傛垜鐨勫緩璁槸錛屽厛瀵瑰叾涓殑鎶鏈湁涓ぇ姒傜殑浜?jiǎn)瑙eQ屾瘮濡侲JB銆丣avaIDL銆丣TA絳夈傚彲鑳戒綘涓嶇煡閬撴庝箞鍘誨啓涓涓狤JB錛屼絾鏄鐭ラ亾浠涔堟槸EJB銆佸畠鑳藉仛浠涔堬紝褰撴湁浜?jiǎn)杩欐狅L(fēng)殑姒傚康鍚庯紝鍐嶅幓鏈夌洰鐨勫湴瀛︿範(fàn)瀹冨氨浼?xì)蹇緢澶氥傛垜榪樿鍐嶉噸澶嶄竴鍙モ斺斿繀欏昏鍦ㄥ疄璺典腑鍔ㄦ墜鍘誨仛鎵嶈銆?

鈼?浜?jiǎn)瑙2EE涓殑璁捐妯″紡錛岃繖鏍瘋兘甯姪浣犲J2EE鍋氫釜鏁翠綋鎶婃彙銆?

MVC寮鍙戞ā寮忚璇佹槑鏄湁鏁堢殑澶勭悊鏂規(guī)硶涔嬩竴銆傚畠鍙互鍒嗙鏁版嵁璁塊棶鍜屾暟鎹〃鐜般備綘鍙互寮鍙戜竴涓湁浼哥緝鎬х殑銆佷究浜庢墿灞曠殑鎺у埗鍣紝鏉ョ淮鎶ゆ暣涓祦紼嬨傞氳繃榪欎竴灞傛鐨勫涔?fàn)锛屽綋浣犻潰瀵逛竴涓」鐩殑鏃跺欙紝搴旇棣栧厛鎶婃彙瀹冪殑鎬諱綋鏋舵瀯鐨勮璁★紝浠ュ強(qiáng)鍐沖畾閲囩敤J2EE鏍囧噯涓殑鍝簺鎶鏈?

鈼?浜?jiǎn)瑙d竴浜汮2EE騫沖彴鐨勫吀鍨嬫鍒楋紝鍔犳繁瀵硅繖涓鎶鏈殑姒傚康鍜岀悊瑙c?

騫蟲(chóng)椂鍙互澶氱暀鎰忚繖鏂歸潰錛岀啛鎮(zhèn)変竴浜涘吀鍨嬫渚嬶紝鍒嗘瀽瀹冧負(fù)浠涔堣閲囩敤閭d釜鏃墮棿錛熼偅鏍峰仛鑳借揪鍒頒粈涔堟牱鐨勭洰鐨勶紵鐒跺悗鑱旂郴鍒拌嚜宸辮韓杈圭殑欏圭洰鏄惁鍙互浣滀負(fù)鍙傝冦?

鈼?瀛︿範(fàn)J2EE涓嬬殑鍚勭鎶鏈?

鍦ㄦ湁浜?jiǎn)鍓嶅嚑闃秾D電殑瀛︿範(fàn)鍚庯紝鍙互鑷繁鎼緩涓涓狫2EE騫沖彴寮濮嬪叿浣撳涔?fàn)姣忎竴縐嶆妧鏈備綘鍙互鍙備笌鍏徃鐩稿叧欏圭洰榪涜瀛︿範(fàn)錛屼篃鍙互鑷繁鎼緩涓涓鉤鍙拌繘琛屽涔?fàn)銆傝繖鏃跺欏簲璇ユ壘鐐圭浉鍏崇殑涔︽潵涓姝ヤ竴姝ュ涔?fàn)锛屾病鏈夋嵎寰勫彲璧般傚鏋滀綘涓嶆弧瓚充簬榪欎簺錛岄偅涔堣繕搴旇鏇存繁鍏ュ湴瀛︿範(fàn)UML銆佽璁℃ā寮忕瓑鏂歸潰鐨勪笢瑗?img src ="http://www.shnenglu.com/yunduan5158/aggbug/9691.html" width = "1" height = "1" />

Merlin 2006-07-11 17:00 鍙戣〃璇勮
]]>
[杞琞鍒╃敤XMLBean杞昏交鏉炬澗璇誨啓XMLhttp://www.shnenglu.com/yunduan5158/archive/2006/07/10/9659.htmlMerlinMerlinMon, 10 Jul 2006 12:20:00 GMThttp://www.shnenglu.com/yunduan5158/archive/2006/07/10/9659.htmlhttp://www.shnenglu.com/yunduan5158/comments/9659.htmlhttp://www.shnenglu.com/yunduan5158/archive/2006/07/10/9659.html#Feedback0http://www.shnenglu.com/yunduan5158/comments/commentRss/9659.htmlhttp://www.shnenglu.com/yunduan5158/services/trackbacks/9659.html涓銆佸叧浜嶺ML瑙f瀽

銆銆
銆銆XML鍦↗ava搴旂敤紼嬪簭閲屽彉寰楄秺鏉ヨ秺閲嶈, 騫挎硾搴旂敤浜庢暟鎹瓨鍌ㄥ拰浜ゆ崲. 姣斿鎴戜滑甯歌鐨勯厤緗枃浠?閮芥槸浠ML鏂瑰紡瀛樺偍鐨? XML榪樺簲鐢ㄤ簬Java Message Service鍜學(xué)eb Services絳夋妧鏈綔涓烘暟鎹氦鎹?
銆銆
銆銆鍥犳,姝g‘璇誨啓XML鏂囨。鏄疿ML搴旂敤鐨勫熀紜.
銆銆
銆銆Java鎻愪緵浜?jiǎn)SAX鍜孌OM涓ょ鏂瑰紡鐢ㄤ簬瑙f瀽XML,浣嗗嵆渚垮姝?瑕佽鍐欎竴涓◢寰鏉傜殑XML,涔熶笉鏄竴浠跺鏄撶殑浜?
銆銆
銆銆浜屻乆MLBean綆浠?/b>
銆銆
銆銆Hibernate宸茬粡鎴愪負(fù)鐩墠嫻佽鐨勯潰鍚慗ava鐜鐨勫璞?鍏崇郴鏁版嵁搴撴槧灝勫伐鍏?
銆銆
銆銆鍦℉ibernate絳夊璞?鍏崇郴鏁版嵁搴撴槧灝勫伐鍏峰嚭鐜頒箣鍓?瀵規(guī)暟鎹簱鐨勬搷浣滄槸閫氳繃JDBC鏉ュ疄鐜扮殑,瀵規(guī)暟鎹簱鐨勪換浣曟搷浣?寮鍙戜漢鍛橀兘瑕佽嚜宸卞啓SQL璇彞鏉ュ疄鐜? 瀵硅薄/鍏崇郴鏁版嵁搴撴槧灝勫伐鍏峰嚭鐜板悗,瀵規(guī)暟鎹簱鐨勬搷浣滆漿鎴愬JavaBean鐨勬搷浣?鏋佸ぇ鏂逛究浜?jiǎn)鏁版嵁搴撳紑鍙? 鎵浠ュ鏋滄湁涓涓被浼肩殑宸ュ叿鑳藉瀹炵幇灝嗗XML鐨勮鍐欒漿鎴愬JavaBean鐨勬搷浣?灝嗕細(xì)綆鍖朮ML鐨勮鍐?鍗充嬌瀵筙ML涓嶇啛鎮(zhèn)夌殑寮鍙戜漢鍛樹(shù)篃鑳芥柟渚垮湴璇誨啓XML. 榪欎釜宸ュ叿灝辨槸XMLBean.
銆銆
銆銆涓夈佸噯澶嘪MLBean鍜孹ML鏂囨。
銆銆
銆銆XMLBean鏄疉pache鐨勪竴涓紑婧愰」鐩?鍙互浠巋ttp://www.apache.org涓嬭澆,鏈鏂扮殑鐗堟湰鏄?.0. 瑙e帇鍚庣洰褰曞涓?
銆銆xmlbean2.0.0
銆銆+---bin
銆銆+---docs
銆銆+---lib
銆銆+---samples
銆銆+---schemas
銆銆
銆銆鍙﹀榪樿鍑嗗涓涓猉ML鏂囨。(customers.xml),鍦ㄦ湰鏂囩殑渚嬪瓙閲?鎴戜滑灝嗗榪欎釜鏂囨。榪涜璇誨啓鎿嶄綔. 鏂囨。婧愮爜濡備笅:
銆銆<?xml version="1.0" encoding="UTF-8"?><Customers>
銆銆<customer>
銆銆<id>1</id>
銆銆<gender>female</gender>
銆銆<firstname>Jessica</firstname>
銆銆<lastname>Lim</lastname>
銆銆<phoneNumber>1234567</phoneNumber>
銆銆<address>
銆銆<primaryAddress>
銆銆<postalCode>350106</postalCode>
銆銆<addressLine1>#25-1</addressLine1>
銆銆<addressLine2>SHINSAYAMA 2-CHOME</
銆銆addressLine2>
銆銆</primaryAddress>
銆銆<billingAddress>
銆銆<receiver>Ms Danielle</receiver>
銆銆<postalCode>350107</postalCode>
銆銆<addressLine1>#167</addressLine1>
銆銆<addressLine2>NORTH TOWER HARBOUR CITY</addressLine2>
銆銆</billingAddress>
銆銆</address>
銆銆</customer>
銆銆<customer>
銆銆<id>2</id>
銆銆<gender>male</gender>
銆銆<firstname>David</firstname>
銆銆<lastname>Bill</lastname>
銆銆<phoneNumber>808182</phoneNumber>
銆銆<address>
銆銆<primaryAddress>
銆銆<postalCode>319087</postalCode>
銆銆<addressLine1>1033 WS St.</addressLine1>
銆銆<addressLine2>Tima Road</addressLine2>
銆銆</primaryAddress>
銆銆<billingAddress>
銆銆<receiver>Mr William</receiver>
銆銆<postalCode>672993</postalCode>
銆銆<addressLine1>1033 WS St.</addressLine1>
銆銆<addressLine2>Tima Road</addressLine2>
銆銆</billingAddress>
銆銆</address>
銆銆</customer></Customers>
銆銆
銆銆榪欐槸涓涓鎴風(fēng)殑鏁版嵁妯″瀷,姣忎釜瀹㈡埛閮芥湁瀹㈡埛緙栧彿(ID),濮撳悕,鎬у埆(gender),鐢?shù)璇濆忥L(fēng)爜(phoneNumber)鍜屽湴鍧,鍏朵腑鍦板潃鏈変袱涓? 棣栬鍦板潃(PrimaryAddress)鍜屽笎鍗曞湴鍧(BillingAddress),姣忎釜鍦板潃鏈夐偖緙?鍦板潃1,鍜屽湴鍧2緇勬垚.鍏朵腑甯愬崟鍦板潃榪樻湁鏀朵歡浜?receiver).
銆銆
銆銆姝ゅ,榪樿鍑嗗涓涓厤緗枃浠?鏂囦歡鍚峜ustomer.xsdconfig),榪欎釜鏂囦歡鐨勪綔鐢ㄦ垜鍚庨潰浼?xì)璁?瀹冪殑鍐呭濡備笅:
銆銆<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
銆銆<xb:namespace>
銆銆<xb:package>sample.xmlbean</xb:package>
銆銆</xb:namespace></xb:config>
銆銆
銆銆鍥涖乆MLBean浣跨敤姝ラ
銆銆
銆銆鍜屽叾浠栭潰鍚慗ava鐜鐨勫璞?鍏崇郴鏁版嵁搴撴槧灝勫伐鍏風(fēng)殑浣跨敤姝ラ涓鏍?鍦ㄦ寮忎嬌鐢╔MLBean鍓?鎴戜滑瑕佷綔涓や釜鍑嗗.
銆銆
銆銆1. 鐢熸垚XML Schema鏂囦歡
銆銆
銆銆浠涔堟槸XML Schema鏂囦歡? 姝e父鎯呭喌涓?姣忎釜XML鏂囦歡閮芥湁涓涓猄chema鏂囦歡,XML Schema鏂囦歡鏄竴涓猉ML鐨勭害鏉熸枃浠?瀹冨畾涔変簡(jiǎn)XML鏂囦歡鐨勭粨鏋勫拰鍏冪礌.浠ュ強(qiáng)瀵瑰厓绱犲拰緇撴瀯鐨勭害鏉? 閫氫織鍦拌,濡傛灉璇碭ML鏂囦歡鏄暟鎹簱閲岀殑璁板綍,閭d箞Schema灝辨槸琛ㄧ粨鏋勫畾涔?
銆銆
銆銆涓轟粈涔堥渶瑕佽繖涓枃浠? XMLBean闇瑕侀氳繃榪欎釜鏂囦歡鐭ラ亾涓涓猉ML鏂囦歡鐨勭粨鏋勪互鍙?qiáng)绾︽?姣斿鏁版嵁綾誨瀷絳? 鍒╃敤榪欎釜Schema鏂囦歡,XMLBean灝嗕細(xì)浜х敓涓緋誨垪鐩稿叧鐨凧ava Classes鏉ュ疄鐜板XML鐨勬搷浣? 鑰屼綔涓哄紑鍙戜漢鍛?鍒欐槸鍒╃敤XMLBean浜х敓鐨凧ava Classes鏉ュ畬鎴愬XML鐨勬搷浣滆屼笉闇瑕丼AX鎴朌OM.
銆銆
銆銆鎬庢牱浜х敓榪欎釜Schema鏂囦歡鍛? 濡傛灉瀵逛簬鐔熸?zhèn)塜ML鐨勫紑鍙戜漢鍛?鍙互鑷繁鏉ュ啓榪欎釜Schema鏂囦歡,瀵逛簬涓嶇啛鎮(zhèn)塜ML鐨勫紑鍙戜漢鍛?鍙互閫氳繃涓浜涘伐鍏鋒潵瀹屾垚.
銆銆
銆銆姣旇緝鏈夊悕鐨勫XMLSPY鍜孲tylus Studio閮藉彲浠ラ氳繃XML鏂囦歡鏉ョ敓鎴怱chema鏂囦歡. 鍔犲叆鎴戜滑宸茬粡鐢熸垚榪欎釜Schema鏂囦歡(customer.xsd):
銆銆<?xml version="1.0" encoding="UTF-8"?>
銆銆<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
銆銆elementFormDefault="qualified">
銆銆<xs:element name="Customers">
銆銆<xs:complexType>
銆銆<xs:sequence>
銆銆<xs:element maxOccurs="unbounded" name="customer"
銆銆type="customerType"/>
銆銆</xs:sequence>
銆銆</xs:complexType>
銆銆</xs:element>
銆銆<xs:complexType name="customerType">
銆銆<xs:sequence>
銆銆<xs:element name="id" type="xs:int"/>
銆銆<xs:element name="gender" type="xs:string"/>
銆銆<xs:element name="firstname" type="xs:string"/>
銆銆<xs:element name="lastname" type="xs:string"/>
銆銆<xs:element name="phoneNumber" type="xs:string"/>
銆銆<xs:element name="address" type="addressType"/>
銆銆</xs:sequence>
銆銆</xs:complexType>
銆銆<xs:complexType name="addressType">
銆銆<xs:sequence>
銆銆<xs:element name="primaryAddress" type="primaryAddressType"/>
銆銆<xs:element name="billingAddress" type="billingAddressType"/>
銆銆</xs:sequence>
銆銆</xs:complexType>
銆銆<xs:complexType name="primaryAddressType">
銆銆<xs:sequence>
銆銆<xs:element name="postalCode" type="xs:string"/>
銆銆<xs:element name="addressLine1" type="xs:string"/>
銆銆<xs:element name="addressLine2" type="xs:string"/>
銆銆</xs:sequence>
銆銆</xs:complexType>
銆銆<xs:complexType name="billingAddressType">
銆銆<xs:sequence>
銆銆<xs:element name="receiver" type="xs:string"/>
銆銆<xs:element name="postalCode" type="xs:string"/>
銆銆<xs:element name="addressLine1" type="xs:string"/>
銆銆<xs:element name="addressLine2" type="xs:string"/>
銆銆</xs:sequence>
銆銆</xs:complexType>
銆銆</xs:schema>
銆銆
銆銆2. 鍒╃敤scomp鏉ョ敓鎴怞ava Classes
銆銆
銆銆scomp鏄疿MLBean鎻愪緵鐨勪竴涓紪璇戝伐鍏?瀹冨湪bin鐨勭洰褰曚笅. 閫氳繃榪欎釜宸ュ叿,鎴戜滑鍙互灝嗕互涓婄殑Schema鏂囦歡鐢熸垚Java Classes.
銆銆
銆銆scomp鐨勮娉曞涓?-
銆銆
銆銆scomp [options] [dirs]* [schemaFile.xsd]* [service.wsdl]* [config.xsdconfig]*
銆銆
銆銆涓昏鍙傛暟璇存槑:
銆銆-src [dir]銆銆銆銆銆銆銆銆銆-- 鐢熸垚鐨凧ava Classes瀛樻斁鐩綍
銆銆-srconly銆銆銆銆銆銆銆銆銆-- 涓嶇紪璇慗ava Classes,涓嶄駭鐢烰ar鏂囦歡
銆銆-out [jarFileName]銆-- 鐢熸垚鐨凧ar鏂囦歡,緙虹渷鏄痻mltypes.jar
銆銆-compiler銆銆銆銆銆銆銆銆 -- Java緙栬瘧鍣ㄧ殑璺緞,鍗矹avac鐨勪綅緗?br />銆銆schemaFile.xsd銆銆-- XML Schema鏂囦歡浣嶇疆
銆銆config.xsdconfig銆 -- xsdconfig鏂囦歡鐨勪綅緗? 榪欎釜鏂囦歡涓昏鐢ㄦ潵鍒跺畾鐢熸垚鐨凧ava Class
銆銆鐨勪竴浜涙枃浠跺悕瑙勫垯鍜孭ackage鐨勫悕縐?鍦ㄦ湰鏂?package鏄痵ample.xmlbean
銆銆
銆銆鍦ㄦ湰鏂?鎴戞槸榪欐牱榪愯鐨?
銆銆scomp -src build\src銆-out build\customerXmlBean.jar schema\customer.xsd
銆銆-compiler C:\jdk142_04\bin\javac customer.xsdconfig
銆銆
銆銆榪欎釜鍛戒護(hù)琛岀殑鎰忔濇槸鍛婅瘔scomp鐢熸垚customerXmlBean.jar,鏀懼湪build鐩綍涓?鍚屾椂
銆銆鐢熸垚婧愪唬鐮佹斁鍦╞uild\src涓? Schema鏂囦歡鏄痗ustomer.xsd,xsdconfig鏂囦歡鏄痗ustomer.xsdconfig.
銆銆
銆銆鍏跺疄, 鐢熸垚鐨凧ava婧愪唬鐮佹病鏈夊澶т綔鐢?鎴戜滑瑕佺殑鏄痡ar鏂囦歡.鎴戜滑鍏堢湅涓涓媌uild\src\sample\xmlbean涓嬬敓鎴愮殑Classes.
銆銆CustomersDocument.java
銆銆-- 鏁翠釜XML鏂囨。鐨凧ava Class鏄犲皠
銆銆CustomerType.java
銆銆-- 鑺傜偣sustomer鐨勬槧灝?br />銆銆AddressType.java
銆銆-- 鑺傜偣address鐨勬槧灝?br />銆銆BillingAddressType.java
銆銆-- 鑺傜偣billingAddress鐨勬槧灝?br />銆銆PrimaryAddressType.java
銆銆-- 鑺傜偣primaryAddress鐨勬槧灝?br />銆銆
銆銆濂戒簡(jiǎn),鍒版鎴戜滑鎵鏈夌殑鍑嗗宸ヤ綔宸茬粡瀹屾垚浜? 涓嬮潰灝卞紑濮嬭繘鍏ラ噸鐐癸細(xì)鍒╃敤鍒氭墠鐢熸垚鐨刯ar鏂囦歡璇誨啓XML.
銆銆
銆銆浜斻佸埄鐢╔MLBean璇籜ML鏂囦歡
銆銆
銆銆鏂板緩涓涓狫ava Project,灝哫MLBean2.0.0\lib\涓嬬殑Jar鏂囦歡鍜屽垰鎵嶆垜浠敓鎴愮殑customerXmlBean.jar鍔犲叆
銆銆
銆銆鍒癙roject鐨凜lassPath.
銆銆
銆銆鏂板緩涓涓狫ava Class: CustomerXMLBean.銆婧愮爜濡備笅:
銆銆package com.sample.reader;
銆銆import java.io.File;
銆銆import sample.xmlbean.*;
銆銆import org.apache.commons.beanutils.BeanUtils;
銆銆import org.apache.xmlbeans.XmlOptions;
銆銆public class CustomerXMLBean {
銆銆private String filename = null;
銆銆public CustomerXMLBean(String filename) {
銆銆super();
銆銆this.filename = filename;
銆銆}
銆銆public void customerReader() {
銆銆try {
銆銆File xmlFile = new File(filename);
銆銆CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);
銆銆CustomerType[] customers = doc.getCustomers().getCustomerArray();
銆銆for (int i = 0; i < customers.length; i++) {
銆銆CustomerType customer = customers[i];
銆銆println("Customer#" + i);
銆銆println("Customer ID:" + customer.getId());
銆銆println("First name:" + customer.getFirstname());
銆銆println("Last name:" + customer.getLastname());
銆銆println("Gender:" + customer.getGender());
銆銆println("PhoneNumber:" + customer.getPhoneNumber());
銆銆// Primary address
銆銆PrimaryAddressType primaryAddress = customer.getAddress().getPrimaryAddress();
銆銆println("PrimaryAddress:");
銆銆println("PostalCode:" + primaryAddress.getPostalCode());
銆銆println("AddressLine1:" + primaryAddress.getAddressLine1());
銆銆println("AddressLine2:" + primaryAddress.getAddressLine2());
銆銆// Billing address
銆銆BillingAddressType billingAddress = customer.getAddress().getBillingAddress();
銆銆println("BillingAddress:");
銆銆println("Receiver:" + billingAddress.getReceiver());
銆銆println("PostalCode:" + billingAddress.getPostalCode());
銆銆println("AddressLine1:" + billingAddress.getAddressLine1());
銆銆println("AddressLine2:" + billingAddress.getAddressLine2());
銆銆}
銆銆} catch (Exception ex) {
銆銆ex.printStackTrace();
銆銆}
銆銆}
銆銆private void println(String str) {
銆銆System.out.println(str);銆銆}銆 public static void main(String[] args) {
銆銆String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers.xml";
銆銆CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
銆銆customerXMLBean.customerReader();
銆銆}
銆銆}
銆銆
銆銆榪愯瀹?鍙傜湅杈撳嚭緇撴灉:
銆銆Customer#0
銆銆Customer ID:1
銆銆First name:Jessica
銆銆Last name:Lim
銆銆Gender:female
銆銆PhoneNumber:1234567
銆銆PrimaryAddress:
銆銆PostalCode:350106
銆銆AddressLine1:#25-1
銆銆AddressLine2:SHINSAYAMA 2-CHOME
銆銆BillingAddress:
銆銆Receiver:Ms Danielle
銆銆PostalCode:350107
銆銆AddressLine1:#167
銆銆AddressLine2:NORTH TOWER HARBOUR CITY
銆銆Customer#1
銆銆Customer ID:2
銆銆First name:David
銆銆Last name:Bill
銆銆Gender:male
銆銆PhoneNumber:808182
銆銆PrimaryAddress:
銆銆PostalCode:319087
銆銆AddressLine1:1033 WS St.
銆銆AddressLine2:Tima Road
銆銆BillingAddress:
銆銆Receiver:Mr William
銆銆PostalCode:672993
銆銆AddressLine1:1033 WS St.
銆銆AddressLine2:Tima Road
銆銆鎬庝箞鏍?鏄笉鏄緢杞繪澗? XMLBean鐨勫▉鍔?
銆銆
銆銆鍏佸埄鐢╔MLBean鍐橷ML鏂囦歡
銆銆
銆銆鍒╃敤XMLBean鍒涘緩涓涓猉ML鏂囨。涔熸槸涓浠惰交鑰屾槗涓劇殑浜?鎴戜滑鍐嶅鍔犱竴涓狹ethod,
銆銆璇風(fēng)湅涓涓嬬殑Java Class:
銆銆public void createCustomer() {
銆銆try {
銆銆// Create Document
銆銆CustomersDocument doc = CustomersDocument.Factory.newInstance();
銆銆// Add new customer
銆銆CustomerType customer = doc.addNewCustomers().addNewCustomer();
銆銆// set customer info
銆銆customer.setId(3);
銆銆customer.setFirstname("Jessica");
銆銆customer.setLastname("Lim");
銆銆customer.setGender("female");
銆銆customer.setPhoneNumber("1234567");
銆銆// Add new address
銆銆AddressType address = customer.addNewAddress();
銆銆// Add new PrimaryAddress
銆銆PrimaryAddressType primaryAddress = address.addNewPrimaryAddress();
銆銆primaryAddress.setPostalCode("350106");
銆銆primaryAddress.setAddressLine1("#25-1");
銆銆primaryAddress.setAddressLine2("SHINSAYAMA 2-CHOME");
銆銆// Add new BillingAddress
銆銆BillingAddressType billingAddress = address.addNewBillingAddress();
銆銆billingAddress.setReceiver("Ms Danielle");
銆銆billingAddress.setPostalCode("350107");
銆銆billingAddress.setAddressLine1("#167");
銆銆billingAddress.setAddressLine2("NORTH TOWER HARBOUR CITY");
銆銆File xmlFile = new File(filename);
銆銆doc.save(xmlFile);銆銆銆銆} catch (Exception ex) {
銆銆ex.printStackTrace();銆銆銆銆}銆}
銆銆淇敼main method.
銆銆public static void main(String[] args) {
銆銆String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";
銆銆CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
銆銆customerXMLBean.createCustomer();
銆銆}
銆銆榪愯,鎵撳紑customers_new.xml:
銆銆<?xml version="1.0" encoding="UTF-8"?>
銆銆<Customers>
銆銆<customer>
銆銆<id>3</id>
銆銆<gender>female</gender>
銆銆<firstname>Jessica</firstname>
銆銆<lastname>Lim</lastname>
銆銆<phoneNumber>1234567</phoneNumber>
銆銆<address>
銆銆<primaryAddress>
銆銆<postalCode>350106</postalCode>
銆銆<addressLine1>#25-1</addressLine1>
銆銆<addressLine2>SHINSAYAMA 2-CHOME</addressLine2>
銆銆</primaryAddress>
銆銆<billingAddress>
銆銆<receiver>Ms Danielle</receiver>
銆銆<postalCode>350107</postalCode>
銆銆<addressLine1>#167</addressLine1>
銆銆<addressLine2>NORTH TOWER HARBOUR CITY</addressLine2>
銆銆</billingAddress>
銆銆</address>
銆銆</customer>
銆銆</Customers>
銆銆
銆銆涓冦佸埄鐢╔MLBean淇敼XML鏂囦歡
銆銆
銆銆鎴戜滑鍐嶅鍔犱竴涓狹ethod:
銆銆public void updateCustomer(int id,String lastname) {
銆銆try {
銆銆File xmlFile = new File(filename);
銆銆CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);
銆銆CustomerType[] customers = doc.getCustomers().getCustomerArray();
銆銆for (int i = 0; i < customers.length; i++) {
銆銆CustomerType customer = customers[i];
銆銆if(customer.getId()==id){
銆銆customer.setLastname(lastname);
銆銆break;
銆銆}
銆銆}
銆銆doc.save(xmlFile);
銆銆} catch (Exception ex) {
銆銆ex.printStackTrace();
銆銆}
銆銆}
銆銆main method:
銆銆public static void main(String[] args) {
銆銆String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";
銆銆CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
銆銆customerXMLBean.updateCustomer(3,"last");銆銆}
銆銆榪愯涔嬪悗,鎴戜滑灝嗕細(xì)鐪嬪埌瀹㈡埛緙栧彿涓?鐨勫鎴風(fēng)殑lastname宸茬粡鏀逛負(fù)last.
銆銆
銆銆鍏佸埄鐢╔MLBean鍒犻櫎涓涓猚ustomer
銆銆
銆銆鍐嶅鍔犱竴涓狹ethod:
銆銆public void deleteCustomer(int id) {
銆銆try {
銆銆File xmlFile = new File(filename);
銆銆CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);
銆銆CustomerType[] customers = doc.getCustomers().getCustomerArray();
銆銆for (int i = 0; i < customers.length; i++) {
銆銆CustomerType customer = customers[i];
銆銆if(customer.getId()==id){
銆銆customer.setNil() ;
銆銆break;
銆銆}
銆銆}
銆銆doc.save(xmlFile);
銆銆} catch (Exception ex) {
銆銆ex.printStackTrace();
銆銆}
銆銆}
銆銆
銆銆main method:
銆銆public static void main(String[] args) {
銆銆String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";
銆銆CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
銆銆customerXMLBean.deleteCustomer(3);
銆銆}
銆銆
銆銆榪愯,鎴戜滑灝嗕細(xì)鐪嬪埌瀹㈡埛緙栧彿涓?鐨勫鎴風(fēng)殑璧勬枡宸茬粡琚垹闄?
銆銆
銆銆涔?jié)銆佹煡璇ML
銆銆

銆銆闄や簡(jiǎn)鏈枃鍦ㄤ互涓婅榪扮殑,鍒╃敤XMLBean鑳借交杞繪澗鏉懼畬鎴怷ML鐨勮鍐欐搷浣滃,緇撳悎XPath鍜孹Query,
銆銆
銆銆XMLBean榪樿兘瀹屾垚璞QL鏌ヨ鏁版嵁搴撲竴鏍鋒柟渚垮湴鏌ヨXML鏁版嵁. 鍏充簬XML鏌ヨ浠ュ強(qiáng)濡備綍鍒涘緩XML鏁版嵁搴? 鎴戝皢鍦ㄥ彟涓綃囨枃绔犻噷璁ㄨ.
銆銆
銆銆鍗併佺粨鏉熻
銆銆
銆銆XMLBean鑳藉府鍔╂垜浠交鏄撹鍐橷ML,榪欏皢鏈夊姪浜庢垜浠檷浣嶺ML鐨勫涔?fàn)鍜屼娇鐢?鏈変簡(jiǎn)榪欎釜鍩虹,寮鍙戜漢鍛樺皢涓哄涔?fàn)鏇村鍦癤ML鐩稿叧鎶鏈拰W(xué)eb Services,JMS絳夊叾浠朖2EE鎶鏈墦涓嬭壇濂藉湴鍩虹.

Merlin 2006-07-10 20:20 鍙戣〃璇勮
]]>[杞琞Java涓嶺ML錛堜笁錛墂eb涓婄殑璇誨啓搴旂敤http://www.shnenglu.com/yunduan5158/archive/2006/07/10/9653.htmlMerlinMerlinMon, 10 Jul 2006 10:31:00 GMThttp://www.shnenglu.com/yunduan5158/archive/2006/07/10/9653.htmlhttp://www.shnenglu.com/yunduan5158/comments/9653.htmlhttp://www.shnenglu.com/yunduan5158/archive/2006/07/10/9653.html#Feedback0http://www.shnenglu.com/yunduan5158/comments/commentRss/9653.htmlhttp://www.shnenglu.com/yunduan5158/services/trackbacks/9653.html闃呰鍏ㄦ枃

Merlin 2006-07-10 18:31 鍙戣〃璇勮
]]>
[杞琞Java涓嶺ML錛堜簩錛夌敤java緙栧啓xml鐨勮鍐欑▼搴?/title><link>http://www.shnenglu.com/yunduan5158/archive/2006/07/10/9652.html</link><dc:creator>Merlin</dc:creator><author>Merlin</author><pubDate>Mon, 10 Jul 2006 10:16:00 GMT</pubDate><guid>http://www.shnenglu.com/yunduan5158/archive/2006/07/10/9652.html</guid><wfw:comment>http://www.shnenglu.com/yunduan5158/comments/9652.html</wfw:comment><comments>http://www.shnenglu.com/yunduan5158/archive/2006/07/10/9652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/yunduan5158/comments/commentRss/9652.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/yunduan5158/services/trackbacks/9652.html</trackback:ping><description><![CDATA[     鎽樿: 榪欐槸璇誨彇xml鏂囦歡鐨刯ava紼嬪簭錛屾垜璋冭瘯濂界殑銆傞噰鐢ㄧ殑鏄痙om鏂瑰紡璇誨彇xml鏂囦歡鍒癡ector涓? 聽(tīng)1 package 聽(tīng)src; 聽(tīng)2 import 聽(tīng)java.io. * ; 聽(tīng)3 import ...  <a href='http://www.shnenglu.com/yunduan5158/archive/2006/07/10/9652.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/yunduan5158/aggbug/9652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/yunduan5158/" target="_blank">Merlin</a> 2006-07-10 18:16 <a href="http://www.shnenglu.com/yunduan5158/archive/2006/07/10/9652.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[杞琞Java涓嶺ML錛堜竴錛夊熀紜http://www.shnenglu.com/yunduan5158/archive/2006/07/10/9649.htmlMerlinMerlinMon, 10 Jul 2006 09:33:00 GMThttp://www.shnenglu.com/yunduan5158/archive/2006/07/10/9649.htmlhttp://www.shnenglu.com/yunduan5158/comments/9649.htmlhttp://www.shnenglu.com/yunduan5158/archive/2006/07/10/9649.html#Feedback0http://www.shnenglu.com/yunduan5158/comments/commentRss/9649.htmlhttp://www.shnenglu.com/yunduan5158/services/trackbacks/9649.htmlJAXP API--宓屽叆涓嶅悓鐨勮В閲婂櫒

SAX瑙i噴鍣?DOM瑙i噴鍣?XSL杞崲鍣?/p>

javax.xml.parsers涓姞杞絏ML鏂囨。鐨勭被錛?br />DocumentBuilder
DocumentBuildrFactory
SAXParser
SAXParserFactory
=====================================
SAX API

SAX鐨刋ML瑙i噴鍣細(xì)Apache鐨刋erces鎴朇rimson

澶勭悊XML鏂囨。鐨勬帴鍙o細(xì)
ContentHandler
EntityResolver
ErroHandler
DTDHandler

DeclHandler
LexicalHandler
======================================
DOM API

涓や釜DOM鏍囧噯錛欴OM Level1 DOM Level 2 Core

鑺傜偣
Node-鑺傜偣綾誨瀷鎺ュ彛灞傛緇撴瀯鐨勬牴銆?br />Document-鏍?wèi)缁撴瀯鐨勬?br />Element-XML鍏冪礌
Text-鍏冪礌鍐呯殑鏂囨湰
Attr-鍏冪礌鐨勭壒鎬?br />CDATA Sectionn-CDATA
NodeList-瀛愯妭鐐圭殑闆嗗悎
ProcessingInstruction-鎸囦護(hù)
Comment-鍖呭惈娉ㄩ噴鐨勪俊鎭?br />DocumentFragment-Document鐨勬秷鍑忕増錛岀敤浜庡湪鏍?wèi)涓U誨姩鑺傜偣
DocumentType-鏂囨。綾誨瀷瀹氫箟鐨勫瓙闆嗐?br />Entity-DTD涓殑瀹炰綋鏍囪
EntityReference-XML鏂囨。涓殑瀹炰綋寮曠敤
Notation-DTD涓殑絎﹀彿鏍囪


浠庣▼搴忎腑璇誨彇X M L鏂囨。鍩烘湰涓婃湁涓夌鏂瑰紡錛?br />1鎶奨 M L鍙綋鍋氫竴涓枃浠惰鍙栵紝鐒跺悗鑷繁鎸?xiě)閫夊嚭鍏朵腑鐨勬爣絳俱傝繖鏄粦瀹滑鐨勬柟娉曪紝鎴戜滑涓嶆帹鑽愯繖縐嶆柟寮忋?br />浣犲緢蹇細(xì)鍙戠幇澶勭悊鎵鏈夌殑鐗規(guī)畩鎯呭喌錛堝寘鎷笉鍚岀殑瀛楃緙栫爜錛屼緥澶栫害瀹氾紝鍐呴儴鍜屽閮ㄥ疄浣擄紝緙虹渷灞炴х瓑錛夋瘮鎯寵薄鐨勫洶闅懼緱澶氾紱
浣犲彲鑳戒笉鑳藉姝g‘鍦板鐞嗘墍鏈夌殑鐗規(guī)畩鎯呭喌錛岃繖鏍蜂綘鐨勭▼搴忎細(xì)鎺ユ敹鍒頒竴涓潪甯歌鑼冪殑X M L鏂囨。錛屽嵈涓嶈兘姝g‘鍦板鐞嗗畠銆?br />瑕侀伩鍏嶈繖縐嶆兂娉曪細(xì)XML瑙f瀽鍣ㄤ技涔庡茍涓嶆槀璐碉紙澶у鏁版槸鍏嶈垂鐨勶級(jí)銆?br />2鍙互鐢ㄨВ鏋愬櫒鍒嗘瀽鏂囨。騫跺湪鍐呭瓨閲屽垱寤哄鏂囨。鍐呭鏍?wèi)鐘剁殑琛ㄨ揪鏂瑰紡锛?xì)瑙f瀽鍣ㄥ皢杈撳嚭浼犻掔粰鏂囨。瀵硅薄妯″瀷錛屽嵆DOM銆?br />榪欐牱紼嬪簭鍙互浠庢爲(wèi)鐨勯《閮ㄥ紑濮嬮亶鍘嗭紝鎸夌収浠庝竴涓爲(wèi)鍗曞厓鍒板彟涓涓崟鍏冪殑寮曠敤錛屼粠鑰屾壘鍒伴渶瑕佺殑淇℃伅銆?br />3涔熷彲浠ョ敤瑙f瀽鍣ㄨ鍙栨枃妗o紝褰撹В鏋愬櫒鍙戠幇鏍囩鏃跺憡鐭ョ▼搴忓畠鍙戠幇鐨勬爣絳俱?br />渚嬪瀹冧細(xì)鍛婄煡瀹冧綍鏃跺彂鐜頒簡(jiǎn)涓涓紑濮嬫爣絳撅紝浣曟椂鍙戠幇浜?jiǎn)涓浜涚壒寰佹暟鎹紝浠ュ強(qiáng)浣曟椂鍙戠幇浜?jiǎn)涓涓粨鏉熸爣絳俱?br />榪欏彨鍋氫簨浠墮┍鍔ㄦ帴鍙o紝鍥犱負(fù)瑙f瀽鍣ㄥ憡鐭ュ簲鐢ㄧ▼搴忓畠閬囧埌鐨勬湁鍚箟鐨勪簨浠躲?br />濡傛灉榪欐鏄綘闇瑕佺殑閭g鎺ュ彛錛屽彲浠ヤ嬌鐢⊿AX銆?br />
SAX鏄彧璇葷殑
DOM鍙互浠嶺ML鍘熸枃浠朵腑璇誨彇鏂囨。錛屼篃鍙互鍒涘緩鍜屼慨鏀瑰唴瀛樹(shù)腑鐨勬枃妗c傜浉姣旇緝鑰岃█錛孲AX鏄敤鏉ヨ鍙朮ML鏂囨。鑰屼笉鏄功鍐欐枃妗c?br />
鍙墿灞曟牱寮忚璦(XSL,eXtensible Sytlesheet Language錛夋槸涓縐嶅熀浜嶺ML鐨勮璦錛?br />瀹冭璁捐鐢ㄦ潵杞崲XML鏂囨。鍒板彟涓縐峏ML鏂囨。鎴栬漿鎹ML鏂囨。涓哄彲緲昏瘧瀵硅薄銆?br />鍘熷鐨刋SL璇█宸茬粡琚垎鍓叉垚涓夌涓嶅悓鐨勮璦錛?br />1杞崲宸ュ叿錛圶SLT錛夋槸涓縐嶈漿鎹ML鏂囨。鍒板叾浠朮ML鏂囨。鐨勮璦
2緲昏瘧宸ュ叿錛圶SLF鈥斿彲浠ュ寘鎷琗 S LT鐨勪嬌鐢級(jí)
3XML鍒嗙駭鍛戒護(hù)澶勭悊宸ュ叿錛圶Path錛?br />XSL鏈夊畠鑷凡鐨勬牴錛屼笉綆℃槸鍦ㄥ眰鍙犳牱寮忚〃錛圕SS錛変腑榪樻槸鍦ㄤ竴縐嶅彨DSSSL(鏂囨。鏍峰紡璇箟鍜岃鏍艱璦鈥旇涓?deessel')鐨勮璦涓?br />闅忕潃瀹冪殑鍙戝睍錛孹SL鐨勬牱寮忚〃鐜板彉寰楁洿鎺ヨ繎浜嶤SS鍜岃繙紱籇SSSL



Merlin 2006-07-10 17:33 鍙戣〃璇勮
]]>
浣滅敤鍩?/title><link>http://www.shnenglu.com/yunduan5158/archive/2006/04/27/6397.html</link><dc:creator>Merlin</dc:creator><author>Merlin</author><pubDate>Thu, 27 Apr 2006 13:47:00 GMT</pubDate><guid>http://www.shnenglu.com/yunduan5158/archive/2006/04/27/6397.html</guid><wfw:comment>http://www.shnenglu.com/yunduan5158/comments/6397.html</wfw:comment><comments>http://www.shnenglu.com/yunduan5158/archive/2006/04/27/6397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/yunduan5158/comments/commentRss/6397.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/yunduan5158/services/trackbacks/6397.html</trackback:ping><description><![CDATA[ <p>瀛﹀畬浜?jiǎn)C++,鍦ㄥjava錛?浼?xì)鍙戠幇寰堝涓滆タ寰堝儚锛屾垜鍦q欏氨鍙槸璁板綍涓浜涗笉鍚岀殑鍦版柟錛屽叾浠栫殑灝變笉鎻愪簡(jiǎn) 鍛靛懙<br /><br />榪欎釜鍦╦ava涓槸涓嶅悎娉曠殑錛?br /><br /></p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <span style="COLOR: #008080">1</span> <img id="Codehighlighter1_0_26_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_26_Open_Text.style.display='none'; Codehighlighter1_0_26_Closed_Image.style.display='inline'; Codehighlighter1_0_26_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_0_26_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_26_Closed_Text.style.display='none'; Codehighlighter1_0_26_Open_Image.style.display='inline'; Codehighlighter1_0_26_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> <span id="Codehighlighter1_0_26_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_0_26_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080">2</span> <span style="COLOR: #000000"> <img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000">聽(tīng)x</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">12</span> <span style="COLOR: #000000">;<br /></span> <span style="COLOR: #008080">3</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_12_24_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12_24_Open_Text.style.display='none'; Codehighlighter1_12_24_Closed_Image.style.display='inline'; Codehighlighter1_12_24_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_12_24_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_24_Closed_Text.style.display='none'; Codehighlighter1_12_24_Open_Image.style.display='inline'; Codehighlighter1_12_24_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span> <span id="Codehighlighter1_12_24_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_12_24_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080">4</span> <span style="COLOR: #000000"> <img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000">聽(tīng)x</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">23</span> <span style="COLOR: #000000">;<br /></span> <span style="COLOR: #008080">5</span> <span style="COLOR: #000000"> <img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span> </span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #008080">6</span> <span style="COLOR: #000000"> <img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> </div>緙栬瘧鍣ㄤ細(xì)璇?x宸茬粡瀹氫箟浜?jiǎn)锛屽懙鍛点銆?img src ="http://www.shnenglu.com/yunduan5158/aggbug/6397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/yunduan5158/" target="_blank">Merlin</a> 2006-04-27 21:47 <a href="http://www.shnenglu.com/yunduan5158/archive/2006/04/27/6397.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://ssni888.com" target="_blank">久久精品国产久精国产思思</a>| <a href="http://51120guahao.com" target="_blank">欧美激情a∨在线视频播放</a>| <a href="http://sanlans888.com" target="_blank">久久另类ts人妖一区二区</a>| <a href="http://244223.com" target="_blank">亚洲美女电影在线</a>| <a href="http://72966t.com" target="_blank">欧美电影在线观看完整版</a>| <a href="http://jiejiesao8.com" target="_blank">欧美在线999</a>| <a href="http://23230066.com" target="_blank">亚洲永久视频</a>| <a href="http://maomi54.com" target="_blank">在线视频成人</a>| <a href="http://663747.com" target="_blank">亚洲成人在线观看视频</a>| <a href="http://korean-edu.com" target="_blank">久久成人精品电影</a>| <a href="http://bandycup.com" target="_blank">久久精品人人爽</a>| <a href="http://6hzl8.com" target="_blank">久久精品一区四区</a>| <a href="http://shnenglu.com" target="_blank">久久久久久穴</a>| <a href="http://3990033.com" target="_blank">欧美风情在线观看</a>| <a href="http://119552.com" target="_blank">亚洲精品一区二区三区在线观看 </a>| <a href="http://569688.com" target="_blank">精品不卡一区</a>| <a href="http://by3799.com" target="_blank">最新成人在线</a>| <a href="http://495177.com" target="_blank">欧美一区1区三区3区公司</a>| <a href="http://aqdav81.com" target="_blank">六十路精品视频</a>| <a href="http://340996.com" target="_blank">一区二区三区精品在线 </a>| <a href="http://160160160.com" target="_blank">在线一区二区三区四区五区</a>| <a href="http://www-188444.com" target="_blank">欧美新色视频</a>| <a href="http://maisuper.com" target="_blank">欧美福利视频一区</a>| <a href="http://hjk56.com" target="_blank">亚洲免费黄色</a>| <a href="http://woniuminsu.com" target="_blank">午夜在线视频观看日韩17c</a>| <a href="http://wwwp6660.com" target="_blank">久久精品一本</a>| <a href="http://df7166.com" target="_blank">国产精品久久久久久久一区探花 </a>| <a href="http://yp889.com" target="_blank">欧美国产精品劲爆</a>| <a href="http://152mu.com" target="_blank">国产精品久久久久久超碰</a>| <a href="http://ziwufuren.com" target="_blank">国产亚洲精品资源在线26u</a>| <a href="http://xmzszx.com" target="_blank">亚洲精品少妇网址</a>| <a href="http://305838.com" target="_blank">久久国产精品网站</a>| <a href="http://zhengnuoxin.com" target="_blank">国产伦精品一区二区三区四区免费</a>| <a href="http://yyyy456.com" target="_blank">国产精品久在线观看</a>| <a href="http://xxav2121.com" target="_blank">亚洲第一在线综合在线</a>| <a href="http://4449992.com" target="_blank">欧美亚洲在线观看</a>| <a href="http://jybiotek.com" target="_blank">亚洲理伦电影</a>| <a href="http://www-485050.com" target="_blank">久久综合狠狠</a>| <a href="http://78757a.com" target="_blank">国语自产精品视频在线看8查询8</a>| <a href="http://hhhh19.com" target="_blank">亚洲先锋成人</a>| <a href="http://northboiler.com" target="_blank">91久久精品美女高潮</a>| <a href="http://khc83.com" target="_blank">欧美一区二粉嫩精品国产一线天</a>| <a href="http://412342.com" target="_blank">欧美日韩国产在线一区</a>| <a href="http://xhs1039.com" target="_blank">亚洲国产精品专区久久</a>| <a href="http://chaxiangmall.com" target="_blank">久久久久亚洲综合</a>| <a href="http://6055365.com" target="_blank">小处雏高清一区二区三区</a>| <a href="http://1397979.com" target="_blank">欧美日韩一区二区在线视频</a>| <a href="http://www433444.com" target="_blank">亚洲精品乱码久久久久</a>| <a href="http://wwwsenvpu.com" target="_blank">欧美91福利在线观看</a>| <a href="http://wwww76.com" target="_blank">久久精品夜色噜噜亚洲aⅴ</a>| <a href="http://4430x.com" target="_blank">国产日韩欧美三级</a>| <a href="http://arielteam.com" target="_blank">欧美亚洲三区</a>| <a href="http://haohetour.com" target="_blank">亚洲一区在线播放</a>| <a href="http://shruhan.com" target="_blank">国产精品每日更新在线播放网址</a>| <a href="http://ooonefteprompellets.com" target="_blank">亚洲精品视频中文字幕</a>| <a href="http://ddnwater.com" target="_blank">欧美成人xxx</a>| <a href="http://794579.com" target="_blank">久久久夜色精品亚洲</a>| <a href="http://www-800778.com" target="_blank">国产日产欧美a一级在线</a>| <a href="http://aimashe.com" target="_blank">中文网丁香综合网</a>| <a href="http://95gun.com" target="_blank">亚洲国产成人午夜在线一区</a>| <a href="http://ybshg.com" target="_blank">久久综合综合久久综合</a>| <a href="http://shght.com" target="_blank">亚洲福利视频在线</a>| <a href="http://292q.com" target="_blank">亚洲高清视频的网址</a>| <a href="http://dehuabz.com" target="_blank">欧美大片第1页</a>| <a href="http://13751144594.com" target="_blank">亚洲精品中文字幕女同</a>| <a href="http://www16axax.com" target="_blank">亚洲日本中文字幕</a>| <a href="http://3597777.com" target="_blank">欧美三级电影网</a>| <a href="http://yashikeji.com" target="_blank">亚洲欧美一级二级三级</a>| <a href="http://149155.com" target="_blank">亚洲欧美日韩电影</a>| <a href="http://954k.com" target="_blank">国产一区二区三区久久 </a>| <a href="http://zhijiasd.com" target="_blank">亚洲日本成人在线观看</a>| <a href="http://china391.com" target="_blank">免费在线观看日韩欧美</a>| <a href="http://quoviajes.com" target="_blank">久久久久一区二区三区</a>| <a href="http://www-777324.com" target="_blank">韩国av一区二区三区四区</a>| <a href="http://5252bnet.com" target="_blank">久久婷婷麻豆</a>| <a href="http://www-45553.com" target="_blank">欧美.www</a>| <a href="http://389746.com" target="_blank">亚洲综合欧美日韩</a>| <a href="http://337105.com" target="_blank">一区二区三区视频在线</a>| <a href="http://5555547.com" target="_blank">亚洲激情社区</a>| <a href="http://4399360.com" target="_blank">国产精品久久久久aaaa</a>| <a href="http://xaipad.com" target="_blank">久久久久www</a>| <a href="http://www-333304.com" target="_blank">欧美大片免费观看</a>| <a href="http://iotbzw.com" target="_blank">午夜精品www</a>| <a href="http://cpddddcc.com" target="_blank">可以看av的网站久久看</a>| <a href="http://5a07.com" target="_blank">亚洲视频精选在线</a>| <a href="http://yyyy456.com" target="_blank">欧美在线播放一区二区</a>| <a href="http://012928.com" target="_blank">尤物在线精品</a>| <a href="http://gdvapar.com" target="_blank">亚洲精选中文字幕</a>| <a href="http://www068hs.com" target="_blank">国产欧美一区二区三区视频</a>| <a href="http://aiqianfang.com" target="_blank">久久夜色精品一区</a>| <a href="http://kuaikan97.com" target="_blank">欧美日韩国产区</a>| <a href="http://www-666638.com" target="_blank">久久成人免费日本黄色</a>| <a href="http://1397h.com" target="_blank">欧美成人a视频</a>| <a href="http://7a6a.com" target="_blank">午夜精品偷拍</a>| <a href="http://zyjxyx.com" target="_blank">久久精选视频</a>| <a href="http://xxdd19.com" target="_blank">亚洲综合大片69999</a>| <a href="http://zhouqie.com" target="_blank">另类成人小视频在线</a>| <a href="http://my8823.com" target="_blank">日韩一级黄色av</a>| <a href="http://junmatek.com" target="_blank">久久大逼视频</a>| <a href="http://686852a.com" target="_blank">亚洲国产黄色片</a>| <a href="http://www17bxbx.com" target="_blank">日韩一级裸体免费视频</a>| <a href="http://xtsjjw.com" target="_blank">国产精品区一区二区三</a>| <a href="http://44o77.com" target="_blank">另类酷文…触手系列精品集v1小说</a>| <a href="http://jqnyc.com" target="_blank">久久久精品国产一区二区三区</a>| <a href="http://0359222.com" target="_blank">亚洲伦理在线</a>| <a href="http://my17677.com" target="_blank">欧美亚洲系列</a>| <a href="http://hakuihoso.com" target="_blank">亚洲一区欧美</a>| <a href="http://430390.com" target="_blank">毛片一区二区</a>| <a href="http://caca060.com" target="_blank">久久精品一区二区国产</a>| <a href="http://xxx6688.com" target="_blank">欧美日韩亚洲91</a>| <a href="http://tingxihuan.com" target="_blank">欧美激情第一页xxx</a>| <a href="http://126900.com" target="_blank">国产亚洲欧洲一区高清在线观看 </a>| <a href="http://66jj99.com" target="_blank">亚洲一区国产</a>| <a href="http://55kam.com" target="_blank">欧美成人午夜激情在线</a>| <a href="http://9ctv2.com" target="_blank">久久久精品2019中文字幕神马</a>| <a href="http://www284tv.com" target="_blank">欧美激情精品</a>| <a href="http://kxm6868.com" target="_blank">欧美大片免费看</a>| <a href="http://56718ca.com" target="_blank">国外成人免费视频</a>| <a href="http://aaddgg66.com" target="_blank">亚洲欧美日韩国产综合在线</a>| <a href="http://sxxawef.com" target="_blank">一区二区三区精品国产</a>| <a href="http://bauyu121.com" target="_blank">欧美 日韩 国产一区二区在线视频 </a>| <a href="http://1323666.com" target="_blank">亚洲午夜精品一区二区</a>| <a href="http://88488848.com" target="_blank">在线视频国产日韩</a>| <a href="http://98tangav.com" target="_blank">欧美一区二区三区视频在线观看</a>| <a href="http://zgztby.com" target="_blank">欧美国产日韩一区二区</a>| <a href="http://shalxee.com" target="_blank">亚洲日本中文</a>| <a href="http://2343ww.com" target="_blank">香蕉成人久久</a>| <a href="http://477980.com" target="_blank">亚洲视频成人</a>| <a href="http://17kfe.com" target="_blank">国产丝袜一区二区三区</a>| <a href="http://s0247.com" target="_blank">亚洲破处大片</a>| <a href="http://m72722.com" target="_blank">亚洲国产高潮在线观看</a>| <a href="http://www-137999.com" target="_blank">欧美一区二区三区在线观看 </a>| <a href="http://62san.com" target="_blank">亚洲一区在线直播</a>| <a href="http://p5555ww.com" target="_blank">欧美日韩成人一区二区</a>| <a href="http://avtb2068.com" target="_blank">亚洲国产精品福利</a>| <a href="http://lusaier.com" target="_blank">亚洲人成亚洲人成在线观看图片 </a>| <a href="http://916969.com" target="_blank">亚洲一级片在线观看</a>| <a href="http://maokk77.com" target="_blank">中文成人激情娱乐网</a>| <a href="http://xxxyyy168.com" target="_blank">欧美精品一区在线发布</a>| <a href="http://88488848.com" target="_blank">91久久精品国产91性色tv</a>| <a href="http://www3344uh.com" target="_blank">伊人久久婷婷色综合98网</a>| <a href="http://smiczbb.com" target="_blank">久久精品夜色噜噜亚洲a∨</a>| <a href="http://boocnn.com" target="_blank">久久午夜精品一区二区</a>| <a href="http://amass-ic.com" target="_blank">在线精品视频免费观看 </a>| <a href="http://ncyy4.com" target="_blank">黄色一区二区在线观看</a>| <a href="http://123hiba.com" target="_blank">欧美在线观看视频在线</a>| <a href="http://20074972.com" target="_blank">久久日韩精品</a>| <a href="http://tzhsdy.com" target="_blank">亚洲黄色精品</a>| <a href="http://vvv3939.com" target="_blank">欧美精品高清视频</a>| <a href="http://978769.com" target="_blank">亚洲午夜av在线</a>| <a href="http://as777as.com" target="_blank">久久国产手机看片</a>| <a href="http://1392266.com" target="_blank">在线日韩中文</a>| <a href="http://aqdit2022.com" target="_blank">模特精品裸拍一区</a>| <a href="http://jnjpsm.com" target="_blank">亚洲精品女av网站</a>| <a href="http://qmynong.com" target="_blank">久久婷婷久久</a>| <a href="http://1397h.com" target="_blank">亚洲电影第1页</a>| <a href="http://tristooges.com" target="_blank">亚洲免费成人</a>| <a href="http://mmmm57.com" target="_blank">国产精品久久久久久久9999</a>| <a href="http://482896.com" target="_blank">亚洲一区在线观看视频</a>| <a href="http://cgnwp.com" target="_blank">久久久伊人欧美</a>| <a href="http://ipx758.com" target="_blank">亚洲黄色免费电影</a>| <a href="http://trhht.com" target="_blank">欧美日韩天堂</a>| <a href="http://b27227.com" target="_blank">久久成年人视频</a>| <a href="http://www47777.com" target="_blank">亚洲高清在线观看</a>| <a href="http://89wbw.com" target="_blank">亚洲欧美中日韩</a>| <a href="http://327099.com" target="_blank">亚洲第一在线综合网站</a>| <a href="http://q731.com" target="_blank">欧美午夜精品久久久久久久 </a>| <a href="http://4446666.com" target="_blank">国产精品乱码一区二三区小蝌蚪 </a>| <a href="http://wanyoulipin.com" target="_blank">亚洲欧美在线观看</a>| <a href="http://zucai168.com" target="_blank">蜜臀久久久99精品久久久久久</a>| <a href="http://ll992.com" target="_blank">亚洲人线精品午夜</a>| <a href="http://300644.com" target="_blank">国产精品免费久久久久久</a>| <a href="http://www77vcd.com" target="_blank">久久爱91午夜羞羞</a>| <a href="http://xtgoldsky.com" target="_blank">亚洲国产精品99久久久久久久久</a>| <a href="http://feiniao168.com" target="_blank">夜夜夜久久久</a>| <a href="http://5767j.com" target="_blank">尤物在线精品</a>| <a href="http://123-sj.com" target="_blank">国产麻豆成人精品</a>| <a href="http://ccly2.com" target="_blank">欧美国产先锋</a>| <a href="http://www18889.com" target="_blank">欧美一站二站</a>| <a href="http://seo8138.com" target="_blank">一区在线影院</a>| <a href="http://yiapk.com" target="_blank">国产精品美女久久久久av超清 </a>| <a href="http://wwww999.com" target="_blank">日韩一级大片在线</a>| <a href="http://www-699603.com" target="_blank">国产日韩欧美一区二区三区在线观看 </a>| <a href="http://njggmy.com" target="_blank">国产女优一区</a>| <a href="http://457745.com" target="_blank">欧美成人一区二区三区在线观看 </a>| <a href="http://www-24333.com" target="_blank">亚洲国产天堂久久综合</a>| <a href="http://by777131.com" target="_blank">久久超碰97中文字幕</a>| <a href="http://www-493049.com" target="_blank">一本一本大道香蕉久在线精品</a>| <a href="http://mimi78.com" target="_blank">黄色精品一二区</a>| <a href="http://qiaoka526.com" target="_blank">国产精品一区免费视频</a>| <a href="http://cibocentre.com" target="_blank">欧美精品色网</a>| <a href="http://tzhbsb.com" target="_blank">免费成人黄色片</a>| <a href="http://niu96.com" target="_blank">久久精品综合一区</a>| <a href="http://sewuyueyue.com" target="_blank">aa亚洲婷婷</a>| <a href="http://5767j.com" target="_blank">亚洲免费精品</a>| <a href="http://erodasy.com" target="_blank">亚洲黄色在线视频</a>| <a href="http://18av18.com" target="_blank">久久资源在线</a>| <a href="http://huangsedy.com" target="_blank">久久久久九九视频</a>| <a href="http://gffffg.com" target="_blank">久久国产精品一区二区三区</a>| <a href="http://playav999.com" target="_blank">亚洲一区二区在</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>