锘??xml version="1.0" encoding="utf-8" standalone="yes"?> /** /** /** /**
寰堝鏈嬪弸鍦ㄦ繁鍏ョ殑鎺ヨЕ
JAVA
璇█鍚庡氨浼氬彂鐜拌繖鏍蜂袱涓瘝錛氬弽灝?/span>
(Reflection)
鍜屽唴鐪?/span>
(Introspector)
錛岀粡甯告悶涓嶆竻妤氳繖鍒板簳鏄庝箞鍥炰簨錛屽湪浠涔堝満鍚堜笅搴旂敤浠ュ強濡備綍浣跨敤錛熶粖澶╂妸榪欎簩鑰呮斁鍦ㄤ竴璧蜂粙緇嶏紝鍥犱負瀹冧滑浜岃呮槸鐩歌緟鐩告垚鐨勩?/span>
鍙嶅皠
鐩稿鑰岃█錛屽弽灝勬瘮鍐呯渷鏇村鏄撶悊瑙d竴鐐廣傜敤涓鍙ユ瘮杈冪櫧鐨勮瘽鏉ユ鎷紝鍙嶅皠灝辨槸璁╀綘鍙互閫氳繃鍚嶇О鏉ュ緱鍒板璞?/span>
(
綾伙紝灞炴э紝鏂規硶
)
鐨勬妧鏈備緥濡傛垜浠彲浠ラ氳繃綾誨悕鏉ョ敓鎴愪竴涓被鐨勫疄渚嬶紱鐭ラ亾浜嗘柟娉曞悕錛屽氨鍙互璋冪敤榪欎釜鏂規硶錛涚煡閬撲簡灞炴у悕灝卞彲浠ヨ闂繖涓睘鎬х殑鍊箋?/span>
榪樻槸鍐欎袱涓緥瀛愯澶у鏇寸洿瑙傜殑浜嗚В鍙嶅皠鐨勪嬌鐢ㄦ柟娉曪細
//
閫氳繃綾誨悕鏉ユ瀯閫犱竴涓被鐨勫疄渚?br />
Class cls_str = Class.forName(
"java.lang.String"
);
//
閫氳繃鏂規硶鍚嶆潵璋冪敤涓涓柟娉?br />
String methodName =
"length"
;
涓婇潰鐨勪袱涓緥瀛愭槸姣旇緝甯哥敤鏂規硶銆傜湅鍒頒笂闈㈢殑渚嬪瓙灝辨湁浜鴻鍙戦棶浜嗭細涓轟粈涔堣榪欎箞楹葷儲鍛紵鏈潵涓鏉¤鍙ュ氨瀹屾垚鐨勪簨鎯呭共鍚楄鏁磋繖涔堝鏉傦紵娌¢敊錛屽湪涓婇潰鐨勪緥瀛愪腑紜疄娌℃湁蹇呰榪欎箞楹葷儲銆備笉榪囦綘鎯沖儚榪欐牱涓涓簲鐢ㄧ▼搴忥紝瀹冩敮鎸佸姩鎬佺殑鍔熻兘鎵╁睍錛屼篃灝辨槸璇寸▼搴忎笉閲嶆柊鍚姩浣嗘槸鍙互鑷姩鍔犺澆鏂扮殑鍔熻兘錛岃繖涓姛鑳戒嬌鐢ㄤ竴涓叿浣撶被鏉ヨ〃紺恒傞鍏堟垜浠繀欏諱負榪欎簺鍔熻兘瀹氫箟涓涓帴鍙g被錛岀劧鍚庢垜浠姹傛墍鏈夋墿灞曠殑鍔熻兘綾誨繀欏誨疄鐜版垜鎸囧畾鐨勬帴鍙o紝榪欎釜瑙勫畾浜嗗簲鐢ㄧ▼搴忓拰鍙墿灞曞姛鑳戒箣闂寸殑鎺ュ彛瑙勫垯錛屼絾鏄庝箞鍔ㄦ佸姞杞藉憿錛熸垜浠繀欏昏搴旂敤紼嬪簭鐭ラ亾瑕佹墿灞曠殑鍔熻兘綾葷殑綾誨悕錛屾瘮濡傛槸
test.Func1
錛屽綋鎴戜滑鎶婅繖涓被鍚?/span>
(
瀛楃涓?/span>
)
鍛婅瘔搴旂敤紼嬪簭鍚庯紝瀹冨氨鍙互浣跨敤鎴戜滑絎竴涓緥瀛愮殑鏂規硶鏉ュ姞杞藉茍鍚敤鏂扮殑鍔熻兘銆傝繖灝辨槸綾葷殑鍙嶅皠錛岃闂綘鏈夊埆鐨勯夋嫨鍚楋紵
鍏充簬鏂規硶鐨勫弽灝勫緩璁ぇ瀹剁湅鎴戠殑鍙﹀涓綃囨枃绔犮?/span>
鍒╃敤
Turbine
鐨勪簨浠舵槧灝勬潵鎵╁睍
Struts
鐨勫姛鑳?/span>
銆嬶紝鍦板潃鏄細
http://www.javayou.com/article/CSDN/extend_struts.html
銆傝繖綃囨枃绔犺緇嗕粙緇嶄簡濡傛灉閫氳繃鍙嶅皠鏉ユ墿灞?/span>
Struts
妗嗘灦鐨勫姛鑳姐?/span>
鍐呯渷
鍐呯渷鏄?/span>
Java
璇█瀵?/span>
Bean
綾誨睘鎬с佷簨浠剁殑涓縐嶇己鐪佸鐞嗘柟娉曘備緥濡傜被
A
涓湁灞炴?/span>
name,
閭f垜浠彲浠ラ氳繃
getName,setName
鏉ュ緱鍒板叾鍊兼垨鑰呰緗柊鐨勫箋傞氳繃
getName/setName
鏉ヨ闂?/span>
name
灞炴э紝榪欏氨鏄粯璁ょ殑瑙勫垯銆?/span>
Java
涓彁渚涗簡涓濂?/span>
API
鐢ㄦ潵璁塊棶鏌愪釜灞炴х殑
getter/setter
鏂規硶錛岄氳繃榪欎簺
API
鍙互浣夸綘涓嶉渶瑕佷簡瑙h繖涓鍒欙紙浣嗕綘鏈濂借繕鏄鎼炴竻妤氾級錛岃繖浜?/span>
API
瀛樻斁浜庡寘
java.beans
涓?/span>
涓鑸殑鍋氭硶鏄氳繃綾?/span>
Introspector
鏉ヨ幏鍙栨煇涓璞$殑
BeanInfo
淇℃伅錛岀劧鍚庨氳繃
BeanInfo
鏉ヨ幏鍙栧睘鎬х殑鎻忚堪鍣紙
PropertyDescriptor
錛夛紝閫氳繃榪欎釜灞炴ф弿榪板櫒灝卞彲浠ヨ幏鍙栨煇涓睘鎬у搴旂殑
getter/setter
鏂規硶錛岀劧鍚庢垜浠氨鍙互閫氳繃鍙嶅皠鏈哄埗鏉ヨ皟鐢ㄨ繖浜涙柟娉曘備笅闈㈡垜浠潵鐪嬩竴涓緥瀛愶紝榪欎釜渚嬪瓙鎶婃煇涓璞$殑鎵鏈夊睘鎬у悕縐板拰鍊奸兘鎵撳嵃鍑烘潵錛?/span>
/*
package
demo;
import
java.beans.BeanInfo;
/**
public
class
IntrospectorDemo {
//
濡傛灉涓嶆兂鎶婄埗綾葷殑灞炴т篃鍒楀嚭鏉ョ殑璇濓紝
}
public
String getName() {
public
void
setName(String name) {
Web
寮鍙戞鏋?/span>
Struts
涓殑
FormBean
灝辨槸閫氳繃鍐呯渷鏈哄埗鏉ュ皢琛ㄥ崟涓殑鏁版嵁鏄犲皠鍒扮被鐨勫睘鎬т笂錛屽洜姝よ姹?/span>
FormBean
鐨勬瘡涓睘鎬ц鏈?/span>
getter/setter
鏂規硶銆備絾涔熷茍涓嶆繪槸榪欐牱錛屼粈涔堟剰鎬濆憿錛熷氨鏄瀵逛竴涓?/span>
Bean
綾繪潵璁詫紝鎴戝彲浠ユ病鏈夊睘鎬э紝浣嗘槸鍙鏈?/span>
getter/setter
鏂規硶涓殑鍏朵腑涓涓紝閭d箞
Java
鐨勫唴鐪佹満鍒跺氨浼氳涓哄瓨鍦ㄤ竴涓睘鎬э紝姣斿綾諱腑鏈夋柟娉?/span>
setMobile
錛岄偅涔堝氨璁や負瀛樺湪涓涓?/span>
mobile
鐨勫睘鎬э紝榪欐牱鍙互鏂逛究鎴戜滑鎶?/span>
Bean
綾婚氳繃涓涓帴鍙f潵瀹氫箟鑰屼笉鐢ㄥ幓鍏沖績鍏蜂綋瀹炵幇錛屼笉鐢ㄥ幓鍏沖績
Bean
涓暟鎹殑瀛樺偍銆傛瘮濡傛垜浠彲浠ユ妸鎵鏈夌殑
getter/setter
鏂規硶鏀懼埌鎺ュ彛閲屽畾涔夛紝浣嗘槸鐪熸鏁版嵁鐨勫瓨鍙栧垯鏄湪鍏蜂綋綾諱腑鍘誨疄鐜幫紝榪欐牱鍙彁楂樼郴緇熺殑鎵╁睍鎬с?/span>
鎬葷粨
灝?/span>
Java
鐨勫弽灝勪互鍙婂唴鐪佸簲鐢ㄥ埌紼嬪簭璁捐涓幓鍙互澶уぇ鐨勬彁渚涚▼搴忕殑鏅鴻兘鍖栧拰鍙墿灞曟с傛湁寰堝欏圭洰閮芥槸閲囧彇榪欎袱縐嶆妧鏈潵瀹炵幇鍏舵牳蹇冨姛鑳斤紝渚嬪鎴戜滑鍓嶉潰鎻愬埌鐨?/span>
Struts
錛岃繕鏈夌敤浜庡鐞?/span>
XML
鏂囦歡鐨?/span>
Digester
欏圭洰錛屽叾瀹炲簲璇ヨ鍑犱箮鎵鏈夌殑欏圭洰閮芥垨澶氭垨灝戠殑閲囩敤榪欎袱縐嶆妧鏈傚湪瀹為檯搴旂敤榪囩▼涓簩鑰呰鐩鎬簰緇撳悎鏂硅兘鍙戞尌鐪熸鐨勬櫤鑳藉寲浠ュ強楂樺害鍙墿灞曟с?/span>
鍦ㄥ瓧絎︿覆鍖歸厤闂涓紝鎴戜滑鏈熷緟瀵熺湅涓睺涓槸鍚﹀惈鏈変覆P銆?br />鍏朵腑涓睺琚О涓虹洰鏍囦覆錛屼覆S琚О涓烘ā寮忎覆銆?/p>
榪涜瀛楃涓插尮閰嶏紝鏈綆鍗曠殑涓涓兂娉曟槸錛?/p>
鍙互鐪嬭錛岃繖涓畻娉曪紙鍋囧畾m>>n錛夌殑澶嶆潅搴︽槸O(mn)錛屽叾涓璵鏄疶鐨勯暱搴︼紝n鏄疨鐨勯暱搴︺傝繖縐嶇畻娉曠殑緙洪櫡鏄尮閰嶈繃紼嬩腑甯︽湁鍥炴函鈥斺斿噯紜湴璇存槸T涓插瓨鍦ㄥ洖婧紝涔熷氨鏄綋鍖歸厤涓嶆垚鍔熺殑鏃跺欙紝涔嬪墠榪涜鐨勫尮閰嶅畬鍏ㄥ彉涓烘棤鐢ㄥ姛錛屾墍鏈夌殑姣旇緝闇瑕侀噸鏂板紑濮嬨?/p>
KMP綆楁硶鏄疍.E.Knuth銆丣.H.Morris鍜孷.R.Pratt鎻愬嚭鐨勬棤鍥炴函鐨勫瓧絎︿覆鍖歸厤綆楁硶錛岀畻娉曠殑鏍稿績鎬濇兂灝辨槸璁炬硶鍦ㄥ尮閰嶅け璐ョ殑鏃跺欙紝灝介噺鍒╃敤涔嬪墠鐨勫尮閰嶇粨鏋滐紝娑堥櫎T涓茬殑鍥炴函闂銆傞偅涔堝浣曟秷闄ゅ洖婧憿錛熻鐪嬩笅闈㈢殑渚嬪瓙錛?/p>
鍋囪P=abacd錛屽鏋淭=abax...錛屽綋浠庡ご寮濮嬪尮閰嶅埌瀛楃c鏃訛紝鑻=x錛屾樉鐒訛紝鍖歸厤榪囩▼緇х畫錛涘綋c≠x鏃訛紝鎸夌収鏈寸礌鐨勫尮閰嶇畻娉曪紝T涓蹭細鍙戠敓鍥炴函錛屼箣鍚嶵涓蹭細浠庣2涓瓧絎寮濮嬮噸鏂板尮閰嶏紝鑰屼笉鏄粠鍖歸厤澶辮觸鐨勫瓧絎寮濮嬬戶緇備絾鏄樉鐒訛紝瀵逛簬涓婅堪鐨勫尮閰嶈繃紼嬶紝T涓蹭笉闇瑕佷粠b寮濮嬮噸鏂板尮閰嶏紝瀹冨彧闇瑕佷粠x寮濮嬪拰P鐨刡瀛楃緇х畫鍖歸厤鍗沖彲銆傚涓嬶細 鐜板湪鐨勯棶棰樻槸錛屾寜鐓MP綆楁硶錛屽尮閰嶅け璐ョ殑鏃跺欙紝P涓查渶瑕侀噸鏂拌皟鏁翠綅緗紝浣嗘槸璋冩暣鐨勪緷鎹槸浠涔堬紵Knuth絳変漢鍙戠幇錛孭璋冩暣浣嶇疆鐨勪緷鎹拰P鐨勬瀯閫犳湁鍏籌紝鍜孴鏃犲叧銆傚叿浣撴潵璇達紝瀹氫箟澶辨晥鍑芥暟錛歠(j)=k錛屽叾涓?<=k<=j錛屼笖k鏄嬌寰梡0p1...pk-1 = pj-k+1pj-k+2...pj鎴愮珛鐨勬渶澶ф暣鏁般傚緩绔嬪け鏁堝嚱鏁扮殑綆楁硶濡備笅錛?br />public void Build() { 鍖歸厤榪囩▼濡備笅錛?br />public int Match(String target, int start) { KMP綆楁硶铏界劧鑳藉榪涜瀛楃涓插尮閰嶏紝浣嗘槸錛屽湪瀹炶返涓瓧絎︿覆鍖歸厤寰寰榪樿鏀寔閫氶厤絎︼紝MS緋葷粺涓渶甯歌鐨勯氶厤絎︽槸?鍜?銆傚叾涓紝?鍙互浠h〃涓涓瓧絎︼紙涓嶈兘娌℃湁錛夛紝*鍙互浠h〃浠繪剰澶氫釜瀛楃錛堝彲浠ヤ負絀猴級銆傜粡鍏哥殑KMP綆楁硶閽堝閫氶厤絎︽槸鏃犺兘涓哄姏鐨勶紝浣嗘槸緇忚繃綆鍗曠殑鏀歸狅紝KMP綆楁硶涔熷彲浠ヨ瘑鍒氶厤絎︺?/p>
棣栧厛鏄?錛屾牴鎹?鐨勫姛鑳斤紝?琛ㄧず浠繪剰瀛楃錛屼篃灝辨槸璇村湪鍖歸厤榪囩▼涓紝?姘歌繙鍖歸厤鎴愬姛銆傚洜姝ゅ鍖歸厤鍑芥暟鐨勪慨鏀瑰崄鍒嗙畝鍗曪細 鏈川涓婏紝?騫舵病鏈変慨鏀圭畻娉曪紝鑰屼粎浠呬慨鏀逛簡鍖歸厤瑙勫垯鈥斺旈亣鍒?鍒欎竴瀹氬尮閰嶃傜劧鑰?涓庢涓嶅悓錛?鐨勪綔鐢ㄦ槸鍖歸厤浠繪剰澶氫釜瀛楃錛屾樉鐒舵垜浠笉鑳界畝鍗曠殑淇敼鍖歸厤榪囩▼鑰屾弧瓚寵姹傘傚鏋滄垜浠噸鏂版濊?鐨勪綔鐢紝鎴戜滑浼氬彂鐜?鐨勫彟涓涓綔鐢ㄥ氨鏄垎鍓睵涓詫紝鍗沖鏋淧=P1*P2錛岄偅涔堜笌鍏惰*浠h〃鍖歸厤浠繪剰澶氫釜瀛楃錛屼笉濡傝P鐨勫尮閰嶆潯浠舵槸鍦ㄥ尮閰峆1瀛愪覆鍚庡啀鍖歸厤P2瀛愪覆銆?/p>
鐜板湪鍥為【澶辨晥鍑芥暟鐨勪綔鐢紝濡傛灉褰撳尮閰嶅埌P鐨刯+1浣嶆椂鍖歸厤澶辮觸錛岄偅涔堥噸鏂板紑濮嬪尮閰嶇殑鏃跺欙紝P涓茬殑浣嶇疆璋冩暣鍒癴(j)浣嶏紝鐩村埌P涓茬殑浣嶇疆璋冩暣鍒?錛屽垯鍖歸厤閲嶆柊寮濮嬨備絾褰揚=P1*P2錛屽亣濡侾1宸茬粡鍖歸厤鎴愬姛錛岃屽湪P2涓彂鐢熷尮閰嶅け璐ワ紝閭d箞P涓茶闇瑕佽皟鏁翠綅緗紝浣哖涓叉棤璁哄浣曡皟鏁達紝姝ゆ椂涔熶笉搴旇璋冩暣鍒?錛屾渶澶氳皟鏁村埌P2鐨勫紑濮嬪錛屽洜涓篜1宸茬粡鍖歸厤錛屽彧闇鍖歸厤P2鍗沖彲銆傚亣濡侾=abcab*abcab錛屽け鏁堝嚱鏁板簲璇ユ槸錛堟敞鎰忎箣鍓嶆彁鍒?鐨勪綔鐢級錛?br />a b c a b * a b c a b 鍥犳錛岃鎯寵KMP鏀寔*錛岄偅涔堝叧閿槸瑕侀噸鏂拌璁″け鏁堝嚱鏁扮殑寤虹珛綆楁硶錛屽涓嬶細 綆楁硶涓璪egin琛ㄧず姣忔瀛楃涓茬殑寮濮嬩綅緗傛澶栵紝鍖歸厤榪囩▼涔熷簲璇ヨ繘琛岀浉搴旂殑淇敼錛屽洜涓哄瓧絎?瀵逛簬鍖歸厤娌℃湁浠諱綍甯姪錛屽畠灞炰簬鍗犱綅絎︼紝鍥犳闇瑕佽煩榪囷紝鍖歸厤綆楁硶濡備笅錛?br />public int Match(String target, int start) { 涓涓暟瀛楅昏緫鐨勯棶棰橈細璁捐涓涓瘑鍒?1011鐨勭數璺紝瑙h繖涓棶棰樼殑鍏抽敭灝辨槸璁捐鍑鴻繖涓數璺殑DFA錛屽涓嬶細 浠旂粏鐪嬬湅榪欎釜鐘舵佹満錛屾槸涓嶆槸鍜孠MP鐨勭畻娉曟湁鍑犲垎綾諱技鍛紵榪欏茍涓嶆槸宸у悎錛屽洜涓篕MP綆楁硶涓殑澶辨晥鍑芥暟鎬誨彲浠ョ瓑浠風殑杞寲涓轟竴涓狣FA銆傚綋鐒禟MP鐨凞FA榪滄瘮璇嗗埆11011鐨凞FA瑕佸鏉傦紝鍘熷洜鍦ㄤ簬KMP鎺ュ彈鐨勮緭鍏ユ槸鍏ㄤ綋瀛楃闆嗗悎錛岃瘑鍒?1011鐨凞FA鍙帴鍙?鍜?榪欎袱涓緭鍏ャ傛垜浠煡閬擄紝涓涓鍒欒璦鍜屼竴涓狣FA鏄瓑浠風殑錛岃孠MP璁$畻澶辨晥鍑芥暟鐨勭畻娉曪紝瀹為檯涓婄瓑浠蜂簬姹侱FA鐨勮繃紼嬶紝f(j)鐨勫煎疄闄呬笂琛ㄦ槑鐘舵乯+1鎺ュ彈鍒頒笉姝g‘鐨勫瓧絎︽椂搴旇鍥炴函鍒扮殑鐘舵侊紙娉ㄦ剰姝ゆ椂杈撳叆嫻佸茍娌℃湁鍓嶈繘錛夈傛櫘閫氱殑瀛楃涓查兘鑳界湅鎴愭槸涓涓鍒欒璦錛屽惈鏈夐氶厤絎?鍜?鐨勫瓧絎︿覆涔熷彲浠ョ瓑浠風殑杞崲涓轟竴涓鍒欒〃杈懼紡銆備絾鏄紝姝e垯璇█鐨勯泦鍚堣繙姣擪MP綆楁硶鎵鑳芥敮鎸佺殑妯″紡闆嗗悎鐨勬洿澶э紝鏈熼棿鍘熷洜榪樻槸鍒氭墠鎻愯繃鐨勮緭鍏ラ棶棰樸傝瘯鎯砅=p1p2...pn錛屽綋鍖歸厤鍒皃j鐨勬椂鍊欙紝濡傛灉涓嬩竴涓緭鍏ュ瓧絎︽鏄痯j錛岄偅涔堢姸鎬佹満榪涘叆涓嬩竴涓姸鎬侊紝濡傛灉涓嶆槸pj錛岄偅涔堢姸鎬佹満鎸夌収瀹炴晥鍑芥暟鐨勬寚紺鴻漿縐誨埌鐘舵乫(j-1)錛屼篃灝辨槸璇碖MP鐘舵佹満鐨勬瘡涓姸鎬佸彧鑳芥牴鎹緭鍏ユ槸鍚︿負pj鏉ヨ繘琛岃漿縐匯傝屾鍒欒〃杈懼紡鎵瀵瑰簲鐨勭姸鎬佹満鍒欐湁鎵涓嶅悓錛屽鏋滄鍒欒璦L=l1l2...ln錛屽亣璁捐繖浜涢兘鏄瓧姣嶏紝褰撳尮閰嶅埌lj浣嶇殑鏃跺欙紝濡傛灉涓嬩竴涓緭鍏ュ瓧絎︽鏄痩j錛岄偅涔堢姸鎬佹満榪涘叆涓嬩竴涓姸鎬侊紝鍚﹀垯瀹冭繕鍙互鏍規嵁杈撳叆鐨勫艱繘琛岃漿縐伙紝渚嬪lj=c1鏃惰漿鎹㈠埌鐘舵亁錛宭j=c2鏃剁姸鎬佽漿鎹㈠埌y絳夌瓑銆?/p>
瀛楃涓插尮閰嶉棶棰樻槸鑰侀棶棰樹簡錛屽茍娌℃湁澶鏂版剰鍙█錛屽彧涓嶈繃铏界劧KMP綆楁硶鍗佸垎綆鍗曪紝浣嗗畠鐨勫唴鍦ㄥ惈涔夎繕鏄崄鍒嗘繁鍒葷殑銆傛í鍚戞瘮杈僈MP銆丏FA鍜屾鍒欒璦銆佹鍒欒〃杈懼紡鎴戜滑浼氬彂鐜幫紝瀹冧滑涔嬮棿瀛樺湪寰堝鐨勫叧鑱旓紝鑰岃繖縐嶆瘮杈冧篃鏈夊埄浜庢垜浠洿濂界殑鐞嗚В榪欎簺綆楁硶錛屾垨鑰呮敼榪涜繖浜涚畻娉曘傛渶鍚庤涓鍙ワ紝璇曞浘鍒╃敤鐩墠鐨勬鏋朵嬌寰桲MP綆楁硶鏀寔鍏ㄩ儴縐嶇被鐨勯氶厤絎︼紙瀵瑰簲浜庢鍒欒〃杈懼紡灝辨槸x?銆亁*銆亁+銆亄m,n}絳夌瓑錛夋槸涓嶅彲鑳斤紝鑰屾垜浠篃涓嶉渶瑕佽繖涔堝仛錛屽洜涓烘垜浠繕鏈夋鍒欒〃杈懼紡鍢涖?/p>
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;
public class FileOperate {
private String message;
public FileOperate() {
}
* 璇誨彇鏂囨湰鏂囦歡鍐呭
* @param filePathAndName 甯︽湁瀹屾暣緇濆璺緞鐨勬枃浠跺悕
* @param encoding 鏂囨湰鏂囦歡鎵撳紑鐨勭紪鐮佹柟寮?br /> * @return 榪斿洖鏂囨湰鏂囦歡鐨勫唴瀹?br /> */
public String readTxt(String filePathAndName,String encoding) throws IOException{
encoding = encoding.trim();
StringBuffer str = new StringBuffer("");
String st = "";
try{
FileInputStream fs = new FileInputStream(filePathAndName);
InputStreamReader isr;
if(encoding.equals("")){
isr = new InputStreamReader(fs);
}else{
isr = new InputStreamReader(fs,encoding);
}
BufferedReader br = new BufferedReader(isr);
try{
String data = "";
while((data = br.readLine())!=null){
str.append(data+" ");
}
}catch(Exception e){
str.append(e.toString());
}
st = str.toString();
}catch(IOException es){
st = "";
}
return st;
}
* 鏂板緩鐩綍
* @param folderPath 鐩綍
* @return 榪斿洖鐩綍鍒涘緩鍚庣殑璺緞
*/
public String createFolder(String folderPath) {
String txt = folderPath;
try {
java.io.File myFilePath = new java.io.File(txt);
txt = folderPath;
if (!myFilePath.exists()) {
myFilePath.mkdir();
}
}
catch (Exception e) {
message = "鍒涘緩鐩綍鎿嶄綔鍑洪敊";
}
return txt;
}
/**
* 澶氱駭鐩綍鍒涘緩
* @param folderPath 鍑嗗瑕佸湪鏈駭鐩綍涓嬪垱寤烘柊鐩綍鐨勭洰褰曡礬寰?渚嬪 c:myf
* @param paths 鏃犻檺綰х洰褰曞弬鏁幫紝鍚勭駭鐩綍浠ュ崟鏁扮嚎鍖哄垎 渚嬪 a|b|c
* @return 榪斿洖鍒涘緩鏂囦歡鍚庣殑璺緞 渚嬪 c:myfac
*/
public String createFolders(String folderPath, String paths){
String txts = folderPath;
try{
String txt;
txts = folderPath;
StringTokenizer st = new StringTokenizer(paths,"|");
for(int i=0; st.hasMoreTokens(); i++){
txt = st.nextToken().trim();
if(txts.lastIndexOf("/")!=-1){
txts = createFolder(txts+txt);
}else{
txts = createFolder(txts+txt+"/");
}
}
}catch(Exception e){
message = "鍒涘緩鐩綍鎿嶄綔鍑洪敊錛?;
}
return txts;
}
/**
* 鏂板緩鏂囦歡
* @param filePathAndName 鏂囨湰鏂囦歡瀹屾暣緇濆璺緞鍙婃枃浠跺悕
* @param fileContent 鏂囨湰鏂囦歡鍐呭
* @return
*/
public void createFile(String filePathAndName, String fileContent) {
try {
String filePath = filePathAndName;
filePath = filePath.toString();
File myFilePath = new File(filePath);
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
FileWriter resultFile = new FileWriter(myFilePath);
PrintWriter myFile = new PrintWriter(resultFile);
String strContent = fileContent;
myFile.println(strContent);
myFile.close();
resultFile.close();
}
catch (Exception e) {
message = "鍒涘緩鏂囦歡鎿嶄綔鍑洪敊";
}
}
/**
* 鏈夌紪鐮佹柟寮忕殑鏂囦歡鍒涘緩
* @param filePathAndName 鏂囨湰鏂囦歡瀹屾暣緇濆璺緞鍙婃枃浠跺悕
* @param fileContent 鏂囨湰鏂囦歡鍐呭
* @param encoding 緙栫爜鏂瑰紡 渚嬪 GBK 鎴栬?UTF-8
* @return
*/
public void createFile(String filePathAndName, String fileContent, String encoding) {
try {
String filePath = filePathAndName;
filePath = filePath.toString();
File myFilePath = new File(filePath);
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
PrintWriter myFile = new PrintWriter(myFilePath,encoding);
String strContent = fileContent;
myFile.println(strContent);
myFile.close();
}
catch (Exception e) {
message = "鍒涘緩鏂囦歡鎿嶄綔鍑洪敊";
}
}
/**
* 鍒犻櫎鏂囦歡
* @param filePathAndName 鏂囨湰鏂囦歡瀹屾暣緇濆璺緞鍙婃枃浠跺悕
* @return Boolean 鎴愬姛鍒犻櫎榪斿洖true閬亣寮傚父榪斿洖false
*/
public boolean delFile(String filePathAndName) {
boolean bea = false;
try {
String filePath = filePathAndName;
File myDelFile = new File(filePath);
if(myDelFile.exists()){
myDelFile.delete();
bea = true;
}else{
bea = false;
message = (filePathAndName+"
鍒犻櫎鏂囦歡鎿嶄綔鍑洪敊");
}
}
catch (Exception e) {
message = e.toString();
}
return bea;
}
/**
* 鍒犻櫎鏂囦歡澶?br /> * @param folderPath 鏂囦歡澶瑰畬鏁寸粷瀵硅礬寰?br /> * @return
*/
public void delFolder(String folderPath) {
try {
delAllFile(folderPath); //鍒犻櫎瀹岄噷闈㈡墍鏈夊唴瀹?br /> String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); //鍒犻櫎絀烘枃浠跺す
}
catch (Exception e) {
message = ("鍒犻櫎鏂囦歡澶規搷浣滃嚭閿?);
}
}
/**
* 鍒犻櫎鎸囧畾鏂囦歡澶逛笅鎵鏈夋枃浠?br /> * @param path 鏂囦歡澶瑰畬鏁寸粷瀵硅礬寰?br /> * @return
* @return
*/
public boolean delAllFile(String path) {
boolean bea = false;
File file = new File(path);
if (!file.exists()) {
return bea;
}
if (!file.isDirectory()) {
return bea;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
}else{
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path+"/"+ tempList[i]);//鍏堝垹闄ゆ枃浠跺す閲岄潰鐨勬枃浠?br /> delFolder(path+"/"+ tempList[i]);//鍐嶅垹闄ょ┖鏂囦歡澶?br /> bea = true;
}
}
return bea;
}
/**
* 澶嶅埗鍗曚釜鏂囦歡
* @param oldPathFile 鍑嗗澶嶅埗鐨勬枃浠舵簮
* @param newPathFile 鎷瘋礉鍒版柊緇濆璺緞甯︽枃浠跺悕
* @return
*/
public void copyFile(String oldPathFile, String newPathFile) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPathFile);
if (oldfile.exists()) { //鏂囦歡瀛樺湪鏃?br /> InputStream inStream = new FileInputStream(oldPathFile); //璇誨叆鍘熸枃浠?br /> FileOutputStream fs = new FileOutputStream(newPathFile);
byte[] buffer = new byte[1444];
while((byteread = inStream.read(buffer)) != -1){
bytesum += byteread; //瀛楄妭鏁?鏂囦歡澶у皬
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
}catch (Exception e) {
message = ("澶嶅埗鍗曚釜鏂囦歡鎿嶄綔鍑洪敊");
}
}
* 澶嶅埗鏁翠釜鏂囦歡澶圭殑鍐呭
* @param oldPath 鍑嗗鎷瘋礉鐨勭洰褰?br /> * @param newPath 鎸囧畾緇濆璺緞鐨勬柊鐩綍
* @return
*/
public void copyFolder(String oldPath, String newPath) {
try {
new File(newPath).mkdirs(); //濡傛灉鏂囦歡澶逛笉瀛樺湪 鍒欏緩绔嬫柊鏂囦歡澶?br /> File a=new File(oldPath);
String[] file=a.list();
File temp=null;
for (int i = 0; i < file.length; i++) {
if(oldPath.endsWith(File.separator)){
temp=new File(oldPath+file[i]);
}else{
temp=new File(oldPath+File.separator+file[i]);
}
if(temp.isFile()){
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath + "/" +
(temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ((len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if(temp.isDirectory()){//濡傛灉鏄瓙鏂囦歡澶?br /> copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);
}
}
}catch (Exception e) {
message = "澶嶅埗鏁翠釜鏂囦歡澶瑰唴瀹規搷浣滃嚭閿?;
}
}
/**
* 縐誨姩鏂囦歡
* @param oldPath
* @param newPath
* @return
*/
public void moveFile(String oldPath, String newPath) {
copyFile(oldPath, newPath);
delFile(oldPath);
}
* 縐誨姩鐩綍
* @param oldPath
* @param newPath
* @return
*/
public void moveFolder(String oldPath, String newPath) {
copyFolder(oldPath, newPath);
delFolder(oldPath);
}
public String getMessage(){
return this.message;
}
}
]]>
//
涓婇潰榪欏彞寰堢溂鐔燂紝鍥犱負浣跨敤榪?/span>
JDBC
璁塊棶鏁版嵁搴撶殑浜洪兘鐢ㄨ繃
J
Object str = cls_str.newInstance();
//
鐩稿綋浜?/span>
String str = new String();
Method m = cls_str.getMethod(methodName,
null
);
System.out.println(
"length is "
+ m.invoke(str,
null
));
//
鐩稿綋浜?/span>
System.out.println(str.length());
* Created on 2004-6-29
*/
import
java.beans.Introspector;
import
java.beans.PropertyDescriptor;
*
鍐呯渷婕旂ず渚嬪瓙
*
@author
liudong
*/
String name;
public
static
void
main(String[] args)
throws
Exception{
IntrospectorDemo demo =
new
IntrospectorDemo();
demo.setName(
"Winter Lau"
);
//
閭?/span>
getBeanInfo
鐨勭浜屼釜鍙傛暟濉啓鐖剁被鐨勪俊鎭?br />
BeanInfo bi = Introspector.getBeanInfo(demo.getClass(),
Object.
class
);
PropertyDescriptor[] props = bi.getPropertyDescriptors();
for
(
int
i=0;i<props.length;i++){
System.out.println(props[i].getName()+
"="
+
props[i].getReadMethod().invoke(demo,
null
));
}
return
name;
}
this
.name = name;
}
}
]]>2 鏈寸礌鍖歸厤綆楁硶
public
class
SimpleMatch
{
public
int
StringMatch(String target,String patten)
{
int
tl
=
target.length();
int
pl
=
patten.length();
int
i
=
0
;
int
j
=
0
;
while
(i
<
tl
-
pl
&&
j
<
pl)
{
if
(patten.charAt(j)
==
target.charAt(i
+
j))
j
++
;
else
{
j
=
0
;
i
++
;
}
}
if
(j
==
pl)
return
i;
return
-
1
;
}
public
static
void
main(String[] args)
{
String t
=
"
123456789
"
;
String p
=
"
456
"
;
SimpleMatch sm
=
new
SimpleMatch();
System.out.println(sm.StringMatch(t, p));
}
}
3 KMP綆楁硶
鍖歸厤榪囩▼錛?br />P=abacd
T=abax....
^----姣旇緝鍒版澶勬椂鍙戠敓鍖歸厤澶辮觸
鏈寸礌鍖歸厤綆楁硶錛?br />P= abacd
T=abax...
^----鍥炴函鍒癰錛岄噸鏂板紑濮嬪拰P鐨勫尮閰?br />KMP綆楁硶錛?br />P= abacd
T=abax...
^----T涓蹭笉鍥炴函錛屼粠x澶勭戶緇尮閰?/p>
if(pattern == null)
throw new Exception("KMP Exception : null pattern");
array = new int[pattern.Length];
int i = 0, s = pattern.Length;
if(s > 1)
array[0] = 0;
for(i = 1; i < s; i++) {
if(pattern[i] == pattern[array[i - 1]])
array[i] = array[i - 1] + 1;
else
array[i] = 0;
}
}
if(array == null || pattern == null || target == null)
return -1;
int target_index = start;
int pattern_index = 0;
int token_length = target.Length;
int pattern_length = pattern.Length;
while(target_index < token_length && pattern_index < pattern_length) {
if(target[target_index] == pattern[pattern_index]) {
target_index++;
pattern_index++;
} else {
if(pattern_index == begin)
target_index++;
else
pattern_index = array[pattern_index - 1];
}
}
if(pattern_index == pattern_length)
return target_index - pattern_length;
return -1;
}4 鏀寔閫氶厤絎?鍜?鐨凨MP綆楁硶
...
while(target_index < token_length && pattern_index < pattern_length) {
if(target[target_index] == pattern[pattern_index]|| pattern[pattern_index] == '?') {
target_index++;
pattern_index++;
} else {
...
寤虹珛澶辨晥鍑芥暟鐨勮繃紼嬪拰鍖歸厤榪囩▼綾諱技錛屼慨鏀瑰涓嬶細
...
for(i = 1; i < s; i++) {
if(pattern[i] == pattern[array[i - 1]]|| pattern[i] == '?' || pattern[array[i - 1]] == '?')
array[i] = array[i - 1] + 1;
...
0 0 0 1 2 - 6 6 6 7 8
public void Build() {
if(pattern == null)
throw new Exception("KMP Exception : null pattern");
array = new int[pattern.Length];
int i = 0, s = pattern.Length;
if(s > 1)
array[0] = 0;
int begin = 0;
for(i = 1; i < s; i++) {
if(pattern[i] == '*') {
array[i] = i;
begin = i + 1;
} else if(pattern[i] == pattern[array[i - 1]] || pattern[i] == '?' || pattern[array[i - 1]] == '?')
array[i] = array[i - 1] + 1;
else
array[i] = begin;
}
}
if(array == null || pattern == null || target == null)
return -1;
int target_index = start;
int pattern_index = 0;
int token_length = target.Length;
int pattern_length = pattern.Length;
int begin = 0;
while(target_index < token_length && pattern_index < pattern_length) {
if(pattern[pattern_index] == '*') {
begin = pattern_index + 1;
pattern_index++;
} else if(target[target_index] == pattern[pattern_index] || pattern[pattern_index] == '?') {
target_index++;
pattern_index++;
} else {
if(pattern_index == begin)
target_index++;
else
pattern_index = array[pattern_index - 1];
}
}
if(pattern_index == pattern_length)
return target_index - pattern_length + begin;
return -1;
}5 姝e垯璇█鍜岀‘瀹氱姸鎬佽嚜鍔ㄦ満
6 緇撹
鐗堟潈澹版槑錛氭湰鏂囧彲浠ヨ嚜鐢辮漿杞斤紝杞澆鏃惰鍔″繀浠ヨ秴閾炬帴褰㈠紡鏍囨槑鏂囩珷鍘熷鍑哄鍜屼綔鑰呬俊鎭強鏈0鏄?
浣滆?langm
鍘熸枃:http://www.matrix.org.cn/resource/article/44/44056_NoClassDefDoundErr.html
鍏抽敭瀛?NoClassDefDoundErr ClassNotFoundException
鍦ㄨ榪欑瘒鏂囩珷涔嬪墠錛屼綘鏈濂戒簡瑙d竴涓婮ava鐨凟xception鏈哄埗銆?/p>
涔熻浣犲湪寮鍙戠殑榪囩▼涓粡甯稿湴瑙佸埌ClassNotFoundException鍜孨oClassDefFoundErr榪欎袱涓紓甯革紝姣忔瘡鐪嬪埌涔嬪悗錛岄兘浼氫竴姒傝岃鐨勬槸綾繪病鏈夋壘鍒幫紝浣嗘湁浜涙椂鍊欒鍒頒粬浠殑鏃跺欏張鏈変簺鐤戞儜錛堣嚦灝戞垜鏄繖鏍鳳級錛屼負浠涔圝ava瑕佺敤涓や釜寮傚父鏉ヨ〃紺虹被瀹氫箟娌℃湁鎵懼埌閭o紵浠栦滑涔嬮棿鏈変粈涔堝尯鍒偅錛?/p>
姝e閥浠婂ぉ鎴戝張紕板埌浜嗚繖涓棶棰橈紝欏轟究鐨勪粩緇嗙爺絀朵簡涓涓嬭繖涓や釜寮傚父鐨勫尯鍒?
棣栧厛錛?
ClassNotFoundException鐩存帴緇ф壙涓嶦xception錛屽畠鏄竴涓猚hecked鐨勫紓甯搞?
NoClassDefFoundErr 緇ф壙鑷狤rror->LinkageError 錛屽畠鏄竴涓猽nchecked鐨勫紓甯搞?/p>
涓嬮潰璁╂垜浠湅涓涓嬩袱涓紓甯稿湪API鏂囨。涓殑璇存槑
ClassNotFoundException錛?
褰撳簲鐢ㄥ皾璇曠敤瀛楃涓插悕縐伴氳繃涓嬮潰鐨勬柟娉曡杞戒竴涓被鏃惰繖涓被鐨勫畾涔夊嵈娌℃湁鎵懼埌鏃朵細鎶涘嚭鐨勫紓甯搞?
Class.forName
ClassLoader.findSystemClass
ClassLoader.loadClass
NoClassDefFoundErr錛?
褰揓VM鎴栬匔lassLoader瀹炰緥灝濊瘯瑁呰澆涓涓被鐨勫畾涔夛紙榪欓氬父鏄竴涓柟娉曡皟鐢ㄦ垨鑰卬ew琛ㄨ揪寮忓垱寤轟竴涓疄渚嬭繃紼嬬殑涓閮ㄥ垎錛夎岃繖涓被瀹氫箟騫舵病鏈夋壘鏃舵墍鎶涘嚭鐨勯敊璇?
褰撶紪璇戠殑鏃跺欏彲浠ユ壘鍒拌繖涓被鐨勫畾涔夛紝浣嗘槸浠ュ悗榪欎釜綾諱笉鍐嶅瓨鍦ㄣ?/p>
榪欐瘮杈冩樉鑰屾槗瑙佷簡鍚э紝璇誨ソ鏂囨。鏄緢閲嶈鐨勪簨鎯呫傝繖閲屾垜灝辮涓涓嬫垜瀵硅繖涓や釜綾葷殑鍖哄埆鐨勭悊瑙c?/p>
ClassNotFoundException寮傚父鍙嚭鐜板湪浣犵殑搴旂敤紼嬪簭涓誨姩鐨勮杞界被鐨勮繃紼嬩腑錛岃繖涓紓甯稿緢澶氭椂鍊欏嚭鐜板湪鎴戜滑鐨勫簲鐢ㄦ鏋跺湪鍒濆鍖栨垨鑰呰繍琛屼腑鍔ㄦ佽杞藉凡閰嶇疆鐨勭被鐨勮繃紼嬩腑銆傝繖縐嶆儏鍐典笅鎴戜滑搴旇棣栧厛媯鏌ユ垜浠殑閰嶇疆鎴栬呭弬鏁版槸鍚﹂敊璇紝鏄惁浼佸浘瑁呰澆涓涓茍涓嶅瓨鍦ㄧ殑綾伙紝濡傛灉閰嶇疆娌℃湁閿欒錛屾垜浠氨搴旇鏌ョ湅Classpath鏄惁閰嶇疆閿欒鑰屽鑷碈lassLoader鏃犳硶鎵懼埌榪欎釜綾伙紝涔熷簲璇ユ鏌ヨ瑁呰澆鐨勭被鏄惁鍦ㄤ竴涓猨ar鍖呬腑鑰屾垜浠湪寮曞叆榪欎釜jar鍖呯殑榪囩▼涓槸鍚︽湁閬楁紡鎴栭敊璇紙榪欓噷jar鍖呯殑鐗堟湰涔熸槸涓涓渶瑕佹牸澶栨敞鎰忕殑闂錛屽緢澶氭椂鍊欐販涔辯殑jar鍖呯増鏈細閫犳垚澶鐨勯夯鐑︼級銆?
NoClassDefFoundErr寮傚父涓鑸嚭鐜板湪鎴戜滑緙栬瘧鐜鍜岃繍琛岀幆澧冧笉涓鑷寸殑鎯呭喌涓嬶紝灝辨槸璇存垜浠湁鍙兘鍦ㄧ紪璇戣繃鍚庢洿鏀逛簡Classpath鎴栬卝ar鍖呮墍浠ュ鑷村湪榪愯鐨勮繃紼嬩腑JVM鎴栬匔lassLoader鏃犳硶鎵懼埌榪欎釜綾葷殑瀹氫箟錛堟垜鏇劇粡鍦ㄧ紪璇戝悗浣滀簡涓嬈ar鍖呯殑娓呯悊錛岀劧鍚庡簲鐢ㄥ氨閫佺粰浜嗘垜涓涓繖鏍風殑紺肩墿錛夈?/p>
鎴戜滑緇忓父鐢⊿DK寮鍙戝簲鐢紝寮鍙戠殑榪囩▼涓寮曞叆寰堝jar鍖咃紝鏈変簺SDK涔熶細璁懼畾鑷繁鐨凜lasspath銆傜紪璇戣繃紼嬬粨鏉熷悗鍦ㄨ繍琛岀殑榪囩▼涓氨瑕佸皢宸插紑鍙戠殑搴旂敤鍜屾墍鏈夊紩鍏ョ殑jar鍖呮嫹璐濆埌搴旂敤鏈嶅姟鍣ㄧ殑鐩稿簲鐩綍涓嬫墠鍙互榪愯錛岃屽簲鐢ㄦ湇鍔″櫒浣跨敤鐨凜lasspath涔熷緢鏈夊彲鑳戒笌SDK鐨勪笉鍚岋紝鍦ㄨ繖涓繃紼嬩腑灝辨湁寰堝ぇ鐨勫嚑鐜囬犳垚鍙屾柟鐜涓嶄竴鑷淬傛墍浠ュ緢澶氬紑鍙戣呭氨浼氶亣鍒板湪SDK涓彲浠ョ紪璇戯紝榪愯涔熸病鏈夐棶棰橈紝浣嗘槸鍚屾牱鐨勭▼搴忔斁鍒板簲鐢ㄦ湇鍔″櫒涓婂氨鍑虹幇NoClassDefFoundErr榪欎釜寮傚父榪欑鎯呭喌錛岃繖鏄鍒濆鑰呭緢鎸犲ご鐨勪竴涓棶棰樸?/p>
浠ヤ笂灝辨槸鎴戝榪欎袱涓紓甯哥殑涓鐐逛釜浜虹悊瑙o紝甯屾湜瀵瑰悇浣嶅紑鍙戣呮湁鎵甯姪錛屽彲浠ヨ鍚勪綅寮鍙戣呭湪浠ュ悗鐨勫紑鍙戣繃紼嬩腑鑳藉鏇村揩鐨勬壘鍒伴棶棰樻墍鍦ㄣ傜寮鍙戦『鍒?/p>
鎹曡幏閿欒鏈鐞嗘兂鐨勬槸鍦ㄧ紪璇戞湡錛屾渶濂藉湪璇曞浘榪愯紼嬪簭浠ュ墠銆傜劧鑰岋紝騫墮潪鎵鏈夐敊璇兘鑳藉湪緙栬瘧鏈熼棿渚︽祴鍒般傛湁浜涢棶棰樺繀欏誨湪榪愯鏈熼棿瑙e喅銆傝閿欒鐨勭紨緇撹呴氳繃涓瀹氱殑鏂規硶棰勫厛鍚戞帴鏀惰呬紶閫掍竴浜涢傚綋鐨勪俊鎭紝浣垮叾鐭ラ亾鍙兘鍙戠敓浠涔堟牱鐨勯敊璇互鍙婅濡備綍澶勭悊閬囧埌鐨勯棶棰橈紝榪欏氨鏄疛ava鐨勫紓甯告帶鍒舵満鍒躲?br />“寮傚父”錛圗xception錛夎繖涓瘝琛ㄨ揪鐨勬槸涓縐嶆甯告儏鍐典箣澶栫殑“寮傚父”銆傚湪闂鍙戠敓鐨勬椂鍊欙紝鎴戜滑鍙兘涓嶇煡鍏蜂綋璇ュ浣曡В鍐籌紝浣嗚偗瀹氱煡閬撳凡涓嶈兘涓嶉【涓鍒囧湴緇х畫涓嬪幓銆傛鏃訛紝蹇呴』鍧氬喅鍦板仠涓嬫潵錛屽茍鐢辨煇浜恒佹煇鍦版寚鍑哄彂鐢熶簡浠涔堜簨鎯咃紝浠ュ強璇ラ噰鍙栦綍縐嶅絳栥傚紓甯告満鍒剁殑鍙︿竴欏瑰ソ澶勫氨鏄兘澶熺畝鍖栭敊璇帶鍒朵唬鐮併傛垜浠啀涔熶笉鐢ㄦ鏌ヤ竴涓壒瀹氱殑閿欒錛岀劧鍚庡湪紼嬪簭鐨勫澶勫湴鏂瑰鍏惰繘琛屾帶鍒躲傛澶栵紝涔熶笉闇瑕佸湪鏂規硶璋冪敤鐨勬椂鍊欐鏌ラ敊璇紙鍥犱負淇濊瘉鏈変漢鑳芥崟鑾瘋繖閲岀殑閿欒錛夈傛垜浠彧闇瑕佸湪涓涓湴鏂瑰鐞嗛棶棰橈細“寮傚父鎺у埗妯″潡”鎴栬?#8220;寮傚父鎺у埗鍣?#8221;銆傝繖鏍峰彲鏈夋晥鍑忓皯浠g爜閲忥紝騫跺皢閭d簺鐢ㄤ簬鎻忚堪鍏蜂綋鎿嶄綔鐨勪唬鐮佷笌涓撻棬綰犳閿欒鐨勪唬鐮佸垎闅斿紑銆備竴鑸儏鍐典笅錛岀敤浜庤鍙栥佸啓鍏ヤ互鍙婅皟璇曠殑浠g爜浼氬彉寰楁洿瀵屾湁鏉$悊銆?br />鑻ユ煇涓柟娉曚駭鐢熶竴涓紓甯革紝蹇呴』淇濊瘉璇ュ紓甯歌兘琚崟鑾鳳紝騫惰幏寰楁紜寰呫侸ava鐨勫紓甯告帶鍒舵満鍒剁殑涓涓ソ澶勫氨鏄厑璁告垜浠湪涓涓湴鏂瑰皢綺懼姏闆嗕腑鍦ㄨ瑙e喅鐨勯棶棰樹笂錛岀劧鍚庡湪鍙︿竴涓湴鏂瑰寰呮潵鑷偅涓唬鐮佸唴閮ㄧ殑閿欒銆傞偅涓彲鑳藉彂鐢熷紓甯哥殑鍦版柟鍙仛“璀︽垝鍖?#8221;錛屽畠鏄竴涓鍙ュ潡錛屾垜浠湁蹇呰媧鵑仯璀︽帰鏃ュ鐩戣鐫銆傜敓鎴愮殑寮傚父蹇呴』鍦ㄦ煇涓湴鏂硅鎹曡幏鍜岃繘琛屽鐞嗭紝灝辮薄璀﹀療鎶撳埌瀚岀枒鐘悗瑕佸甫鍒拌緗插幓璇㈤棶銆傝繖涓湴鏂逛究鏄紓甯告帶鍒舵ā鍧椼?br />“璀︽垝鍖?#8221;鏄竴涓猼ry鍏抽敭瀛楀紑澶村悗闈㈢敤鑺辨嫭鍙鋒嫭璧鋒潵鐨勮鍙ュ潡錛屾垜浠妸瀹冨彨浣?#8220;try鍧?#8221;銆傚綋try鍧椾腑鏈夎鍙ュ彂鐢熷紓甯告椂灝辨幏鍑烘煇縐嶅紓甯哥被鐨勪竴涓璞°傚紓甯歌寮傚父鎺у埗鍣ㄦ崟鑾峰拰澶勭悊錛屽紓甯告帶鍒跺櫒绱ф帴鍦╰ry鍧楀悗闈紝涓旂敤catch鍏抽敭瀛楁爣璁幫紝鍥犳鍙仛“catch鍧?#8221;銆俢atch鍧楀彲浠ユ湁澶氫釜錛屾瘡涓涓敤鏉ュ鐞嗕竴涓浉搴旂殑寮傚父錛屽洜涓哄湪“璀︽垝鍖?#8221;鍐呭彲鑳藉彂鐢熺殑寮傚父縐嶇被涓嶆涓涓傛墍浠ワ紝寮傚父澶勭悊璇彞鐨勪竴鑸牸寮忔槸錛?br />try {
// 鍙兘浜х敓寮傚父鐨勪唬鐮?br /> }
catch (寮傚父瀵硅薄 e) {
//寮傚父 e鐨勫鐞嗚鍙?br /> }catch (寮傚父瀵硅薄 e1) {
//寮傚父 e鐨勫鐞嗚鍙?br /> }catch (寮傚父瀵硅薄 e2) {
//寮傚父 e鐨勫鐞嗚鍙?br /> }
鍗充嬌涓嶄嬌鐢╰ry-catch緇撴瀯錛屽彂鐢熷紓甯告椂Java鐨勫紓甯告帶鍒舵満鍒朵篃浼氭崟鑾瘋寮傚父錛岃緭鍑哄紓甯哥殑鍚嶇О騫朵粠寮傚父鍙戠敓鐨勪綅緗墦鍗頒竴涓爢鏍堣窡韙傜劧鍚庣珛鍗崇粓姝㈢▼搴忕殑榪愯銆備笅闈㈢殑渚嬪瓙鍙戠敓浜嗕竴涓?#8220;闆墮櫎”寮傚父錛屽悗闈㈢殑hello娌℃湁琚墦鍗般?/font>
渚? 娌℃湁浣滃紓甯告帶鍒剁殑紼嬪簭銆?/font>
///
public
class
Exception1 {
public
static
void
main(String args[]) {
int
b = 0;
int
a = 3 / b;
System.out.println(
"Hello!"
);
}
}
///
杈撳嚭緇撴灉錛?br />java.lang.ArithmeticException: / by zero
at Exception1.main(Exception1.java:5)
Exception in thread "main" Exit code: 1
There were errors
浣嗘槸濡傛灉浣跨敤浜唗ry-catch鏉ュ鐞嗗紓甯革紝閭d箞鍦ㄦ墦鍗板嚭寮傚父淇℃伅鍚庯紝紼嬪簭榪樺皢緇х畫榪愯涓嬪幓銆備笅闈㈡槸澶勭悊浜嗙殑浠g爜銆?/font>
///
// Exception2.java
public
class
Exception2 {
public
static
void
main(String args[]) {
try {
int
b = 0;
int
a = 3 / b;
}
catch(ArithmeticException e) {
e.printStackTrace
}
System.out.println(
"Hello!"
);
}
}
///
杈撳嚭緇撴灉錛?br />Exception:
java.lang.ArithmeticException: / by zero
at Exception2.main(Exception1.java:5)
Hello!
涓庡墠渚嬩笉鍚岀殑鏄紝Hello!琚緭鍑轟簡銆傝繖灝辨槸try-catch緇撴瀯鐨勭敤澶勶紝瀹冧嬌寮傚父鍙戠敓鍜屽鐞嗗悗紼嬪簭寰椾互“鎭㈠”鑰屼笉鏄?#8220;涓柇”銆?/font>
涓轟簡浣垮紓甯告帶鍒舵満鍒舵洿鍑鴻壊鍦板彂鎸ュ畠鐨勫姛鏁堬紝Java璁捐鑰呭嚑涔庢墍浠ュ彲鑳藉彂鐢熺殑寮傚父錛岄鍒朵簡鍚勮壊鍚勬牱鐨勫紓甯哥被鍜岄敊璇被銆傚畠浠兘鏄粠“鍙幏鍑?#8221;綾籘hrowable緇ф壙鑰屾潵鐨勶紝瀹冩淳鐢熷嚭涓や釜綾籈rror鍜孍xception銆傜敱Error媧劇敓鐨勫瓙綾誨懡鍚嶄負XXXError錛屽叾涓瘝XXX鏄弿榪伴敊璇被鍨嬬殑璇嶃傜敱Exception媧劇敓鐨勫瓙綾誨懡鍚嶄負XXXException錛屽叾涓瘝XXX鏄弿榪板紓甯哥被鍨嬬殑璇嶃侲rror綾誨鐞嗙殑鏄繍琛屼嬌緋葷粺鍙戠敓鐨勫唴閮ㄩ敊璇紝鏄笉鍙仮澶嶇殑錛屽敮涓鐨勫姙娉曞彧瑕佺粓姝㈣繍琛岃繍琛岀▼搴忋傚洜姝わ紝瀹㈡埛紼嬪簭鍛樺彧瑕佹帉鎻″拰澶勭悊濂紼xception綾誨氨鍙互浜嗐?br />Exception綾繪槸涓鍒囧紓甯哥殑鏍廣傜幇鎴愮殑寮傚父綾婚潪甯鎬箣澶氾紝鎴戜滑涓嶅彲鑳戒篃娌℃湁蹇呰鍏ㄩ儴鎺屾彙瀹冦傚ソ鍦ㄥ紓甯哥被鐨勫懡鍚嶈鍒欏ぇ鑷存弿榪板嚭浜嗚綾葷殑鐢ㄩ旓紝鑰屽紓甯哥被鐨勬柟娉曞熀鏈槸涓鏍風殑銆備笅闈㈢粰鍑簂ang鍖呬腑澹版槑鐨勯儴鍒嗗紓甯哥被銆?/font>
RuntimeException 榪愯鏃跺紓甯?br />NullPointerException 鏁版嵁娌℃湁鍒濆鍖栧氨浣跨敤
IndexOutOfBoundsException 鏁扮粍鎴栧瓧絎︿覆绱㈠紩瓚婄晫
NoSuchFieldException 鏂囦歡鎵句笉鍒?br />NoSuchMethodException 鏂規硶娌℃湁瀹氫箟
ArithmeticException 闈炴硶綆楁湳榪愯
鍦ㄥ叾浠栧寘涓篃鏈夌浉鍏崇殑寮傚父綾伙紝渚嬪io鍖呬腑鏈塈OEception綾匯傚埄鐢ㄥ紓甯哥殑鍛藉悕瑙勫垯錛屼綘鍙互浣跨敤涓嬮潰鐨凞OS鍛戒護鍦ㄥ寘鎵鍦ㄧ殑鐩綍鏌ョ湅鏈変粈涔堝紓甯哥被鍙敤錛?br /> DIR *Eception.class
瀵逛簬榪愯鏃跺紓甯窻untimeException錛屾垜浠病蹇呰涓撻棬涓哄畠鍐欎竴涓紓甯告帶鍒跺櫒錛屽洜涓哄畠浠槸鐢變簬緙栫▼涓嶄弗璋ㄨ岄犳垚鐨勯昏緫閿欒銆傚彧瑕佽鍑虹幇緇堟錛屽畠浼氳嚜鍔ㄥ緱鍒板鐞嗐傞渶瑕佺▼搴忓憳榪涜寮傚父澶勭悊鐨勬槸閭d簺闈炶繍琛屾湡寮傚父銆?br />Throwable鏈変笁涓熀鏈柟娉曪細
String getMessage() 鑾峰緱璇︾粏鐨勬秷鎭?
String toString() 榪斿洖瀵規湰綾葷殑涓孌電畝瑕佽鏄庯紝鍏朵腑鍖呮嫭璇︾粏鐨勬秷鎭紙濡傛灉鏈夌殑璇濓級銆?
void printStackTrace() 鎴?#160; void printStackTrace(PrintStream)
鎵撳嵃鍑鴻皟鐢ㄥ爢鏍堣礬寰勩傝皟鐢ㄥ爢鏍堟樉紺哄嚭灝嗘垜浠甫鍒板紓甯稿彂鐢熷湴鐐圭殑鏂規硶璋冪敤鐨勯『搴忋?
鍥犱負Exception綾繪槸涓鍒囧紓甯哥殑鏍癸紝鎵浠ュ浠諱綍涓涓幇鏈夌殑寮傚父綾婚兘鍙互浣跨敤涓婅堪鏂規硶銆?
寮傚父瑙勮寖 鍜?/strong> throws
java搴撶▼搴忓憳涓轟簡浣垮鎴風▼搴忓憳鍑嗙‘鍦扮煡閬撹緙栧啓浠涔堜唬鐮佹潵鎹曡幏鎵鏈夋綔鍦ㄧ殑寮傚父錛岄噰鐢ㄤ竴縐嶅彨鍋歵hrows鐨勮娉曠粨鏋勩傚畠鐢ㄦ潵閫氱煡閭d簺瑕佽皟鐢ㄦ柟娉曠殑瀹㈡埛紼嬪簭鍛橈紝浠栦滑鍙兘浠庤嚜宸辯殑鏂規硶閲?#8220;鎺?#8221;鍑轟粈涔堟牱鐨勫紓甯搞傝繖渚挎槸鎵璋撶殑“寮傚父瑙勮寖”錛屽畠灞炰簬鏂規硶澹版槑鐨勪竴閮ㄥ垎錛屽嵆鍦ㄨ嚜鍙橀噺錛堝弬鏁幫級鍒楄〃鐨勫悗闈㈠姞涓妕hrows 寮傚父綾誨垪琛ㄣ備緥濡?br /> void f() throws tooBig, tooSmall, divZero { 鏂規硶浣搣
鑻ヤ嬌鐢ㄤ笅榪頒唬鐮侊細
void f() [ // ...
瀹冩剰鍛崇潃涓嶄細浠庢柟娉曢噷“鎺?#8221;鍑哄紓甯革紙闄ょ被鍨嬩負RuntimeException鐨勫紓甯鎬互澶栵紝瀹冨彲鑳戒粠浠諱綍鍦版柟鎺峰嚭錛夈?br />濡傛灉涓涓柟娉曚嬌鐢ㄤ簡寮傚父瑙勮寖錛屾垜浠湪璋冪敤瀹冩椂蹇呴』浣跨敤try-catch緇撴瀯鏉ユ崟鑾峰拰澶勭悊寮傚父瑙勮寖鎵鎸囩ず鐨勫紓甯革紝鍚﹀垯緙栬瘧紼嬪簭浼氭姤閿欒屼笉鑳介氳繃緙栬瘧銆傝繖姝f槸Java鐨勫紓甯告帶鍒舵満鍒剁殑鏉板嚭璐$尞錛屽畠瀵瑰彲鑳藉彂鐢熺殑鎰忓鍙婃棭棰勯槻浠庤屽姞寮轟簡浠g爜鐨勫仴澹с?br />鍦ㄤ嬌鐢ㄤ簡寮傚父瑙勮寖鐨勬柟娉曞0鏄庝腑錛屽簱紼嬪簭鍛樹嬌鐢╰hrow璇彞鏉ユ幏鍑轟竴涓紓甯搞倀hrow璇彞鐨勬牸寮忎負錛?br /> thrownew XXXException();
鐢辨鍙錛宼hrow璇彞鎺峰嚭鐨勬槸XXX綾誨瀷鐨勫紓甯哥殑瀵硅薄錛堥殣寮忕殑鍙ユ焺錛夈傝宑atch鎺у埗鍣ㄦ崟鑾峰璞℃椂瑕佺粰鍑轟竴涓彞鏌?catch(XXXException e)銆?br />鎴戜滑涔熷彲浠ラ噰鍙?#8220;嬈洪獥鎵嬫”錛岀敤throw璇彞“鎺?#8221;鍑轟竴涓茍娌℃湁鍙戠敓鐨勫紓甯搞傜紪璇戝櫒鑳界悊瑙f垜浠殑瑕佹眰錛屽茍寮鴻揩浣跨敤榪欎釜鏂規硶鐨勭敤鎴峰綋浣滅湡鐨勪駭鐢熶簡閭d釜寮傚父澶勭悊銆傚湪瀹為檯搴旂敤涓紝鍙皢鍏朵綔涓洪偅涓紓甯哥殑涓涓?#8220;鍗犱綅絎?#8221;浣跨敤銆傝繖鏍蜂竴鏉ワ紝浠ュ悗鍙互鏂逛究鍦頒駭鐢熷疄闄呯殑寮傚父錛屾瘚闇淇敼鐜版湁鐨勪唬鐮併備笅闈㈡垜浠敤“嬈洪獥鎵嬫”緇欏嚭涓涓崟鑾峰紓甯哥殑紺轟緥紼嬪簭銆?/font>
渚? 鏈緥紼嬫紨紺哄紓甯哥被鐨勫父鐢ㄦ柟娉曘?/font>
///
public
class ExceptionMethods {
publicstaticvoid main(String[] args) {
try {
thrownew Exception("Here's my Exception");
} catch(Exception e) {
System.out.println("Caught Exception");
System.out.println(
"e.getMessage(): " + e.getMessage());
System.out.println(
"e.toString(): " + e.toString());
System.out.println("e.printStackTrace():");
e.printStackTrace();
}
}
}
///
璇ョ▼搴忚緭鍑哄涓嬶細
Caught Exception
e.getMessage(): Here's my Exception
e.toString(): java.lang.Exception: Here's my Exception
e.printStackTrace():
java.lang.Exception: Here's my Exception
at ExceptionMethods.main
鍦ㄤ竴涓猼ry鍖轟腑娼滃湪鐨勫紓甯稿彲鑳芥槸澶氱綾誨瀷鐨勶紝閭f椂鎴戜滑闇瑕佺敤澶氫釜catch鍧楁潵鎹曡幏鍜屽鐞嗚繖浜涘紓甯搞備絾寮傚父鍙戠敓鏃舵幏鍑轟簡鏌愮被寮傚父瀵硅薄錛孞ava渚濇閫愪釜媯鏌ヨ繖浜涘紓甯告帶鍒跺櫒錛屽彂鐜頒笌鎺峰嚭鐨勫紓甯哥被鍨嬪尮閰嶆椂灝辨墽琛岄偅浠ユ澶勭悊浠g爜錛岃屽叾浣欑殑涓嶄細琚墽琛屻備負浜嗛槻姝㈠彲鑳介仐婕忎簡鏌愪竴綾誨紓甯告帶鍒跺櫒錛屽彲浠ユ斁緗竴涓崟鑾稥xception綾葷殑鎺у埗鍣ㄣ侲xception鏄彲浠ヤ粠浠諱綍綾繪柟娉曚腑“鎺?#8221;鍑虹殑鍩烘湰綾誨瀷銆備絾鏄畠蹇呴』鏀懼湪鏈鍚庝竴涓綅緗紝鍥犱負瀹冭兘澶熸埅鑾蜂換浣曞紓甯革紝浠庤屼嬌鍚庨潰鍏蜂綋鐨勫紓甯告帶鍒跺櫒涓嶈搗浣滅敤銆備笅闈㈢殑紺轟緥璇存槑浜嗚繖涓鐐廣?/font>
渚? 鏈緥紼嬫紨紺哄涓紓甯告帶鍒跺櫒鐨勬帓鍒楁搴忕殑浣滅敤銆?/font>
///
public
class
MutilCatch {
private staticvoid test(int
i) {
try
{
int
x = i;
if
(x>0)
throw
new
ArithmeticException (
"this is a Arithmetic Exception!"
);
else
if
(x<0)
throw
new
NullPointerException (
"this is a NullPointer Exception!"
);
else
throw
new
Exception(
"this is a Exception!"
);
}
catch
(ArithmeticException e) {
System.out.println(e.toString());
}
catch
(NullPointerException e) {
System.out.println(e.toString());
}
catch
(Exception e) {
System.out.println(e.toString());
}
}
public
static
void
main(String[] args) {
test(-1); test(0); test(1);
}
}
///
榪愯緇撴灉錛?br />java.lang.NullPointerException: this is a NullPointer Exception!
java.lang.Exception: this is a Exception!
java.lang.ArithmeticException: this is a Arithmetic Exception!
濡傛灉浣犳妸鎹曡幏Exception鐨刢atch鏀懼湪鍓嶉潰錛岀紪璇戝氨閫氫笉榪囥?/font>
鎴戜滑緇忓父浼氶亣鍒拌繖鏍風殑鎯呭喌錛屾棤璁轟竴涓紓甯告槸鍚﹀彂鐢燂紝蹇呴』鎵ц鏌愪簺鐗瑰畾鐨勪唬鐮併傛瘮濡傛枃浠跺凡緇忔墦寮錛屽叧闂枃浠舵槸蹇呴』鐨勩備絾鏄紝鍦╰ry鍖哄唴浣嶄簬寮傚父鍙戠敓鐐逛互鍚庣殑浠g爜錛屽湪鍙戠敓寮傚父鍚庝笉浼氳鎵ц銆傚湪catch鍖轟腑鐨勪唬鐮佸湪寮傚父娌℃湁鍙戠敓鐨勬儏鍐典笅涓嶄細琚墽琛屻備負浜嗘棤璁哄紓甯告槸鍚﹀彂鐢熼兘瑕佹墽琛岀殑浠g爜錛屽彲鍦ㄦ墍鏈夊紓甯告帶鍒跺櫒鐨勬湯灝句嬌鐢ㄤ竴涓猣inally浠庡彞錛屽湪finally鍧椾腑鏀劇疆榪欎簺浠g爜銆傦紙浣嗗湪鎭㈠鍐呭瓨鏃朵竴鑸兘涓嶉渶瑕侊紝鍥犱負鍨冨溇鏀墮泦鍣ㄤ細鑷姩鐓ф枡涓鍒囥傦級鎵浠ュ畬鏁寸殑寮傚父鎺у埗緇撴瀯璞′笅闈㈣繖涓牱瀛愶細
try { 璀︽垝鍖哄煙 }
catch (A a1) { 鎺у埗鍣?A }
catch (B b1) { 鎺у埗鍣?B }
catch (C c1) { 鎺у埗鍣?C }
finally { 蹇呴』鎵ц鐨勪唬鐮亇
///
// FinallyWorks.java
// The finally clause is always executed
public
class FinallyWorks {
staticint count = 0;
publicstaticvoid main(String[] args) {
while(true) {
try {
// post-increment is zero first time:
if(count++ == 0)
thrownew Exception();
System.out.println("No exception");
} catch(Exception e) {
System.out.println("Exception thrown");
} finally {
System.out.println("in finally clause");
if(count == 2) break; // out of "while"
}
}
}
}
///
榪愯緇撴灉錛?br />Exception thrown
in finally clause
No exception
in finally clause
涓寮濮媍ount=0鍙戠敓寮傚父錛岀劧鍚庤繘鍏inally鍧楋紱榪涘叆寰幆絎簩杞病鏈夊紓甯革紝浣嗗張鎵ц涓嬈inally鍧楋紝騫跺湪鍏朵腑璺沖嚭寰幆銆?br />涓嬮潰鎴戜滑緇欏嚭涓涓湁鐨勫疄鐢ㄤ絾杈冧負澶嶆潅涓鐐圭殑紼嬪簭銆傛垜浠垱寤轟簡涓涓狪nputFile鐨勭被銆傚畠鐨勪綔鐢ㄦ槸鎵撳紑涓涓枃浠訛紝鐒跺悗姣忔璇誨彇瀹冪殑涓琛屽唴瀹廣?/font>
渚? 璇繪枃鏈枃浠跺茍鏄劇ず鍒板睆騫曚笂銆?/font>
///
//: Cleanup.java
// Paying attention to exceptions in constructors
import java.io.*;
class InputFile {
private BufferedReader in;
InputFile(String fname) throws Exception {
try {
in = new BufferedReader(new FileReader(fname));
// Other code that might throw exceptions
} catch(FileNotFoundException e) {
System.out.println("Could not open " + fname);
// Wasn't open, so don't close it
throw e;
} catch(Exception e) {
// All other exceptions must close it
try {
in.close();
} catch(IOException e2) {
System.out.println("in.close() unsuccessful");
}
throw e;
} finally {
// Don't close it here!!!
}
}
String getLine() {
String s;
try {
s = in.readLine();
} catch(IOException e) {
System.out.println("readLine() unsuccessful");
s = "failed";
}
return s;
}
void cleanup() {
try {
in.close();
} catch(IOException e2) {
System.out.println("in.close() unsuccessful");
}
}
}
publicclass Cleanup {
publicstaticvoid main(String[] args) {
try {
InputFile in = new InputFile("Cleanup.java");
String s;
int i = 1;
while((s = in.getLine()) != null)
System.out.println(""+ i++ + ": " + s);
in.cleanup();
} catch(Exception e) {
System.out.println( "Caught in main, e.printStackTrace()");
e.printStackTrace();
}
}
}
///
榪愯鍚庤緭鍑虹殑鍓?琛屾槸錛?br />1: //: Cleanup.java
2: // Paying attention to exceptions in constructors
3: import java.io.*;
綆瑕佽鏄?InputFile鐨勭被鍖呭惈涓涓瀯寤哄櫒鍜屼袱涓柟娉昪leanup鍜実etLine銆傛瀯寤哄櫒瑕佹墦寮涓涓枃浠秄name錛岄鍏堣鎹曡幏FileNotFoundException綾誨紓甯搞傚湪瀹冪殑澶勭悊浠g爜涓啀鎺峰嚭榪欎釜寮傚父(throw e;)銆傚湪鏇撮珮鐨勬帶鍒跺櫒涓瘯鍥懼叧闂枃浠訛紝騫舵崟鎹夊叧闂け璐ョ殑寮傚父IOException銆俢leanup()鍏抽棴鏂囦歡錛実etLine()璇繪枃浠剁殑涓琛屽埌瀛楃涓詫紝瀹冧滑閮界敤浜嗗紓甯稿鐞嗘満鍒躲侰leanup鏄富綾伙紝鍦╩ain()涓鍏堝垱寤轟竴涓狪nputFile綾誨璞★紝鍥犱負瀹冪殑鏋勫緩鍣ㄥ0鏄庢椂鐢ㄤ簡寮傚父瑙勮寖錛屾墍浠ュ繀欏葷敤try-catch緇撴瀯鏉ユ崟鑾峰紓甯搞?/font>
铏界劧Java綾誨簱鎻愪緵浜嗗崄鍒嗕赴瀵岀殑寮傚父綾誨瀷錛岃兘澶熸弧瓚崇粷澶у鏁扮紪紼嬮渶瑕併備絾鏄紝鍦ㄥ紑鍙戣緝澶х殑紼嬪簭鏃訛紝涔熸湁鍙兘闇瑕佸緩绔嬭嚜宸辯殑寮傚父綾匯傝鍒涘緩鑷繁鐨勫紓甯哥被錛屽繀欏諱粠涓涓幇鏈夌殑寮傚父綾誨瀷緇ф壙鈥斺旀渶濂藉湪鍚箟涓婁笌鏂板紓甯歌繎浼箋傚垱寤轟竴涓紓甯哥浉褰撶畝鍗曪紝鍙鎸夊涓嬫牸寮忓啓涓や釜鏋勫緩鍣ㄥ氨琛岋細
class MyException extends Exception {
public MyException() {}
public MyException(String msg) {
super(msg);
}
}
榪欓噷鐨勫叧閿槸“extends Exception”錛屽畠鐨勬剰鎬濇槸錛氶櫎鍖呮嫭涓涓狤xception鐨勫叏閮ㄥ惈涔変互澶栵紝榪樻湁鏇村鐨勫惈涔夈傚鍔犵殑浠g爜鏁伴噺闈炲父灝戔斺斿疄闄呭彧娣誨姞浜嗕袱涓瀯寤哄櫒錛屽MyException鐨勫垱寤烘柟寮忚繘琛屼簡瀹氫箟銆傝璁頒綇錛屽亣濡傛垜浠笉鏄庣‘璋冪敤涓涓熀紜綾繪瀯寤哄櫒錛岀紪璇戝櫒浼氳嚜鍔ㄨ皟鐢ㄥ熀紜綾婚粯璁ゆ瀯寤哄櫒銆傚湪絎簩涓瀯寤哄櫒涓紝閫氳繃浣跨敤super鍏抽敭瀛楋紝鏄庣‘璋冪敤浜嗗甫鏈変竴涓猄tring鍙傛暟鐨勫熀紜綾繪瀯寤哄櫒銆?/font>
渚? 鏈緥紼嬫紨紺哄緩绔嬪拰搴旂敤鑷繁鐨勫紓甯哥被銆?/font>
///
//: Inheriting.java
// Inheriting your own exceptions
class MyException extends Exception {
public MyException() {}
public MyException(String msg) {
super(msg);
}
}
publicclass Inheriting {
publicstaticvoid f() throws MyException {
System.out.println(
"Throwing MyException from f()");
thrownew MyException();
}
publicstaticvoid g() throws MyException {
System.out.println(
"Throwing MyException from g()");
thrownew MyException("Originated in g()");
}
publicstaticvoid main(String[] args) {
try {
f();
} catch(MyException e) {
e.printStackTrace();
}
try {
g();
} catch(MyException e) {
e.printStackTrace();
}
}
}
///
杈撳嚭緇撴灉錛?br />Throwing MyException from f()
MyException
at Inheriting.f(Inheriting.java:14)
at Inheriting.main(Inheriting.java:22)
Throwing MyException from g()
MyException: Originated in g()
at Inheriting.g(Inheriting.java:18)
at Inheriting.main(Inheriting.java:27)
class MyException2 extends Exception {
public MyException2() {}
public MyException2(String msg) {
super(msg);
}
public MyException2(String msg, int x) {
super(msg);
i = x;
}
public int val() { return i; }
private int i;
}
鏈珷灝忕粨錛?/font>
J2SE 1.5 浠ュ墠鐨勭増鏈姹傜洿鎺ヤ嬌鐢?XML 瑙f瀽鍣ㄦ潵瑁呰澆閰嶇疆鏂囦歡騫跺瓨鍌ㄨ緗傝櫧鐒惰繖騫墮潪鏄竴浠跺洶闅劇殑浜嬫儏錛屽茍涓旇В鏋愬櫒鏄鉤鍙扮殑鏍囧噯閮ㄥ垎錛屼絾鏄澶栫殑宸ヤ綔鎬繪槸鏈夌偣璁╀漢鐑︺傛渶榪戞洿鏂扮殑 java.util.Properties 綾葷幇鍦ㄦ彁渚涗簡涓縐嶄負紼嬪簭瑁呰澆鍜屽瓨鍌ㄨ緗殑鏇村鏄撶殑鏂規硶錛?loadFromXML(InputStream is) 鍜?storeToXML(OutputStream os, String comment) 鏂規硶銆?
Properties 鍩烘湰鐭ヨ瘑
濡傛灉涓嶇啛鎮?java.util.Properties 綾伙紝閭d箞鐜板湪鍛婅瘔鎮ㄥ畠鏄敤鏉ュ湪涓涓枃浠朵腑瀛樺偍閿?鍊煎鐨勶紝鍏朵腑閿拰鍊兼槸鐢ㄧ瓑鍙峰垎闅旂殑錛屽娓呭崟 1 鎵紺恒?
娓呭崟 1. 涓緇勫睘鎬хず渚?/p>
foo=bar
fu=baz
灝嗘竻鍗?1 瑁呰澆鍒?Properties 瀵硅薄涓悗錛屾偍灝卞彲浠ユ壘鍒頒袱涓敭錛?foo 鍜?fu 錛夊拰涓や釜鍊鹼紙 foo 鐨?bar 鍜?fu 鐨?baz 錛変簡銆傝繖涓被鏀寔甯?\u 鐨勫祵鍏?Unicode 瀛楃涓詫紝浣嗘槸榪欓噷閲嶈鐨勬槸姣忎竴欏瑰唴瀹歸兘褰撲綔 String 銆?
娓呭崟 2 鏄劇ず浜嗗浣曡杞藉睘鎬ф枃浠跺茍鍒楀嚭瀹冨綋鍓嶇殑涓緇勯敭鍜屽箋傚彧闇浼犻掕繖涓枃浠剁殑 InputStream 緇?load() 鏂規硶錛屽氨浼氬皢姣忎竴涓敭-鍊煎娣誨姞鍒?Properties 瀹炰緥涓傜劧鍚庣敤 list() 鍒楀嚭鎵鏈夊睘鎬ф垨鑰呯敤 getProperty() 鑾峰彇鍗曠嫭鐨勫睘鎬с?
娓呭崟 2. 瑁呰澆灞炴?/p>
import java.util.*;
import java.io.*;
public class LoadSample {
public static void main(String args[]) throws Exception {
Properties prop = new Properties();
FileInputStream fis =
new FileInputStream("sample.properties");
prop.load(fis);
prop.list(System.out);
System.out.println("\nThe foo property: " +
prop.getProperty("foo"));
}
}
榪愯 LoadSample 紼嬪簭鐢熸垚濡傛竻鍗?3 鎵紺虹殑杈撳嚭銆傛敞鎰?list() 鏂規硶鐨勮緭鍑轟腑閿?鍊煎鐨勯『搴忎笌瀹冧滑鍦ㄨ緭鍏ユ枃浠朵腑鐨勯『搴忎笉涓鏍楓?Properties 綾誨湪涓涓暎鍒楄〃錛坔ashtable錛屼簨瀹炰笂鏄竴涓?Hashtable 瀛愮被錛変腑鍌ㄥ瓨涓緇勯敭-鍊煎錛屾墍浠ヤ笉鑳戒繚璇侀『搴忋?
娓呭崟 3. LoadSample 鐨勮緭鍑?/p>
-- listing properties --
fu=baz
foo=bar
The foo property: bar
XML 灞炴ф枃浠?br />榪欓噷娌℃湁浠涔堟柊鍐呭銆?Properties 綾繪繪槸榪欐牱宸ヤ綔鐨勩備笉榪囷紝鏂扮殑鍦版柟鏄粠涓涓?XML 鏂囦歡涓杞戒竴緇勫睘鎬с傚畠鐨?DTD 濡傛竻鍗?4 鎵紺恒?
娓呭崟 4. 灞炴?DTD
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD for properties -->
<!ELEMENT properties ( comment?, entry* ) >
<!ATTLIST properties version CDATA #FIXED "1.0">
<!ELEMENT comment (#PCDATA) >
<!ELEMENT entry (#PCDATA) >
<!ATTLIST entry key CDATA #REQUIRED>
濡傛灉涓嶆兂緇嗚 XML DTD錛岄偅涔堝彲浠ュ憡璇夋偍瀹冨叾瀹炲氨鏄鍦ㄥ鍥?<properties> 鏍囩涓寘瑁呯殑鏄竴涓?<comment> 鏍囩錛屽悗闈㈡槸浠繪剰鏁伴噺鐨?<entry> 鏍囩銆傚姣忎竴涓?<entry> 鏍囩錛屾湁涓涓敭灞炴э紝杈撳叆鐨勫唴瀹瑰氨鏄畠鐨勫箋傛竻鍗?5 鏄劇ず浜?娓呭崟 1涓殑灞炴ф枃浠剁殑 XML 鐗堟湰鏄粈涔堟牱瀛愮殑銆?
娓呭崟 5. XML 鐗堟湰鐨勫睘鎬ф枃浠?/p>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "<properties>
<comment>Hi</comment>
<entry key="foo">bar</entry>
<entry key="fu">baz</entry>
</properties>
濡傛灉娓呭崟 6 鎵紺猴紝璇誨彇 XML 鐗堟湰鐨?Properties 鏂囦歡涓庤鍙栬佹牸寮忕殑鏂囦歡娌′粈涔堜笉鍚屻?
娓呭崟 6. 璇誨彇 XML Properties 鏂囦歡
import java.util.*;
import java.io.*;
public class LoadSampleXML {
public static void main(String args[]) throws Exception {
Properties prop = new Properties();
FileInputStream fis =
new FileInputStream("sampleprops.xml");
prop.loadFromXML(fis);
prop.list(System.out);
System.out.println("\nThe foo property: " +
prop.getProperty("foo"));
}
}
鍏充簬璧勬簮緇戝畾鐨勮鏄?br />铏界劧 java.util.Properties 綾葷幇鍦ㄩ櫎浜嗘敮鎸侀敭-鍊煎錛岃繕鏀寔灞炴ф枃浠朵綔涓?XML 鏂囦歡錛屼笉騫哥殑鏄紝娌℃湁鍐呯疆鐨勯夐」鍙互灝?ResourceBundle 浣滀負涓涓?XML 鏂囦歡澶勭悊銆傛槸鐨勶紝 PropertyResourceBundle 涓嶄嬌鐢?Properties 瀵硅薄鏉ヨ杞界粦瀹氾紝涓嶈繃瑁呰澆鏂規硶鐨勪嬌鐢ㄦ槸紜紪鐮佸埌綾諱腑鐨勶紝鑰屼笉浣跨敤杈冩柊鐨?loadFromXML() 鏂規硶銆?
榪愯娓呭崟 6 涓殑紼嬪簭浜х敓涓庡師鏉ョ殑紼嬪簭鐩稿悓鐨勮緭鍑猴紝濡?娓呭崟 2鎵紺恒?
淇濆瓨 XML 灞炴?br />鏂扮殑 Properties 榪樻湁涓涓姛鑳芥槸灝嗗睘鎬у瓨鍌ㄥ埌 XML 鏍煎紡鐨勬枃浠朵腑銆傝櫧鐒?store() 鏂規硶浠嶇劧浼氬垱寤轟竴涓被浼?娓呭崟 1 鎵紺虹殑鏂囦歡錛屼絾鏄幇鍦ㄥ彲浠ョ敤鏂扮殑 storeToXML() 鏂規硶鍒涘緩濡?娓呭崟 5 鎵紺虹殑鏂囦歡銆傚彧瑕佷紶閫掍竴涓?OutputStream 鍜屼竴涓敤浜庢敞閲婄殑 String 灝卞彲浠ヤ簡銆傛竻鍗?7 灞曠ず浜嗘柊鐨?storeToXML() 鏂規硶銆?
娓呭崟 7. 灝?Properties 瀛樺偍涓?XML 鏂囦歡
import java.util.*;
import java.io.*;
public class StoreXML {
public static void main(String args[]) throws Exception {
Properties prop = new Properties();
prop.setProperty("one-two", "buckle my shoe");
prop.setProperty("three-four", "shut the door");
prop.setProperty("five-six", "pick up sticks");
prop.setProperty("seven-eight", "lay them straight");
prop.setProperty("nine-ten", "a big, fat hen");
FileOutputStream fos =
new FileOutputStream("rhyme.xml");
prop.storeToXML(fos, "Rhyme");
fos.close();
}
}
榪愯娓呭崟 7 涓殑紼嬪簭浜х敓鐨勮緭鍑哄娓呭崟 8 鎵紺恒?/p>
娓呭崟 8. 瀛樺偍鐨?XML 鏂囦歡
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "<properties>
<comment>Rhyme</comment>
<entry key="seven-eight">lay them straight</entry>
<entry key="five-six">pick up sticks</entry>
<entry key="nine-ten">a big, fat hen</entry>
<entry key="three-four">shut the door</entry>
<entry key="one-two">buckle my shoe</entry>
</properties>
緇撴潫璇?br />浣跨敤 XML 鏂囦歡榪樻槸浣跨敤鑰佸紡鐨?a=b 綾誨瀷鐨勬枃浠跺畬鍏ㄥ彇鍐充簬鎮ㄨ嚜宸便傝佸紡鏂囦歡浠庡唴瀛樼殑瑙掑害鐪嬭偗瀹氭槸杞婚噺綰х殑銆備笉榪囷紝鐢變簬 XML 鐨勬櫘閬嶄嬌鐢紝浜轟滑浼氭湡鏈?XML 鏍煎紡嫻佽璧鋒潵錛屽洜涓哄畠宸茬粡琚箍娉涗嬌鐢ㄤ簡錛屽彧涓嶈繃娌℃湁鐢ㄥ埌 Properties 瀵硅薄銆傞夋嫨瀹屽叏鍦ㄦ偍銆傚垎鏋愯蔣浠跺寘 private XMLUtils 綾葷殑婧愪唬鐮佷互鑾峰緱鍏充簬鎵浣跨敤鐨?XML 瑙f瀽鐨勬洿澶氫俊鎭?/p>
PTest.java
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 瀹炵幇properties鏂囦歡鐨勮鍙?br /> * @author bbflyerwww
* @date 2006-08-02
*/
public class PTest {
public static void main(String[] args) {
try {
long start = System.currentTimeMillis();
InputStream is = new FileInputStream("conf.properties");
Properties p = new Properties();
p.load(is);
is.close();
System.out.println("SIZE : " + p.size());
System.out.println("homepage : " + p.getProperty("homepage"));
System.out.println("author : " + p.getProperty("author"));
System.out.println("school : " + p.getProperty("school"));
System.out.println("date : " + p.getProperty("date"));
long end = System.currentTimeMillis();
System.out.println("Cost : " + (end - start));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
Java鎬ц兘鐨勪紭鍖栵紙涓嬶級
鍦╦ava涓紝錛堝璞★級鍐呭瓨鍦板潃鐨勬瘮杈冿紝鏄氳繃==瀹屾垚鐨勩傛瘮濡?#160;
榪欐牱鐨勮鍙ヤ腑錛屾垜浠涓猴紝濡傛灉obj1鍜宱bj2鐨勫唴瀛樺湴鍧鐩稿悓錛屽垯榪斿洖true
鑰宔quals()閫氬父鏄瘮杈冨唴瀹圭殑銆傝繖閲岃“閫氬父” 錛屾槸鍥犱負鍦ㄦ渶鏍規湰鐨凮bject綾諱腑錛宔qual()鍑芥暟鍋氱殑鏄湴鍧鐨勬瘮杈冦傝屽湪鍏朵粬鍑犱箮鎵鏈夌殑綾諱腑錛宔quals()閮界粡榪囬噸杞斤紝榪涜鍐呭鐨勬瘮杈冦?/p>
鑰屽湪璇磂quals()鐨勬椂鍊欐垜浠繕娑夊強hashCode()鏄洜涓哄湪鏈変簺搴旂敤涓紙姣斿錛孒ashMap鐨刱ey鏄璞★級錛屽繀欏誨湪閲嶈澆equals()鐨勫悓鏃墮噸杞絟ashCode()銆?strong>鍥犱負java涓粯璁?Object)鐨刪ashCode鏄牴鎹璞$殑鍦板潃璁$畻寰楀埌鐨勩?/strong>
鎴戜滑閫氬父涓嶄細娉ㄦ剰鍒拌繖涓棶棰橈紝鍥犱負鎴戜滑閫氬父鎵浣跨敤鐨?em>key閮芥槸綆鍗曠被鍨嬶紝鎴栬呮槸String, Long絳変竴浜涚壒孌婄殑瀵硅薄錛堝叾鐗規畩鎬ц鍙傜湅絎旇呭湪鍐檍ava 嫻呮嫹璐濆拰娣辨嫹璐濇椂鐨勮璁猴級錛岃繖鏃跺欙紝榪欎釜闂琚垜浠棤鎰忛棿緇曡繃浜?/p>
鏈変漢宸茬粡姒傛嫭浜嗚繖縐嶆垜浠拷鐣ヤ簡鐨勬儏鍐碉細“濡傛灉浣犳兂灝嗕竴涓璞鏀懼叆鍙︿竴涓敹闆嗭紙闆嗗悎錛夊璞閲岋紝鎴栬呬嬌鐢ㄨ繖涓璞涓烘煡鎵句竴涓厓瀵硅薄鍦ㄦ敹闆嗗 璞閲屼綅緗殑閽ュ寵錛坘ey錛夛紝騫舵敮鎸佹槸鍚﹀綰籌紙isContains()錛夛紝鍒犻櫎鏀墮泦瀵硅薄B閲岀殑鍏冨璞★紙remove()?錛夎繖鏍風殑鎿嶄綔錛岄偅涔堬紝equals()鍜宧ashCode()鍑芥暟蹇呴』寮鍙戣呰嚜宸卞畾涔夈?#8221; 錛堟嫭鍙蜂負絎旇呮坊鍔狅級
涓轟簡渚夸簬鐞嗚В錛屼婦涓孌電▼搴忎負渚嬶細
榪欐浠g爜鐨勭粨鏋滄槸浠涔堬紵絳旀鏄痭ullPointerExcetpion.
鑰屾妸hashCode()鐨勬敞閲婂幓闄わ紝紼嬪簭灝卞彲浠ヨ繑鍥炴紜殑緇撴灉浜嗐備負浠涔堝憿錛熷洜涓猴細
Map.put(key,value)鏃舵牴鎹甼ey.hashCode鐢熸垚涓涓唴閮╤ash鍊鹼紝鏍規嵁榪欎釜hash鍊煎皢瀵硅薄瀛樻斁鍦ㄤ竴涓猼able涓?/p>
Map.get(key)浼氭瘮杈僰ey.hashCode鍜宔quals鏂規硶錛屽綋涓斾粎褰撹繖涓よ呯浉絳夋椂錛屾墠鑳芥紜畾浣嶅埌table銆傝屾垜浠榪囷紝榛樿鐨刯ava鏄鍦板潃榪涜姣旇緝鐨勩?/p>
瀹冨寘鎷袱涓被錛歅attern鍜孧atcher Pattern
涓涓狿attern鏄竴涓鍒欒〃杈懼紡緇忕紪璇戝悗鐨勮〃鐜版ā寮忋?
Matcher
涓涓狹atcher瀵硅薄鏄竴涓姸鎬佹満鍣紝瀹冧緷鎹甈attern瀵硅薄鍋氫負鍖歸厤妯″紡瀵瑰瓧絎︿覆灞曞紑鍖歸厤媯鏌ャ?
棣栧厛涓涓狿attern瀹炰緥璁㈠埗浜嗕竴涓墍鐢ㄨ娉曚笌PERL鐨勭被浼肩殑姝e垯琛ㄨ揪寮忕粡緙栬瘧鍚庣殑妯″紡錛岀劧鍚庝竴涓狹atcher瀹炰緥鍦ㄨ繖涓粰瀹氱殑Pattern瀹炰緥鐨勬ā寮?#173;鎺у埗涓嬭繘琛屽瓧絎︿覆鐨勫尮閰嶅伐浣溿?
浠ヤ笅鎴戜滑灝卞垎鍒潵鐪嬬湅榪欎袱涓被錛?
2.Pattern綾?
Pattern鐨勬柟娉曞涓嬶細 static Pattern compile(String regex)
灝嗙粰瀹氱殑姝e垯琛ㄨ揪寮忕紪璇戝茍璧嬩簣緇橮attern綾?
static Pattern compile(String regex, int flags)
鍚屼笂錛屼絾澧炲姞flag鍙傛暟鐨勬寚瀹氾紝鍙夌殑flag鍙傛暟鍖呮嫭錛欳ASE
INSENSITIVE,MULTILINE,DOTALL,UNICODE CASE錛?CANON EQ
int flags()
榪斿洖褰撳墠Pattern鐨勫尮閰峟lag鍙傛暟.
Matcher matcher(CharSequence input)
鐢熸垚涓涓粰瀹氬懡鍚嶇殑Matcher瀵硅薄
static boolean matches(String regex, CharSequence input)
緙栬瘧緇欏畾鐨勬鍒欒〃杈懼紡騫朵笖瀵硅緭鍏ョ殑瀛椾覆浠ヨ姝e垯琛ㄨ揪寮忎負妯″紑灞曞尮閰?璇ユ柟娉曢傚悎浜庤姝e垯琛ㄨ揪寮忓彧浼氫嬌鐢ㄤ竴嬈$殑鎯呭喌錛屼篃灝辨槸鍙繘琛屼竴嬈″尮閰嶅伐浣滐紝鍥犱負榪欑鎯呭喌涓嬪茍涓嶉渶瑕佺敓鎴愪竴涓狹atcher瀹炰緥銆?
String pattern()
榪斿洖璇atter瀵硅薄鎵緙栬瘧鐨勬鍒欒〃杈懼紡銆?
String[] split(CharSequence input)
灝嗙洰鏍囧瓧絎︿覆鎸夌収Pattern閲屾墍鍖呭惈鐨勬鍒欒〃杈懼紡涓烘ā榪涜鍒嗗壊銆?
String[] split(CharSequence input, int limit)
浣滅敤鍚屼笂錛屽鍔犲弬鏁發imit鐩殑鍦ㄤ簬瑕佹寚瀹氬垎鍓茬殑孌墊暟錛屽灝唋imi璁句負2錛岄偅涔堢洰鏍囧瓧絎︿覆灝嗘牴鎹鍒欒〃杈懼紡鍒嗕負鍓蹭負涓ゆ銆?
涓涓鍒欒〃杈懼紡錛屼篃灝辨槸涓涓叉湁鐗瑰畾鎰忎箟鐨勫瓧絎︼紝蹇呴』棣栧厛瑕佺紪璇戞垚涓轟竴涓狿attern綾葷殑瀹炰緥錛岃繖涓狿attern瀵硅薄灝嗕細浣跨敤matcher()鏂規硶鏉ョ敓鎴愪竴涓狹atcher瀹炰緥錛屾帴鐫渚垮彲浠ヤ嬌鐢ㄨ
Matcher瀹炰緥浠ョ紪璇戠殑姝e垯琛ㄨ揪寮忎負鍩虹瀵圭洰鏍囧瓧絎︿覆榪涜鍖歸厤宸ヤ綔錛屽涓狹atcher鏄彲浠ュ叡鐢ㄤ竴涓狿attern瀵硅薄鐨勩?
鐜板湪鎴戜滑鍏堟潵鐪嬩竴涓畝鍗曠殑渚嬪瓙錛屽啀閫氳繃鍒嗘瀽瀹冩潵浜嗚В鎬庢牱鐢熸垚涓涓狿attern瀵硅薄騫朵笖緙栬瘧涓涓鍒欒〃杈懼紡錛屾渶鍚庢牴鎹繖涓鍒欒〃杈懼紡灝嗙洰鏍囧瓧絎︿覆榪涜鍒嗗壊錛?
import java.util.regex.*;
public class Replacement{
public static void main(String[] args) throws Exception {
// 鐢熸垚涓涓狿attern,鍚屾椂緙栬瘧涓涓鍒欒〃杈懼紡
Pattern p = Pattern.compile("[/]+");
//鐢?/b>Pattern鐨剆plit()鏂規硶鎶婂瓧絎︿覆鎸?/"鍒嗗壊
String[] result = p.split(
"Kevin has seen銆奓EON銆媠eveal times,because it is a good film."
+"/
鍑枃宸茬粡鐪嬭繃銆婅繖涓潃鎵嬩笉澶喎銆嬪嚑嬈′簡錛屽洜涓哄畠鏄竴閮?
+"濂界數褰便?鍚嶈瘝:鍑枃銆?);
for (int i=0; i<result.length; i++)
System.out.println(result[i]);
Kevin has seen銆奓EON銆媠eveal times,because it is a good film.
鍑枃宸茬粡鐪嬭繃銆婅繖涓潃鎵嬩笉澶喎銆嬪嚑嬈′簡錛屽洜涓哄畠鏄竴閮ㄥソ鐢靛獎銆?
鍚嶈瘝:鍑枃銆?
寰堟槑鏄撅紝璇ョ▼搴忓皢瀛楃涓叉寜"/"榪涜浜嗗垎孌碉紝鎴戜滑浠ヤ笅鍐嶄嬌鐢?
split(CharSequence input, int
limit)鏂規硶鏉ユ寚瀹氬垎孌電殑孌墊暟錛岀▼搴忔敼鍔ㄤ負錛?
tring[] result = p.split("Kevin has seen銆奓EON銆媠eveal times,because
it is a good film./
鍑枃宸茬粡鐪嬭繃銆婅繖涓潃鎵嬩笉澶喎銆嬪嚑嬈′簡錛屽洜涓哄畠鏄竴閮ㄥソ鐢靛獎銆?鍚嶈瘝:鍑枃銆?錛?);
榪欓噷闈㈢殑鍙傛暟"2"琛ㄦ槑灝嗙洰鏍囪鍙ュ垎涓轟袱孌點?
杈撳嚭緇撴灉鍒欎負錛?
Kevin has seen銆奓EON銆媠eveal times,because it is a good film.
鍑枃宸茬粡鐪嬭繃銆婅繖涓潃鎵嬩笉澶喎銆嬪嚑嬈′簡錛屽洜涓哄畠鏄竴閮ㄥソ鐢靛獎銆?鍚嶈瘝:鍑枃銆?
鐢變笂闈㈢殑渚嬪瓙錛屾垜浠彲浠ユ瘮杈冨嚭java.util.regex鍖呭湪鏋勯燩attern瀵硅薄浠ュ強緙栬瘧鎸囧畾鐨勬鍒欒〃杈懼紡鐨勫疄鐜版墜娉曚笌鎴戜滑鍦ㄤ笂涓綃囦腑鎵浠嬬粛鐨凧akarta-ORO
鍖呭湪瀹屾垚鍚屾牱宸ヤ綔鏃剁殑宸埆錛?b style="COLOR: black; BACKGROUND-COLOR: #ffff66">Jakarta-ORO
鍖呰鍏堟瀯閫犱竴涓狿atternCompiler綾誨璞℃帴鐫鐢熸垚涓涓狿attern瀵硅薄錛屽啀灝嗘鍒欒〃杈懼紡鐢?/b>璇atternCompiler綾葷殑compile()鏂規硶鏉ュ皢鎵闇鐨勬鍒欒〃杈懼紡緙栬瘧璧嬩簣Pattern綾伙細
PatternCompiler orocom=new Perl5Compiler();
Pattern pattern=orocom.compile("REGULAR EXPRESSIONS");
PatternMatcher matcher=new Perl5Matcher();
浣嗘槸鍦╦ava.util.regex鍖呴噷錛屾垜浠粎闇鐢熸垚涓涓狿attern綾伙紝鐩存帴浣跨敤瀹冪殑compile()鏂規硶灝卞彲浠ヨ揪鍒板悓鏍風殑鏁堟灉:
Pattern p = Pattern.compile("[/]+");
鍥犳浼間箮java.util.regex鐨勬瀯閫犳硶姣?b style="COLOR: black; BACKGROUND-COLOR: #ffff66">Jakarta-ORO鏇翠負綆媧佸茍瀹規槗鐞嗚В銆?
3.Matcher綾?
Matcher鏂規硶濡備笅錛?Matcher appendReplacement(StringBuffer sb,
String replacement)
灝嗗綋鍓嶅尮閰嶅瓙涓叉浛鎹負鎸囧畾瀛楃涓詫紝騫朵笖灝嗘浛鎹㈠悗鐨勫瓙涓蹭互鍙婂叾涔嬪墠鍒頒笂嬈″尮閰嶅瓙涓蹭箣鍚庣殑瀛楃涓叉娣誨姞鍒頒竴涓猄tringBuffer瀵硅薄閲屻?
StringBuffer appendTail(StringBuffer sb)
灝嗘渶鍚庝竴嬈″尮閰嶅伐浣滃悗鍓╀綑鐨勫瓧絎︿覆娣誨姞鍒頒竴涓猄tringBuffer瀵硅薄閲屻?
int end()
榪斿洖褰撳墠鍖歸厤鐨勫瓙涓茬殑鏈鍚庝竴涓瓧絎﹀湪鍘熺洰鏍囧瓧絎︿覆涓殑绱㈠紩浣嶇疆
銆?
int end(int group)
榪斿洖涓庡尮閰嶆ā寮忛噷鎸囧畾鐨勭粍鐩稿尮閰嶇殑瀛愪覆鏈鍚庝竴涓瓧絎︾殑浣嶇疆銆?
boolean find()
灝濊瘯鍦ㄧ洰鏍囧瓧絎︿覆閲屾煡鎵句笅涓涓尮閰嶅瓙涓層?
boolean find(int start)
閲嶈Matcher瀵硅薄錛屽茍涓斿皾璇曞湪鐩爣瀛楃涓查噷浠庢寚瀹氱殑浣嶇疆寮濮嬫煡鎵句笅涓涓尮閰嶇殑瀛愪覆銆?
String group()
榪斿洖褰撳墠鏌ユ壘鑰岃幏寰楃殑涓庣粍鍖歸厤鐨勬墍鏈夊瓙涓插唴瀹?
String group(int group)
榪斿洖褰撳墠鏌ユ壘鑰岃幏寰楃殑涓庢寚瀹氱殑緇勫尮閰嶇殑瀛愪覆鍐呭
int groupCount()
榪斿洖褰撳墠鏌ユ壘鎵鑾峰緱鐨勫尮閰嶇粍鐨勬暟閲忋?
boolean lookingAt()
媯嫻嬬洰鏍囧瓧絎︿覆鏄惁浠ュ尮閰嶇殑瀛愪覆璧峰銆?
boolean matches()
灝濊瘯瀵規暣涓洰鏍囧瓧絎﹀睍寮鍖歸厤媯嫻嬶紝涔熷氨鏄彧鏈夋暣涓洰鏍囧瓧絎︿覆瀹屽叏鍖歸厤鏃舵墠榪斿洖鐪熷箋?
Pattern pattern()
榪斿洖璇atcher瀵硅薄鐨勭幇鏈夊尮閰嶆ā寮忥紝涔熷氨鏄搴旂殑Pattern
瀵硅薄銆?
String replaceAll(String replacement)
灝嗙洰鏍囧瓧絎︿覆閲屼笌鏃㈡湁妯″紡鐩稿尮閰嶇殑瀛愪覆鍏ㄩ儴鏇挎崲涓烘寚瀹氱殑瀛楃涓層?
String replaceFirst(String replacement)
灝嗙洰鏍囧瓧絎︿覆閲岀涓涓笌鏃㈡湁妯″紡鐩稿尮閰嶇殑瀛愪覆鏇挎崲涓烘寚瀹氱殑瀛楃涓層?
Matcher reset()
閲嶈璇atcher瀵硅薄銆?
Matcher reset(CharSequence input)
閲嶈璇atcher瀵硅薄騫朵笖鎸囧畾涓涓柊鐨勭洰鏍囧瓧絎︿覆銆?
int start()
榪斿洖褰撳墠鏌ユ壘鎵鑾峰瓙涓茬殑寮濮嬪瓧絎﹀湪鍘熺洰鏍囧瓧絎︿覆涓殑浣嶇疆銆?
int start(int group)
榪斿洖褰撳墠鏌ユ壘鎵鑾峰緱鐨勫拰鎸囧畾緇勫尮閰嶇殑瀛愪覆鐨勭涓涓瓧絎﹀湪鍘熺洰鏍囧瓧絎︿覆涓殑浣嶇疆銆?
錛堝厜鐪嬫柟娉曠殑瑙i噴鏄笉鏄緢涓嶅ソ鐞嗚В錛熶笉瑕佹ワ紝寰呬細緇撳悎渚嬪瓙灝辨瘮杈冨鏄撴槑鐧戒簡錛?
涓涓狹atcher瀹炰緥鏄鐢ㄦ潵瀵圭洰鏍囧瓧絎︿覆榪涜鍩轟簬鏃㈡湁妯″紡錛堜篃灝辨槸涓涓粰瀹氱殑Pattern鎵緙栬瘧鐨勬鍒欒〃杈懼紡錛夎繘琛屽尮閰嶆煡鎵劇殑錛屾墍鏈夊線Matcher鐨勮緭鍏ラ兘鏄氳繃CharSequence鎺ュ彛鎻愪緵鐨勶紝榪欐牱鍋氱殑鐩殑鍦ㄤ簬鍙互鏀寔瀵逛粠澶氬厓鍖栫殑鏁版嵁婧愭墍鎻愪緵鐨勬暟鎹繘琛屽尮閰嶅伐浣溿?
鎴戜滑鍒嗗埆鏉ョ湅鐪嬪悇鏂規硶鐨勪嬌鐢細
鈽卪atches()/lookingAt ()/find()錛?
涓涓狹atcher瀵硅薄鏄敱涓涓狿attern瀵硅薄璋冪敤鍏秏atcher()鏂規硶鑰岀敓鎴愮殑錛屼竴鏃﹁Matcher瀵硅薄鐢熸垚,瀹冨氨鍙互榪涜涓夌涓嶅悓鐨勫尮閰嶆煡鎵炬搷浣?#173;錛?
matches()鏂規硶灝濊瘯瀵規暣涓洰鏍囧瓧絎﹀睍寮鍖歸厤媯嫻嬶紝涔熷氨鏄彧鏈夋暣涓洰鏍囧瓧絎︿覆瀹屽叏鍖歸厤鏃舵墠榪斿洖鐪熷箋?
lookingAt
()鏂規硶灝嗘嫻嬬洰鏍囧瓧絎︿覆鏄惁浠ュ尮閰嶇殑瀛愪覆璧峰銆?
find()鏂規硶灝濊瘯鍦ㄧ洰鏍囧瓧絎︿覆閲屾煡鎵句笅涓涓尮閰嶅瓙涓層?
浠ヤ笂涓変釜鏂規硶閮藉皢榪斿洖涓涓竷灝斿兼潵琛ㄦ槑鎴愬姛涓庡惁銆?
鈽卹eplaceAll ()/appendReplacement()/appendTail()錛?
Matcher綾誨悓鏃舵彁渚涗簡鍥涗釜灝嗗尮閰嶅瓙涓叉浛鎹㈡垚鎸囧畾瀛楃涓茬殑鏂規硶錛?
replaceAll()
replaceFirst()
appendReplacement()
appendTail()
replaceAll()涓巖eplaceFirst()鐨勭敤娉曢兘姣旇緝綆鍗曪紝璇風湅涓婇潰鏂規硶鐨勮В閲娿傛垜浠富瑕侀噸鐐逛簡瑙d竴涓媋ppendReplacement()鍜宎ppendTail()鏂規硶銆?
appendReplacement(StringBuffer sb, String replacement)
灝嗗綋鍓嶅尮閰嶅瓙涓叉浛鎹負鎸囧畾瀛楃涓詫紝騫朵笖灝嗘浛鎹㈠悗鐨勫瓙涓蹭互鍙婂叾涔嬪墠鍒頒笂嬈″尮閰嶅瓙涓蹭箣鍚庣殑瀛楃涓叉娣誨姞鍒頒竴涓猄tringBuffer瀵硅薄閲岋紝鑰宎ppendTail(StringBuffer
sb)
鏂規硶鍒欏皢鏈鍚庝竴嬈″尮閰嶅伐浣滃悗鍓╀綑鐨勫瓧絎︿覆娣誨姞鍒頒竴涓猄tringBuffer瀵硅薄閲屻?
渚嬪錛屾湁瀛楃涓瞗atcatfatcatfat,鍋囪鏃㈡湁姝e垯琛ㄨ揪寮忔ā寮忎負"cat"錛岀涓嬈″尮閰嶅悗璋冪敤appendReplacement(sb,"dog"),閭d箞榪欐椂StringBuffer
sb鐨勫唴瀹逛負fatdog錛屼篃灝辨槸fatcat涓殑cat琚浛鎹負dog騫朵笖涓庡尮閰嶅瓙涓插墠鐨勫唴瀹瑰姞鍒皊b閲岋紝鑰岀浜屾鍖歸厤鍚庤皟鐢╝ppendReplacement(sb,"dog")錛岄偅涔坰b鐨勫唴瀹瑰氨鍙樹負fatdogfatdog錛屽鏋滄渶鍚庡啀璋冪敤涓嬈ppendTail錛坰b錛?閭d箞sb鏈緇堢殑鍐呭灝嗘槸fatdogfatdogfat銆?
榪樻槸鏈夌偣妯$硦錛熼偅涔堟垜浠潵鐪嬩釜綆鍗曠殑紼嬪簭錛?
//璇ヤ緥灝嗘妸鍙ュ瓙閲岀殑"Kelvin"鏀逛負"Kevin"
import java.util.regex.*;
public class MatcherTest{
public static void main(String[] args)
throws Exception {
//鐢熸垚Pattern瀵硅薄騫朵笖緙栬瘧涓涓畝鍗曠殑姝e垯琛ㄨ揪寮?Kelvin"
Pattern p = Pattern.compile("Kevin");
//鐢?/b>Pattern綾葷殑matcher()鏂規硶鐢熸垚涓涓狹atcher瀵硅薄
Matcher m = p.matcher("Kelvin Li and Kelvin Chan are both working in
Kelvin Chen's KelvinSoftShop company");
StringBuffer sb = new StringBuffer();
int i=0;
//浣跨敤find()鏂規硶鏌ユ壘絎竴涓尮閰嶇殑瀵硅薄
boolean result = m.find();
//浣跨敤寰幆灝嗗彞瀛愰噷鎵鏈夌殑kelvin鎵懼嚭騫舵浛鎹㈠啀灝嗗唴瀹瑰姞鍒皊b閲?
while(result) {
i++;
m.appendReplacement(sb, "Kevin");
System.out.println("絎?+i+"嬈″尮閰嶅悗sb鐨勫唴瀹規槸錛?+sb);
//緇х畫鏌ユ壘涓嬩竴涓尮閰嶅璞?
result = m.find();
鐪嬩簡涓婇潰榪欎釜渚嬬▼鏄惁瀵筧ppendReplacement()錛宎ppendTail()涓や釜鏂規硶鐨勪嬌鐢ㄦ洿娓呮鍛紝濡傛灉榪樻槸涓嶅お鑲畾鏈濂借嚜宸卞姩鎵嬪啓鍑犺浠g爜嫻?#173;璇曚竴涓嬨?
鈽単roup()/group(int group)/groupCount()錛?
璇ョ郴鍒楁柟娉曚笌鎴戜滑鍦ㄤ笂綃囦粙緇嶇殑Jakarta-ORO涓殑MatchResult
.group()鏂規硶綾諱技(鏈夊叧Jakarta-ORO璇峰弬鑰冧笂綃囩殑鍐呭)錛岄兘鏄榪斿洖涓庣粍鍖歸厤鐨勫瓙涓插唴瀹癸紝涓嬮潰浠g爜灝嗗緢濂借В閲婂叾鐢ㄦ硶錛?
import java.util.regex.*;
public class GroupTest{
public static void main(String[] args)
throws Exception {
Pattern p = Pattern.compile("(ca)(t)");
Matcher m = p.matcher("one cat,two cats in the yard");
StringBuffer sb = new StringBuffer();
boolean result = m.find();
System.out.println("璇ユ鏌ユ壘鑾峰緱鍖歸厤緇勭殑鏁伴噺涓猴細"+m.groupCount());
for(int i=1;i<=m
Matcher瀵硅薄鐨勫叾浠栨柟娉曞洜姣旇緝濂界悊瑙d笖鐢變簬綃囧箙鏈夐檺錛岃璇昏呰嚜宸辯紪紼嬮獙璇併?
4錛庝竴涓楠孍mail鍦板潃鐨勫皬紼嬪簭錛?
鏈鍚庢垜浠潵鐪嬩竴涓楠孍mail鍦板潃鐨勪緥紼嬶紝璇ョ▼搴忔槸鐢ㄦ潵媯楠屼竴涓緭鍏ョ殑EMAIL鍦板潃閲屾墍鍖呭惈鐨勫瓧絎︽槸鍚﹀悎娉曪紝铏界劧榪欎笉鏄竴涓畬鏁寸殑EMAIL鍦板潃媯楠岀▼搴忥紝瀹冧笉鑳芥楠屾墍鏈夊彲鑳藉嚭鐜扮殑鎯呭喌錛屼絾鍦ㄥ繀瑕佹椂鎮ㄥ彲浠ュ湪鍏跺熀紜涓婂鍔犳墍闇鍔熻兘銆?
import java.util.regex.*;
public class Email {
public static void main(String[] args) throws Exception {
String input = args[0];
//媯嫻嬭緭鍏ョ殑EMAIL鍦板潃鏄惁浠?
闈炴硶絎﹀彿"."鎴?@"浣滀負璧峰瀛楃
Pattern p = Pattern.compile("^\.|^\@");
Matcher m = p.matcher(input);
if (m
//媯嫻嬫槸鍚︿互"www."涓鴻搗濮?
p = Pattern.compile("^www\.");
m = p.matcher(input);
if (m
//媯嫻嬫槸鍚﹀寘鍚潪娉曞瓧絎?
p = Pattern.compile("[^A-Za-z0-9\.\@_\-~#]+");
m = p.matcher(input);
StringBuffer sb = new StringBuffer();
boolean result = m.find();
boolean deletedIllegalChars = false;
while(result) {
//濡傛灉鎵懼埌浜嗛潪娉曞瓧絎﹂偅涔堝氨璁句笅鏍囪
deletedIllegalChars = true;
//濡傛灉閲岄潰鍖呭惈闈炴硶瀛楃濡傚啋鍙峰弻寮曞彿絳夛紝閭d箞灝辨妸浠栦滑娑堝幓錛屽姞鍒癝B閲岄潰
m.appendReplacement(sb, "");
result = m.find();
閭d箞杈撳嚭緇撴灉灝嗕細鏄細EMAIL鍦板潃涓嶈兘浠?www.'璧峰
濡傛灉杈撳叆鐨凟MAIL涓篅k...@163.net
鍒欒緭鍑轟負錛欵MAIL鍦板潃涓嶈兘浠?.'鎴?@'浣滀負璧峰瀛楃
褰撹緭鍏ヤ負錛歝gjmail...@163.net
閭d箞杈撳嚭灝辨槸錛?
杈撳叆鐨凟MAIL鍦板潃閲屽寘鍚湁鍐掑彿銆侀楀彿絳夐潪娉曞瓧絎︼紝璇蜂慨鏀?
鎮ㄧ幇鍦ㄧ殑杈撳叆涓? cgjmail...@163.net
淇敼鍚庡悎娉曠殑鍦板潃搴旂被浼? cgjm...@163.net
5錛庢葷粨錛?
鏈枃浠嬬粛浜唈dk1.4.0-beta3閲屾鍒欒〃杈懼紡搴?-java.util.regex涓殑綾諱互鍙婂叾鏂規硶錛屽鏋滅粨鍚堜笌涓婁竴綃囦腑鎵浠嬬粛鐨?b style="COLOR: black; BACKGROUND-COLOR: #ffff66">Jakarta-ORO
API浣滄瘮杈冿紝璇昏呬細鏇村鏄撴帉鎻¤API鐨勪嬌鐢紝褰撶劧璇ュ簱鐨勬ц兘灝嗗湪鏈潵鐨勬棩瀛愰噷涓嶆柇鎵╁睍錛屽笇鏈涜幏寰楁渶鏂頒俊鎭殑璇昏呮渶濂藉埌鍙婃椂鍒癝UN鐨勭綉绔欏幓浜嗚В銆?
6錛庣粨鏉熻錛?
鏈潵璁″垝鍐嶅鍐欎竴綃囦粙緇嶄竴涓嬮渶浠樿垂鐨勬鍒欒〃杈懼紡搴撲腑杈冨叿浠h〃鎬х殑浣滃搧錛屼絾瑙夊緱鏃㈢劧鏈変簡鍏嶈垂涓斾紭縐鐨勬鍒欒〃杈懼紡搴撳彲浠ヤ嬌鐢紝浣曞繀榪樿鍘繪壘闇浠樿垂鐨勫憿錛岀浉淇″緢澶氳鑰?#173;涔熸槸榪欎箞鎯崇殑:錛屾墍浠ユ湁鍏磋叮浜嗚В鏇村鍏朵粬鐨勭涓夋柟姝e垯琛ㄨ揪寮忓簱鐨勬湅鍙嬪彲浠ヨ嚜宸卞埌緗戜笂鏌ユ壘鎴栬呭埌鎴戝湪鍙傝冭祫鏂欓噷鎻愪緵鐨勭綉鍧鍘葷湅鐪嬨?
鍙傝冭祫鏂?
java.util.regex鐨勫府鍔╂枃妗?
Dana Nourie 鍜孧ike McCloskey鎵鍐欑殑Regular Expressions and the
Java™ Programming Language
闇瑕佹洿澶氱殑絎笁鏂規鍒欒〃杈懼紡璧勬簮浠ュ強鍩轟簬瀹冧滑鎵寮鍙戠殑搴旂敤紼嬪簭璇風湅http://www.meurrens.org/ip-Links/java/regex/index.html
鍏充簬浣滆?
闄堝箍浣?Kevin
Chen,姹曞ご澶у鐢靛瓙淇℃伅宸ョ▼緋誨伐縐戝澹紝鍙版咕澶ф柊鍑虹増紺劇彔嫻峰尯寮鍙戦儴錛岀幇姝e洿緇曚腑鏃ラ煩鐢靛瓙璧勬枡浣跨敤JAVA寮鍙戠數瀛愯瘝鍏哥瓑鐩稿叧欏圭洰銆傚彲閫氳繃E-mail:cgjm...@163.net浜庝粬鑱旂郴銆?/p>
鐖風埛2 銆嬭佺埜2 銆?#160;鍎垮瓙2
鑰屼笉鑳芥槸錛氱埛鐖? 銆?#160;鍎垮瓙1
榪欐牱灝變貢濂椾簡 錛屾槸涓嶏紝闂圭瑧璇濓紱鎵浠ワ紝綾昏瀹氫簡涓嶇戶鎵垮叧緋伙紝闃叉涔卞錛屼嬌緇撴瀯鍙樺緱娓呮櫚銆?br />
鎵浠ワ紝褰撴垜浠嬌鐢ㄦ爲鍨嬬粨鏋勬椂錛屼嬌鐢ㄧ被銆?br />
鐢變簬錛屽湪鐢熸椿涓繕鏈夎澶氳繖鏍風殑鎯呭喌錛屽錛屽紶涓夋槸涓浗浜猴紝閭e紶涓変粬涔熸槸緹庡浗浜哄弻閲嶈韓浠姐?br />
鍐嶅錛屾潕鍥涙槸java宸ョ▼甯?涔熸槸鍘ㄥ笀銆?br />閭f庝箞鍔烇紵錛?br />
鎴戜滑鍙互榪欎箞鍋氾細
瑙勫畾澶氫釜韜喚
public interface zhengjian{
interface China(){
public void China_L(){
//.................
}
}
interface USA(){
public void USA_L(){
//...........
}
}
public class zhangsan extends zhengjian implements Chna , USA{
public void China_L(){
// ......
}
public void USA_L(){
// ......
}
}
褰撳紶涓夊幓緹庡浗鏃訛紝鑰佺編鍙粬鎷夸釜緇胯瘉鏉ョ湅錛?br />
zhangsan.USA_L();
鍛靛懙錛屽啀涓句釜渚嬪瓙澶у灝辨竻妤氫簡錛?br />
HP鏈?#8220;涓夋槦”鍜?#8220;IBM”涓ょ錛屾垜閫氬父鑰岃█涓嶅彲鑳戒竴涓狧P鏄棦鏄?#8220;涓夋槦”鍙堟槸“IBM”鐨勫惂~~~~~~~~綾?br /> “瀹跺涵寮?#8221;鍜?#8220;鍔炲叕寮?#8221;涓ょ錛屼絾寰寰鎴戜滑鑳戒拱鍒版嫢鏈変袱縐嶆寮忕浉緇撳悎鍘傚搧鏄惂 ~~~~~~~~~~~鎺ュ彛
涓浗浜鴻璧鋒潵錛?u>綾繪湁鐐?#8220;灝佸緩涓栬鍒?#8221;錛屾帴鍙f湁鐐?#8220;榪濆弽甯哥悊涔變雞”錛屽懙鍛?img height="20" src="http://m.tkk7.com/Emoticons/QQ/lol.gif" width="20" border="0" />寮涓帺絎?/u>銆?br />
榪欐牱璇村畬澶у鍐嶅幓鐪嬩簺鐩稿叧鏂囩珷灝變細瑙夊緱寰堝鏄撲簡 鍛靛懙
鍓╀笅鎶借薄綾誨氨綆鍗曚簡錛岄偅鏄娊璞$被錛?font color="#000000">abstract錛?/font>浠栬繕鏄被錛坈lass)錛屽彧涓嶈繃鏄娊璞$殑緗簡銆?br />
鎶借薄綾?font color="#000000">瀵規煇鍏蜂綋綾誨瀷鐨勯儴鍒嗗疄鐜?-----鎶借薄綾繪槸瀵瑰叿浣撶殑鎶借薄鏂規硶鐗瑰緛鍖呮嫭錛?font color="#ff0000">鏂規硶鐨勫悕瀛椼佸弬鏁扮殑鏁扮洰銆佸弬鏁扮殑綾誨瀷銆?br />
涓嶅寘鎷細榪斿洖綾誨瀷銆佸弬鏁板悕瀛椼佸拰鎶涘嚭鐨勫紓甯搞?br />
java鎺ュ彛錛堟娊璞$被錛夌敤鏉ュ0鏄庝竴涓柊鐨勭被鍨?Java璁捐甯堝簲褰撲富瑕佷嬌鐢ㄦ帴鍙e拰鎶借薄綾誨皢杞歡鍗曚綅涓庡唴閮ㄥ拰澶栭儴鑰﹀悎(杞歡宸ョ▼涓唴瀹?璧鋒潵銆?br />
鍦ㄧ悊鎯崇殑鎯呭喌涓嬶紝涓涓叿浣撶被搴斿綋鍙疄鐜版帴鍙e拰鎶借薄綾諱腑澹版槑鐨勬柟娉曪紝鑰屼笉搴斿綋緇欏嚭澶氫綑鐨勬柟娉曪紒
鎶借薄綾諱粎鎻愪緵涓涓被鐨勯儴鍒嗗疄鐜般傛娊璞$被鍙互鏈夊疄渚嬪彉閲忋佷互鍙婁竴涓垨澶氫釜鏋勯犲嚱鏁般?br />
浜鴻繖涓蹇靛鎶借薄浜嗗惂錛?br />public abstract class Human{...}
鐢蜂漢涔熸槸
public abstract class man{...}
鏈変竴鐐瑰繀欏昏娓咃細鎺ュ彛涓嶈兘緇ф壙鎶借薄綾伙紝鎺ュ彛鍙兘緇ф壙瀹炲疄鍦ㄥ湪鐨勭被錛?br />
濡傦紝鎴戝彲浠ヤ負鏌愪釜HP鍘傚搧錛堢被錛夎瀹氫竴縐嶈鑼冿紙鎺ュ彛錛夛紝浣嗙敱浜庡悇涓巶瀹舵帹闄堝嚭鏂幫紝鎵浠ワ紝鎴戝緢闅懼鏌愪竴綾誨瀷鍘傚搧瑙勫畾錛?#8220;瀹跺涵鍨媓p”灝卞緢闅句笅涓粨璁猴紙鎺ュ彛錛夈?br />
浠庤蔣浠朵紭鍖栬搴︽潵鑰冭檻綾誨拰鎺ュ彛闂銆傜被class鏉$悊娓呮鍐呰仛鎬уソ錛岀敤浜庤蔣浠舵ā鍧楀唴閮ㄥ疄鐜幫紙姹借濺鐨勫唴閮ㄦ満
姊幫級錛涙帴鍙nterface寰堢伒媧昏﹀悎鎬уソ錛岀敤浜庢ā鍧楀閮ㄥ疄鐜幫紙濡傦紝姹借濺鎿嶄綔鏉跨殑鎸夐挳錛夈備粠鑰屽疄鐜板己鍐呰仛銆佹澗鑰﹀悎
鐨勮蔣浠惰璁℃濇兂銆?/strong>
include鎸囦護 | jsp:include鍔ㄤ綔 | |
璇硶鏍煎紡 | <%@ include file=”..”%> | <jsp:include page=”..”> |
鍙戠敓浣滅敤鐨勬椂闂?/span> | 欏甸潰杞崲鏈熼棿 | 璇鋒眰鏈熼棿 |
鍖呭惈鐨勫唴瀹?/span> | 鏂囦歡鐨勫疄闄呭唴瀹?/span> | 欏甸潰鐨勮緭鍑?/span> |
杞崲鎴愮殑Servlet | 涓婚〉闈㈠拰鍖呭惈欏甸潰杞崲涓轟竴涓?/span>Servlet | 涓婚〉闈㈠拰鍖呭惈欏甸潰杞崲涓虹嫭绔嬬殑Servlet |
褰卞搷涓婚〉闈?/span> | 鍙互 | 涓嶅彲浠?/span> |
include鎸囦護 | jsp:include鍔ㄤ綔 | |
鍙戠敓鏇存敼鏃舵槸鍚﹂渶瑕佹樉寮忔洿鏀逛富欏甸潰 | 闇瑕?/span> | 涓嶉渶瑕?/span> |
緙栬瘧鏃墮棿 | 杈冩參錛嶈祫婧愬繀欏昏瑙f瀽 | 杈冨揩 |
鎵ц鏃墮棿 | 紼嶅揩 | 杈冩參錛嶆瘡嬈¤祫婧愬繀欏昏瑙f瀽 |
鐏墊椿鎬?/span> | 杈冨樊錛嶉〉闈㈠悕縐板浐瀹?/span> | 鏇村ソ錛嶉〉闈㈠彲浠ュ姩鎬佹寚瀹?/span> |
2.濡備綍緙栧啓綰跨▼瀹夊叏鐨勪唬鐮?
寰堝涔︾睄閲岄兘璇︾粏璁茶В浜嗗浣曡繖鏂歸潰鐨勯棶棰橈紝浠栦滑涓昏璁茶В鐨勬槸濡備綍鍚屾綰跨▼瀵瑰叡浜祫婧愮殑浣跨敤鐨勯棶棰樸備富瑕佹槸瀵箂ynchronized鍏抽敭瀛楃殑鍚勭鐢ㄦ硶錛屼互鍙婇攣鐨勬蹇點?
Java1.5涓篃鎻愪緵浜嗗璇誨啓閿佽繖綾葷殑宸ュ叿綾匯傝繖浜涢兘闇瑕佽緝楂樼殑鎶宸э紝鑰屼笖鐩稿闅句簬璋冭瘯銆?
浣嗘槸錛岀嚎紼嬪悓姝ユ槸涓嶅緱浠ョ殑鏂規硶,鏄瘮杈冨鏉傜殑,鑰屼笖浼氬甫鏉ユц兘鐨勬崯澶便傜瓑鏁堢殑浠g爜涓紝涓嶉渶瑕佸悓姝ュ湪緙栧啓瀹規槗搴﹀拰鎬ц兘涓婁細鏇村ソ浜涖?
鎴戣繖閲屽己璋冪殑鏄粈涔堜唬鐮佹槸濮嬬粓涓虹嚎紼嬪畨鍏ㄧ殑銆佹槸涓嶉渶瑕佸悓姝ョ殑銆傚涓?
1)甯擱噺濮嬬粓鏄嚎紼嬪畨鍏ㄧ殑錛屽洜涓哄彧瀛樺湪璇繪搷浣溿?
2)瀵規瀯閫犲櫒鐨勮闂?new 鎿嶄綔)鏄嚎紼嬪畨鍏ㄧ殑錛屽洜涓烘瘡嬈¢兘鏂板緩涓涓疄渚嬶紝涓嶄細璁塊棶鍏變韓鐨勮祫婧愩?
3)鏈閲嶈鐨勬槸:灞閮ㄥ彉閲忔槸綰跨▼瀹夊叏鐨勩傚洜涓烘瘡鎵ц涓涓柟娉曪紝閮戒細鍦ㄧ嫭绔嬬殑絀洪棿鍒涘緩灞閮ㄥ彉閲忥紝瀹冧笉鏄叡浜殑璧勬簮銆傚眬閮ㄥ彉閲忓寘鎷柟娉曠殑鍙傛暟鍙橀噺銆?
struts user guide閲屾湁錛?
Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables , in your Action class.
璇?鍙嬌鐢ㄧ敤灞閮ㄥ彉閲忋?-緙栧啓綰跨▼瀹夊叏鐨勪唬鐮佹渶閲嶈鐨勫師鍒欏氨鏄紝鍦ˋction綾諱腑鍙嬌鐢ㄥ眬閮ㄥ彉閲忥紝涓嶄嬌鐢ㄥ疄渚嬪彉閲忋?/p>
鎬葷粨錛?
鍦↗ava鐨刉eb鏈嶅姟鍣ㄧ幆澧冧笅寮鍙戯紝瑕佹敞鎰忕嚎紼嬪畨鍏ㄧ殑闂銆傛渶綆鍗曠殑瀹炵幇鏂瑰紡灝辨槸鍦⊿ervlet鍜孲truts Action閲屼笉瑕佷嬌鐢ㄧ被鍙橀噺銆佸疄渚嬪彉閲忥紝浣嗗彲浠ヤ嬌鐢ㄧ被甯擱噺鍜屽疄渚嬪父閲忋?
濡傛灉鏈夎繖浜涘彉閲忥紝鍙互灝嗗畠浠漿鎹負鏂規硶鐨勫弬鏁頒紶鍏ワ紝浠ユ秷闄ゅ畠浠?
娉ㄦ剰涓涓鏄撴販娣嗙殑鍦版柟錛氳Servlet鎴朅ction璋冪敤鐨勭被涓?濡傚煎璞°侀鍩熸ā鍨嬬被)涓槸鍚﹀彲浠ュ畨鍏ㄧ殑浣跨敤瀹炰緥鍙橀噺錛熷鏋滀綘鍦ㄦ瘡嬈℃柟娉曡皟鐢ㄦ椂
鏂板緩涓涓璞★紝鍐嶈皟鐢ㄥ畠浠殑鏂規硶錛屽垯涓嶅瓨鍦ㄥ悓姝ラ棶棰?--鍥犱負瀹冧滑涓嶆槸澶氫釜綰跨▼鍏變韓鐨勮祫婧愶紝鍙湁鍏變韓鐨勮祫婧愭墠闇瑕佸悓姝?--鑰孲ervlet鍜孉ction鐨勫疄渚嬪浜庡涓嚎紼嬫槸鍏變韓鐨勩?
鎹㈠彞璇濊錛孲ervlet鍜孉ction鐨勫疄渚嬩細琚涓嚎紼嬪悓鏃惰皟鐢紝鑰岃繃浜嗚繖涓灞?濡傛灉鍦ㄤ綘鑷繁鐨勪唬鐮佷腑娌℃湁鍙﹀鍚姩綰跨▼錛屼笖姣忔璋冪敤鍚庣畫涓氬姟瀵硅薄鏃墮兘鏄厛鏂板緩涓涓疄渚嬪啀璋冪敤錛屽垯閮芥槸綰跨▼瀹夊叏鐨勩?/p>