锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 璺緞涓寘鍚┖鏍兼椂錛屽鏋滅┖鏍煎彉涓?%20"鏈夊涓嬪鐞嗘柟娉曪細 2銆乶ew URL();鐨勫弬鏁板彲浠ヤ負姝g‘鐨刄RI錛屾垨鑰呬負URI鏍煎紡鐨勫瓧絎︿覆錛涜嫢瀛楃涓叉槸闈炲畬鏁寸殑URI鏍煎紡錛屽垯鍒涘緩澶辮觸銆俲ava.net.URI榪斿洖鐨勮礬寰勪腑鐨勭┖鏍間互“絀烘牸”鐨勫艦寮忓嚭鐜版柟娉曚負Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath();浣嗘槸Thread.currentThread().getContextClassLoader().getResource("").toURI().toString();鍒欎細浠?#8220;%20”鐨勫艦寮忓嚭鐜般俲ava.net.URL榪斿洖鐨勪竴鍒囪礬寰勪腑鐨勭┖鏍奸兘鏄互“%20”鐨勫艦寮忓嚭鐜般俇RL/URI榪斿洖鐨勮礬寰勫垎闅旂閮芥槸“/”(鎺у埗鍙拌緭鍑?/")銆?/p> 2銆亀eb欏圭洰鏍圭洰褰曡幏鍙?br />1)寤虹珛涓涓猻ervlet,鍦ㄥ叾init()鏂規硶涓坊鍔犲涓嬩唬鐮?br />ServletContext context = this.getServletContext(); 褰撲竴涓漢瑕佹妸涓浠朵簨鎯呭憡璇夊彟澶栦竴涓漢鐨勬椂鍊欙紝鎴戜滑鍙互閫氳繃鐢佃瘽銆侀偖浠躲佺煭淇°両M宸ュ叿鎴栬呭綋闈㈣鐨勬柟寮忔潵浜ゆ祦銆傝繖縐嶆柟寮忕被浼間簬緋葷粺鏁版嵁浜ゆ崲瑕侀氳繃
tcp銆乽dp銆佺閬撶瓑絳夌殑鏂瑰紡瀹炵幇銆傚綋涓や釜浜轟氦嫻佺殑鏃跺欙紝鎴戜滑闇瑕佷竴縐嶅叡鍚岀殑璇█鎵嶈兘鏄庣櫧瀵規柟鐨勬剰鎬濓紝鍚屾牱鐨勶紝涓や釜緋葷粺瑕佷氦鎹㈡暟鎹紝涔熼渶瑕佸畾涔変竴縐嶅弻鏂?
閮芥槑鐧界殑鍗忚錛屾垜浠О涓?#8220;鏁版嵁浜ゆ崲鍗忚”銆?/p>
鏁版嵁浜ゆ崲鍗忚鐨勭洰鐨勬槸璁╀袱涓郴緇熻繘琛屾紜殑鏁版嵁浜や簰銆傛墍浠ュ嚑涔庡悇縐嶅紑鍙戣璦閮芥彁渚涗簡鏂逛究浣跨敤鐨勬暟鎹氦鎹㈠姛鑳姐傛瘮濡傝浣跨敤JAVA璇█鐨勫紑鍙戠殑緋葷粺浣?
鐢?
MySQL鏁版嵁搴撳瓨鍌ㄦ暟鎹紝灝辨槸閫氳繃MySQL鏁版嵁浜ゆ崲鍗忚璺烳ySQL鍋氭暟鎹氦鎹紱閫氳繃JAVA鐨凴MI鍙互鏂逛究鐨勫仛璺ㄦ満鍣ㄧ殑鍒嗗竷寮忔暟鎹氦鎹紝RMI涔?
灝辨槸涓縐嶆暟鎹氦鎹㈠崗璁?/p>
涓鑸垜浠湪涓嶅悓鐨勭郴緇熴佷笉鍚岀殑璇█涔嬮棿浜ゆ崲鏁版嵁鐨勬椂鍊欙紝鎴戜滑浼氶夋嫨涓縐嶉氱敤鐨勪氦鎹㈠崗璁垨鑰呰嚜宸卞畾涔変竴縐嶅鏄撲嬌鐢ㄧ殑浜ゆ崲鍗忚銆?
WebService鏇劇粡闈炲父嫻佽錛?鍦╓eb 2.0鏃朵唬錛岃交閲忕駭鐨凴EST鍗忚鍙堝紑濮嬪彈鍒拌拷鎹с傞偅涔堢┒绔熷湪鎴戜滑鐨勭郴緇熶腑搴旇閫夋嫨浠涔堟牱鐨勫崗璁憿錛?/p>
閫夋嫨浠涔堟牱鐨勫崗璁窡鎴戜滑鐨勫簲鐢ㄥ満鏅湁寰堝ぇ鐨勫叧緋匯傛垜浠渶瑕佽冭檻鎴戜滑寮鍙戞槸鍚︽柟渚褲佹帴鍙f槸鍚﹀鏄撳彂甯冦佹槸鍚﹂渶瑕佽冭檻甯﹀鍗犵敤鎴愭湰銆佸簭鍒楀寲鍜屽弽搴忓垪鍖栫殑鎬ц兘銆佹帴鍙e崗璁殑鎵╁睍鎬х瓑絳夈備笅闈㈡垜浠湅涓嬪嚑涓瘮杈冨父鐢ㄧ殑浜ゆ崲鍗忚瀹炵幇銆?
涓婇潰琛ㄦ牸鍒楀嚭浜嗕竴浜涘父鐢ㄦ暟鎹氦鎹㈠崗璁殑涓浜涚壒鎬х殑姣旇緝銆傝繖閲屽茍娌℃湁姣旇緝濂藉潖錛屽彧鏄兂璇存槑涓嶅悓鏁版嵁浜ゆ崲鍗忚鏄湁鍖哄埆鐨勶紝鎵浠ユ垜浠渶瑕佸湪鎴戜滑鐨勫簲鐢ㄥ満鏅腑榪涜閫夋嫨銆?/p>
鍍忓井鍗氾紝SNS榪欑寮鏀懼鉤鍙般佸闈欐乭tml欏甸潰鎻愪緵javascript鎺ュ彛璋冪敤鐨勭郴緇熼兘灞炰簬榪欑綾誨瀷 銆傝繖縐嶇被鍨嬬殑鐗圭偣鏄細 鎵浠ュ湪榪欑鎯呭喌涓嬶紝闇瑕佽冭檻鏁版嵁浼犺緭鐨勫甫瀹芥秷鑰楀拰鏁版嵁浜ゆ崲鍗忚鐨勬槗鐢ㄦэ紝浠ュ強澶氳璦鏀寔紼嬪害銆備互鍓嶅浜巋tml欏甸潰浣跨敤鐨刯avascript鎺ュ彛
璋冪敤涓鑸兘浣跨敤XML鏍煎紡錛屾渶榪戝嚑騫村嚑涔庨兘杞垚浜唈son鏍煎紡浜嗭紝鍥犱負json浼犺緭閲忔洿灝忥紝姣擷ML鏇村姞瀹規槗浣跨敤銆?
鑰屽浜庡紑鏀懼鉤鍙幫紝鐢變簬浣跨敤鐨勫満鏅緢澶氾紝鎵浠ラ渶瑕佹彁渚涘縐嶄氦鎹㈠崗璁牸寮忋傚熀鏈笂閮戒細鎻愪緵XML鍜宩son銆備負浜嗘彁楂樺鉤鍙版湰韜殑鎬ц兘鍜屽鎴風鐨勬ц兘錛屼篃鍙互鎻?
渚沺rotobuf榪欑浜岃繘鍒朵氦鎹㈠崗璁茍涓斿鍔犲帇緙╂敮鎸侊紝浠ヨ妭鐪佸甫瀹戒紶杈撳拰瑙f瀽鐨勬ц兘娑堣椼?/p>
瀵逛簬涓涓ぇ鍨嬬郴緇熸潵璇達紝鍐呴儴鏈嶅姟鐨勬暟鎹氦鎹㈡棤澶勪笉鍦ㄣ備粠鏈鍩烘湰鍜屽父瑙佺殑鏁版嵁搴撴暟鎹氦鎹€乵emcached緙撳瓨鏁版嵁浜ゆ崲銆佹秷鎭槦鍒楃殑鏁版嵁浜ゆ崲鍒扮郴緇?
涔嬮棿浣跨敤鐨凴PC鏈嶅姟妗嗘灦絳夌瓑錛岄兘鍙互綆椾綔鍐呴儴鏈嶅姟鐨勬暟鎹氦鎹€傚唴閮ㄦ湇鍔$殑鐗圭偣鏄笉鐢ㄨ冭檻闃茬伀澧欙紝涓嶅澶栧紑鏀撅紝閫熷害蹇紙鍩烘湰鏃犲甫瀹芥垚鏈級銆?/p>
鍐呴儴鏈嶅姟鐨勬暟鎹氦鎹㈠崗璁殑閫夋嫨絀洪棿闈炲父澶э紝涓鑸渶瑕佽冭檻錛?/p>
瀵逛簬鎸佷箙鍖栧瓨鍌ㄦ潵璇達紝姣忎竴縐嶆暟鎹氦鎹㈠崗璁叾瀹為兘鍙互瀹炵幇銆備竴鑸渶瑕佹牴鎹簲鐢ㄥ満鏅冭檻錛?/p>
鍋囪鎴戜滑鐨勭綉绔欏墠绔〉闈㈠睍紺哄眰浣跨敤PHP璇█寮鍙戯紝涓棿涓氬姟閫昏緫浣跨敤JAVA璇█寮鍙戯紝閭d箞灝辨秹鍙婂埌璺ㄨ璦鏁版嵁浜ゆ崲鐨勯棶棰樸傚彧瑕佺郴緇熶笉鏄崟綰殑浣跨敤涓縐嶈璦錛岄偅涔堝氨蹇呴』鑰冭檻榪欎釜闂銆備簨瀹炰笂錛岃冭檻鏈潵鐨勬墿灞曞拰闇姹傚彉鍖栭棶棰橈紝涔熸渶濂借冭檻璺ㄨ璦鐨勬暟鎹氦浜掑崗璁?/p>
鍦ㄩ夋嫨鏁版嵁浜ゆ崲鍗忚鐨勬椂鍊欙紝鎴戜滑鍚屾牱闇瑕佽冭檻綾諱技浜庢暟鎹簱琛ㄧ殑?schema璁捐鏃剁殑鎵╁睍闂銆傛瘮濡備竴涓彁渚涚敤鎴蜂俊鎭殑鏁版嵁浜ゆ崲鍗忚鎺ュ彛錛岀幇鍦ㄥ寘鍚?
鐢ㄦ埛鍚嶃佹у埆銆佷綇鍧鐨勪俊鎭紝鍦ㄥ崌綰ц繃紼嬩腑錛屽鍔犱簡涓涓渶鍚庣櫥褰曠殑IP淇℃伅銆傚鏋滀笉鑰冭檻鏁版嵁浜ゆ崲鍗忚鍗囩駭甯︽潵鐨勫獎鍝嶏紝寰堝彲鑳戒細瀵艱嚧浠ュ墠鐨勫鎴風鍑虹幇寮傚父鎴栬?
鏃х殑鏁版嵁鏃犳硶姝g‘瑙f瀽鐨勯棶棰樸?/p>
鍏煎鍗忚鐨勫閥鐢ㄩ潪甯告湁鐢紝鏂頒駭鍝佸吋瀹規彁渚涚幇鏈夋垚鐔熺殑鏁版嵁浜ゆ崲鍗忚錛屽彲浠ラ檷浣庝嬌鐢ㄩ棬妲涘拰浜у搧鐨勫紑鍙戦熷害銆傛瘮濡傛柊嫻紑婧愮殑memcacheQ灝變嬌鐢ㄤ簡memcached鍗忚銆?/p>
鏁版嵁浜ゆ崲鍗忚鐨勫悇縐嶉氱敤寮婧愬疄鐜伴潪甯稿錛屾暟鎹氦鎹㈠崗璁彧鏄竴涓潪甯稿娉涚殑璇存硶錛屽叾瀹炲彧瑕佸疄鐜頒簡鏁版嵁鐨勫簭鍒楀寲鍜屽弽搴忓垪鍖?
錛岄偅涔堝氨鍙互璇存槸涓涓彲浠ヤ氦鎹㈡暟鎹殑鍗忚銆傛暟鎹氦鎹㈠崗璁殑鎬ц兘鍏跺疄灝辨槸搴忓垪鍖栧拰鍙嶅簭鍒楀寲鐨勬ц兘錛屽鏋滃姞涓奟PC錛岄偅涔堣窡RPC瀹炵幇鏈韓鐨勬ц兘涔熸湁闈炲父澶х殑
鍏崇郴銆?/p>
/* public class TestArithmetic { 琛ュ厖鐭ヨ瘑錛氭暟鍊肩殑琛ョ爜琛ㄧず涔熷垎涓ょ鎯呭喌錛? 鐢╔MLEncode杈撳嚭鏃跺欙紝濡傛灉鏈塀igDecimal鏈夋椂鍊欎笉濂戒嬌銆?br />
鍘熷洜鏄細濡傛灉綾葷殑鍙橀噺鍦ㄥ畾涔夋椂鍊欐湁鍒濆鍊鹼紝鑰屼笉鏄痭ull錛屽氨蹇呴』瑕侀噸杞紻efaultPersistenceDelegate鐨刴utatesTo鏂規硶銆?br />
鍏充簬榪欎釜璇存槑錛屽湪緗戜笂榪欓噷鍙互鐪嬪埌錛?br />http://forum.java.sun.com/thread.jspa?threadID=631299&messageID=3642493 protected boolean mutatesTo(Object oldInstance, Object newInstance) { public class MethodDemo { /**
]]>
1銆?URLTest.class.getResource("/").getPath();
URLTest.class.getResource("/").getFile();
URLTest.class.getClassLoader().getResource("").getPath();
Thread.currentThread().getContextClassLoader().getResource("").getPath();絳夊縐嶇浉浼兼柟寮忚幏寰楃殑璺緞錛屼笉鑳借FileReader()鍜孎ileWriter()鐩存帴搴旂敤錛屽師鍥犳槸URL瀵圭┖鏍鹼紝鐗規畩瀛楃(%,#,[]絳?鍜屼腑鏂囪繘琛屼簡緙栫爜澶勭悊銆傚鏋滄枃浠朵腑URLTest.class.getResource("/").getPath();蹇呴』浠?/"寮澶寸劧鍚庡啀鍔犳枃浠跺悕錛岃孶RLTest.class.getClassLoader().getResource("").getPath();涓嶇敤鍔?/"鍙互鐩存帴娣誨姞鏂囦歡鍚嶃?/p>
1)浣跨敤repaceAll("%20",' ')鏇挎崲錛屼絾鍙兘瑙e喅絀烘牸闂錛屽鏋滆礬寰勪腑鍖呭惈鍏朵粬鐗規畩瀛楃鍜屼腑鏂囧氨涓嶈兘瑙e喅闂銆?br />2)浣跨敤URLDecoder.decode(str,"UTF-8")瑙g爜錛屼絾鏄彧鑳借В鍐充竴閮ㄥ垎錛岃嫢璺緞涓惈鏈?錛屼篃鏄笉鑳借В鍐崇殑錛屽師鍥犳槸URL騫朵笉鏄畬鍏ㄧ敤URLEncoder.encode(str,"UTF-8")緙栫爜鐨?+鍙瘋瑙g爜鍚庯紝鍒欏彉鎴愮┖鏍箋?br />3)瑙e喅鎵鏈夌殑闂,鐢║RLTest.class.getClassLoader().getResource("").toURI().getPath();錛屼絾鏄渶瑕佸鐞哢RISyntaxException寮傚父錛屾瘮杈冮夯鐑︿竴浜涖?/p>
3銆乶ew File(String filePath);鎺ュ彈姝g‘URI鏍煎紡鐨勫弬鏁板拰甯?#8220;絀烘牸”錛堥潪%20錛夌殑姝g‘鐩稿/緇濆瀛楃涓茶礬寰勶紝鍚﹀垯鍗充嬌緇欑殑璺緞鏄紜殑涔熶細鍑虹幇鎵句笉鍒版枃浠剁殑寮傚父銆侳ile榪斿洖鐨勮礬寰勫垎闅旂閮戒負“\”(鎺у埗鍙拌緭鍑?\")錛屽浜庡瓨鍦ㄧ殑鏂囦歡榪斿洖鐨勮礬寰勫瓧絎︿覆錛岀┖鏍奸兘浠?絀烘牸"鍑虹幇錛岃屼笉瀛樺湪鐨勮礬寰刵ew鍑虹殑file錛実etPath錛堬級榪斿洖鐨勮礬寰勪腑鐨勭┖鏍鹼紝浠嶆槸new File(String filePath)鐨勫弬鏁頒腑鍘熸湁鐨勫艦寮忥紝鍗寵嫢filePath涓槸絀烘牸鐨刧etPath錛堬級榪斿洖鐨勪粛鏄┖鏍鹼紝鏄?#8220;%20”鐨勪粛鏄?#8220;%20”銆侳ile.toURI() 浼氬皢file鐨勮礬寰勫悕涓殑“絀烘牸”杞寲涓?#8220;%20”錛岀劧鍚庡湪璺緞鍓嶅姞protocol錛?file:/"錛岃孎ile.toURL()鍙細鍦╢ile璺緞 鍓嶇畝鍗曠殑鍔犱笂protocol錛?file:/"錛岃屼笉浼氬皢“絀烘牸”杞寲涓?#8220;%20”錛屽師鏉ョ殑鏃犺鏄?#8220;絀烘牸”榪樻槸“%20”閮藉彧浼氬師鏍蜂繚鐣欍?/p>
瀹為檯浣跨敤涓亣鍒扮殑闂鎬葷粨濡備笅錛?br />1銆佺浉瀵硅礬寰?鍗崇浉瀵逛簬褰撳墠鐢ㄦ埛鐩綍鐨勭浉瀵硅礬寰?鍧囧彲閫氳繃浠ヤ笅鏂瑰紡鑾峰緱錛堜笉璁烘槸涓鑸殑java欏圭洰榪樻槸web欏圭洰錛?String relativelyPath=System.getProperty("user.dir"); 瀵逛簬涓鑸殑java欏圭洰涓殑鏂囦歡鏄浉瀵逛簬欏圭洰鐨勬牴鐩綍錛岃屽浜巜eb欏圭洰涓殑鏂囦歡璺緞錛屽彲鑳芥槸鏈嶅姟鍣ㄧ殑鏌愪釜璺緞錛屽悓鏃朵笉鍚岀殑web鏈嶅姟鍣ㄤ篃涓嶅悓 錛坱omcat鏄浉瀵逛簬 tomcat瀹夎鐩綍\bin錛夈備負姝わ紝涓漢璁や負錛屽湪web欏圭洰涓紝鏈濂戒笉瑕佷嬌鐢?#8220;鐩稿浜庡綋鍓嶇敤鎴風洰褰曠殑鐩稿璺緞”銆傜劧鑰岄粯璁ゆ儏鍐典笅錛宩ava.io 鍖呬腑鐨勭被鎬繪槸鏍規嵁褰撳墠鐢ㄦ埛鐩綍鏉ュ垎鏋愮浉瀵硅礬寰勫悕銆傛鐩綍鐢辯郴緇熷睘鎬?user.dir 鎸囧畾錛岄氬父鏄?Java 铏氭嫙鏈虹殑璋冪敤鐩綍銆傝繖灝辨槸璇達紝鍦ㄤ嬌鐢╦ava.io鍖呬腑鐨勭被鏃訛紝鏈濂戒笉瑕佷嬌鐢ㄧ浉瀵硅礬寰勩傚惁鍒欙紝铏界劧鍦⊿E紼嬪簭涓彲鑳借繕綆楁甯革紝浣嗘槸鍒頒簡EE紼嬪簭涓紝鍙兘浼氬嚭鐜伴棶棰樸?/p>
String strs = context.getRealPath("/");
2錛夊埄鐢╤ttpServletRequest錛屽緱鍒扮浉搴旂殑欏圭洰璺緞
String pathUrl = request.getSession().getServletContext().getRealPath("/");
]]>
瑙e喅鍔炴硶錛氫嬌鐢╥bm/eclipse鐨勭紪璇戝櫒
浜?浣跨敤ibm/eclipse鐨勭紪璇戝櫒涔熶細鏈変竴浜涙柟娉?nbsp;鍙傛暟璇硶鎻愮ず鍚嶇О鏄棤鎰忎箟
灝變細瀵艱嚧榪欑鎯呭喌
瑙e喅鍔炴硶錛氭妸鐩稿簲浠g爜鍧楁彁鍙栧埌鏂規硶錛岃鏂規硶synchronized
]]>
]]>鏁版嵁浜ゆ崲鍗忚
濡備綍閫夋嫨鏁版嵁浜ゆ崲鍗忚
鍗忚
瀹炵幇
璺ㄨ璦
鎬ц兘
浼犺緭閲?/td>
RPC
xml
騫挎硾
鍑犱箮鎵鏈?/td>
浣?/td>
寰堝ぇ
N錛堝彲瀹炵幇錛?/td>
json
騫挎硾
澶ч噺
涓鑸?/td>
涓鑸?/td>
N錛堝彲瀹炵幇錛?/td>
php serialize
PHPRPC
澶ч噺
涓鑸?/td>
涓鑸?/td>
Y
hessian
hessian
澶ч噺
涓鑸?/td>
灝?/td>
Y
thrift
thrift
澶ч噺
楂?/td>
灝?/td>
Y
protobuf
protobuf
澶ч噺
楂?/td>
灝?/td>
N錛堝彲瀹炵幇錛?/td>
ice
ice
澶ч噺
楂?/td>
灝?/td>
Y
avro
Apache Avro
灝戦噺
楂?/td>
灝?/td>
Y
messagepack
messagepack
澶ч噺
楂?/td>
灝?/td>
Y
寮鏀懼紡
鍐呴儴鏈嶅姟
鎸佷箙鍖栧瓨鍌?/h3>
璺ㄨ璦
鏁版嵁浜ゆ崲鍗忚鍙崌綰?/h3>
鍏煎鍗忚鐨勫閥鐢?/h3>
鎬葷粨
javascrip 鎿嶄綔 java瀵硅薄銆?br />
GEllipse ellipse = new GEllipse();//鑷畾涔塲ava瀵硅薄
//娣誨姞涓婁笅鏂囩粦瀹氭暟鎹?br />
SimpleBindings bindings = new SimpleBindings();
bindings.put("ellipse", ellipse);
ScriptEngine engine = sem.getEngineByExtension("js");
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
try{
engine.eval(" ellipse.setX(101);");//鑴氭湰閲岃緗嚜瀹氫箟java瀵硅薄瀵硅薄灞炴?br />
System.out.println(ellipse.getX());//杈撳嚭101錛屾祴璇昈K
}catch(Exception ex){
ex.printStackTrace();
}
]]>
寰堟棭灝卞惉璇翠簡榪欎釜鍔熻兘涓鐩存病浠旂粏鐪嬬湅錛屽皾璇曚簡涓?鍔熻兘涓嶉敊錛?br />
public static void main(String[] args) {
ScriptEngineManager sem = new ScriptEngineManager();
//娣誨姞涓婁笅鏂囩粦瀹氭暟鎹?br />
SimpleBindings bindings = new SimpleBindings();
bindings.put("aaa_av", new Double(10000.1));
bindings.put("bbb_av", new Double(20000.2));
ScriptEngine engine = sem.getEngineByExtension("js");
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
try{
//鐩存帴瑙f瀽
Object res = engine.eval(" res = Math.max(aaa_av , bbb_av) + aaa_av");
System.out.println(res);
//鍒涘緩鑴氭湰
String script = "function getMax() "
+ "{ return Math.max(aaa_av , bbb_av)}";
//鎵ц鑴氭湰
engine.eval(script);
Invocable inv = (Invocable) engine;
//鎵ц鏂規硶騫朵紶閫掑弬鏁?br />
Object obj = inv.invokeFunction("getMax", null);
//鎵撳嵃緇撴灉
System.out.println(obj);
}catch(Exception ex){
ex.printStackTrace();
}
}
]]>
褰揝et瑕佹坊鍔犳柊鐨勫厓绱犳椂錛屽厛璋冪敤榪欎釜鍏冪礌鐨刪ashCode鏂規硶錛屽氨涓涓嬪瓙鑳藉畾浣嶅埌瀹冨簲璇ユ斁緗殑鐗╃悊浣嶇疆涓娿傚鏋滆繖涓綅緗笂娌℃湁鍏冪礌錛屽畠灝卞彲浠ョ洿鎺ュ瓨鍌ㄥ湪
榪欎釜浣嶇疆涓婏紝涓嶇敤鍐嶈繘琛屼換浣曟瘮杈冧簡錛涘鏋滆繖涓綅緗笂宸茬粡鏈夊厓绱犱簡錛屽氨璋冪敤瀹冪殑equals鏂規硶涓庢柊鍏冪礌榪涜姣旇緝錛岀浉鍚岀殑璇濆氨涓嶅瓨浜嗭紝涓嶇浉鍚屽氨鏁e垪鍏跺畠鐨勫湴鍧銆?br />
鎵浠ヤ袱涓笉equal鐨勫璞★紝鏈夌浉鍚岀殑hash錛屾槸鍙互瀛樿繘Set鐨勩?/strong>
class HashNode {
int id;
public HashNode(int id){
this.id = id;
}
public int hashCode() {
return id;
}
public boolean equals(Object obj) {
return false;
}
}
public class HashTest {
public static void main(String[] args) {
HashNode n1 = new HashNode(1);
HashNode n2 = new HashNode(1);
HashMap map = new HashMap();
map.put(n1, "111");
map.put(n2, "222");
System.out.println(n1.equals(n2));
System.out.println(n1.hashCode() == n2.hashCode());
System.out.println(map.keySet().size());
}
}
]]>
MVC綆楁槸涓浜鴻鐑傛帀鐨勪笢瑗夸簡錛孧VP涔熷薄灞¤浜烘彁鍙娿?br />
鏈澶х殑鍖哄埆鍦ㄥ摢閲屽憿錛熶負浠涔堣鍐嶆紨鍙樹釜MVP鍑烘潵鍛紵
灝卞畾涔変笂鏉ヨ鏈澶х殑鍖哄埆鍦ㄤ簬C鍜孭錛屽氨鏋勬灦涓婃潵璇達紝鏄疺iew灞傚疄鐜扮殑鏂瑰紡涓嶅悓銆?br />
MVC錛歏iew灞傝偐璐熷緢澶т換鍔★紝View鍏寵仈Model錛孷iew鐨勬覆鏌撴槸鐩存帴閫氳繃Model灞傜殑鏁版嵁鏉ョ‘瀹氱殑銆傝繕鏄湁寰堝涓氬姟閫昏緫鍦╒iew涓婂畬鎴愩?br />
MVP錛歏iew灞傜殑浠誨姟澶уぇ緙╁噺錛孷iew涓嶅啀鐭ラ亾Model錛孭灞傚畬鎴愪笂闈㈡彁鍒扮殑View灞傚畬鎴愮殑涓氬姟閫昏緫銆?br />
鎬諱箣涓鍙ヨ瘽MVP閲岋紝View灞傜粷瀵逛笉鑳藉啀璁塊棶Model浜嗭紝
浠諱綍涓縐嶈璁℃ā寮忕殑鍑虹幇緇濆涓嶆槸涓轟簡鍑虹幇鑰屽嚭鐜扮殑銆傛繪槸涓轟簡瑙e喅鐜板疄涓瓨鍦ㄧ殑鏌愪簺鑰佺殑妯″紡鏃犳硶鎴栭毦浠ヨВ鍐崇殑闂鎵嶅嚭鐜扮殑銆?br />
涓轟粈涔堜細鍑虹幇MVP鍛紵
鐪嬬湅瀹㈡埛鎷垮埌涓涓璁$簿鑹殑MVC鐨勪駭鍝侊紝鍋氫簩嬈″紑鍙戠殑鏃跺欙紝濡傛灉浠栭」鐩凍澶熷ぇ錛岃偗瀹氫細鍙戠幇MVC鐨勫ソ澶勩備換鍔¢泦涓湪Model灞傦紝璁捐濂組odel灞傛暟鎹殑濉厖錛岀畝鍗曠殑瀹炵幇灝卞畬鎴愪簡銆侻VC鐨勬灦鏋勫府浠栬В鍐充簡寰堝闂錛屽ぇ瀹跺緢Happy錛?br />
褰撶劧瀹㈡埛鐨勯渶姹傛繪槸姘告棤姝㈠鐨勶紝褰撶畝鍗曢渶姹傝婊¤凍鐨勬椂鍊欙紝浠栧張浼氬線楂樺眰嬈″彂灞曪紝涔熻浠栧氨瀹屽叏闇瑕佷笉鍚岀殑View鏉ュ仛鍚屾牱鐨凪odel鐨勫睍紺?姣斿涓涓湪JSP錛屼竴涓湪Swing鎴栬匒ndroid涓?錛屽湪榪欎釜鏃跺欙紝紼嶅井鎯充笅錛屼粬灝卞彂鐜頒粬瑕佸仛鐨勪換鍔″紑濮嬪彉鐨勫緢澶т簡銆侻odel灞傜殑鏁版嵁綰典嬌鍙互鍏變韓錛屼簨浠舵帶鍒?杞彂)涔熻兘錛岃孷iew灞傛棤璁哄浣曟槸閫冧笉浜嗕簡銆備簬鏄疻eb紼嬪簭鍛樼‖鐫澶寸毊涔熻瀛wing錛孲wing鐨勭▼搴忓憳閮侀椃鐨勫JSP銆?br />
璇曟兂榪欎釜鏃跺欏鏋滄湁涓漢錛岃兘鎶婇櫡鍦╒iew涓婄殑涓婁竾琛宑ode錛屾媺鍒頒竴涓嵆鑳借仈緋誨埌Model錛屽張鑳借仈緋誨埌View鐨勫眰嬈′笂錛岄偅鐪熺殑瑕佹劅璋㈣媿澶╁ぇ鍦頒簡銆?br />
MVP鎴戞兂搴旇灝辨槸鍦ㄨ繖涓椂鍊欏嚭鐜扮殑銆傚畠澶勭悊鎵鏈塚iew鍜孧odel涔嬮棿鐨勬秷鎭紶閫掞紝鏁版嵁鏇存柊錛屼氦浜掓搷浣溿傛瘮濡備粠Swing鐨凾extField閲岃緭鍏ヤ釜瀛楁淇℃伅錛屽拰浠嶫SP閲岀殑Form閲岃緭鍏ヨ繖涓瓧孌典俊鎭紝澶勭悊鐨勬祦紼嬪簲璇ユ槸鍙互鍏變韓榪欐浠g爜鐨勩傚綋鐒惰繖涓椂鍊欙紝涓轟簡瑙e喅涓嶅悓View涓婄殑涓浜涚壒孌婃儏鍐碉紝鍙互浣跨敤閫傞厤鍣ㄦā寮忥紝鏉ュ鐞嗗涓猇iew鐨勭▼搴忚璁¢棶棰樸?br />
璁捐妯″紡娌℃湁濂藉潖涔嬪垎錛屽彧鏈夊悎涓嶅悎閫傘備綘鐨勪駭鍝佸鏋滃彧闇瑕佽緭鍏ヤ釜A榪斿洖涓狟錛屾病鏈夊鉤鍙板緩璁紝娌℃湁緋葷粺鍗囩駭錛岄偅灝卞繕浜嗘墍鏈夌殑璁捐妯″紡錛岃蛋閭f潯鏈蹇疄鐜扮殑璺惂銆?br />
]]>
]]>
]]>
* show the arthimetic character of '<<' '>>' '>>>'
*/
聽聽 public TestArithmetic() {
聽聽 }
聽聽
聽聽 public聽聽 static void聽聽 main(String [] args){
聽聽聽聽 int minus = -10;
聽聽聽聽 System.out.println(" Binary of -10 is " + Integer.toBinaryString(minus));
聽聽聽聽 System.out.println(" Arthimetic minus by -10 << 2 = " +
(minus<<2) + " Binary is " +
Integer.toBinaryString(minus<<2));
聽聽聽聽 System.out.println(" Arthimetic minus by -10 >> 2 = " +
(minus>>2) + " Binary is " +
Integer.toBinaryString(minus>>2));
聽聽聽聽 System.out.println(" Arthimetic minus by -10 >>>2 =聽聽 " +
(minus >>> 2) + " Binary is " +
Integer.toBinaryString(minus>>>2)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 + ",length is " + Integer.toBinaryString(minus>>>2).length());
聽聽聽聽
聽聽聽聽 int plus = 10;
聽聽聽聽 System.out.println(" Binary of 10 is " + Integer.toBinaryString(plus));
聽聽聽聽 System.out.println(" Arthimetic minus by 10 << 2 = " +
(plus<<2)+ "Binary is " + Integer.toBinaryString(plus<<2));
聽聽聽聽 System.out.println(" Arthimetic minus by 10 >> 2 = " +
(plus>>2)+ "Binary is "+ Integer.toBinaryString(plus>>2));
聽聽聽聽 System.out.println(" Arthimetic minus by 10 >>>2 =聽聽 " +
(plus >>> 2)+ "Binary is "+ Integer.toBinaryString(plus
>>> 2));
聽聽 }
錛?錛夋鏁扮殑琛ョ爜錛氫笌鍘熺爜鐩稿悓銆?
渚嬪錛?9鐨勮ˉ鐮佹槸00001001銆?
錛?錛夎礋鏁扮殑琛ョ爜錛氱鍙蜂綅涓?錛屽叾浣欎綅涓鴻鏁扮粷瀵瑰肩殑鍘熺爜鎸変綅鍙栧弽錛涚劧鍚庢暣涓暟鍔?銆?
渚嬪錛?7鐨勮ˉ鐮侊細鍥犱負鏄礋鏁幫紝鍒欑鍙蜂綅涓衡?鈥?鏁翠釜涓?0000111錛涘叾浣?浣嶄負-7鐨勭粷瀵瑰?7鐨勫師鐮?000111鎸変綅鍙栧弽涓?111000錛涘啀鍔?錛屾墍浠?7鐨勮ˉ鐮佹槸11111001銆?
宸茬煡涓涓暟鐨勮ˉ鐮侊紝姹傚師鐮佺殑鎿嶄綔鍒嗕袱縐嶆儏鍐碉細
錛?錛夊鏋滆ˉ鐮佺殑絎﹀彿浣嶄負鈥?鈥濓紝琛ㄧず鏄竴涓鏁幫紝鎵浠ヨˉ鐮佸氨鏄鏁扮殑鍘熺爜銆?
錛?錛夊鏋滆ˉ鐮佺殑絎﹀彿浣嶄負鈥?鈥濓紝琛ㄧず鏄竴涓礋鏁幫紝姹傚師鐮佺殑鎿嶄綔鍙互鏄細絎﹀彿浣嶄負1錛屽叾浣欏悇浣嶅彇鍙嶏紝鐒跺悗鍐嶆暣涓暟鍔?銆?
渚嬪錛屽凡鐭ヤ竴涓ˉ鐮佷負11111001錛屽垯鍘熺爜鏄?0000111錛?7錛夛細鍥犱負絎﹀彿浣嶄負鈥?鈥濓紝琛ㄧず鏄竴涓礋鏁幫紝鎵浠ヨ浣嶄笉鍙橈紝浠嶄負鈥?鈥濓紱鍏朵綑7浣?111001鍙栧弽鍚庝負0000110錛涘啀鍔?錛屾墍浠ユ槸10000111銆?/p>
]]>
鏈夊叴瓚g殑鍙互鐪嬬湅錛?br />
//setup big decimal delegate.
聽聽聽聽聽聽聽聽聽 DefaultPersistenceDelegate bigDecimalDelegate = new DefaultPersistenceDelegate() {
聽聽聽聽聽聽聽聽聽聽聽聽聽 protected Expression instantiate(Object oldInstance, Encoder out) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BigDecimal decimal = (BigDecimal) oldInstance;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return new Expression(oldInstance, oldInstance.getClass(), "new", new Object[] {decimal.toString()});
聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽 //must override this method.
聽聽聽聽聽聽聽聽聽聽聽聽聽 // see http://forum.java.sun.com/thread.jspa?threadID=631299&messageID=3642493
聽聽聽聽聽聽聽聽聽聽聽聽聽 protected boolean mutatesTo(Object oldInstance, Object newInstance) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return oldInstance.equals(newInstance);
聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽 //--- Joshua
聽聽聽聽聽聽聽聽聽 };
緗戜笂鐨勭墰浜鴻錛?br />
This works for BigDecimal properties that aren't initialized, i.e.
null. But if you initialize the property, then this won't work unless
you override mutatesTo in addition to instantiate mentioned above:
return oldInstance.equals(newInstance);
}
]]>
* @param args
*/
public static void main(String[] args) {
MethodDemo demo = new MethodDemo();
Integer i = Integer.valueOf(1);
demo.add(i);
System.out.println("i:" + i);
String s = "ss";
demo.stringchange(s);
System.out.println("s:" + s);
Person per = new Person();
System.out.println("per:" + per.getName());
}
//鍩烘湰綾誨瀷鍙樹笉浜?br />
public void add(int i) {
i++;
}
/***
* 鍑℃槸鍦ㄥ紩鐢ㄤ腑鍑虹幇淇敼寮曠敤鐨勮祴鍊艱鍙ワ紝
* 淇敼閮藉彉鎴愭棤鏁?br />
* @param i
*/
//鎯充慨鏀瑰紩鐢紝涓嶈
public void add(Integer i) {
int j = i.intValue();
i = Integer.valueOf(j++);//i鐨勫師寮曠敤宸茬粡涓㈠け浜?br />
}
//鎯充慨鏀瑰紩鐢紝涓嶈
public void stringchange(String s){
s = "stringchange";
}
public void setDate(Person per){
Person per2 = new Person();
per2.setName("per2Name");
per = per2;//per鐨勫師寮曠敤宸茬粡涓㈠け浜?/span>,榪欎釜浼拌寰堝浜轟細鍑洪敊
per.setName("name");
}
}
class Person {
String name ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}