『壹』 java中的枚舉類型怎麼定義
Enum作為Sun全新引進的一個關鍵字,看起來很象是特殊的class, 它也可以有自己的變數,可以定義自己的方法,可以實現一個或者多個介面。 當我們在聲明一個enum類型時,我們應該注意到enum類型有如下的一些特徵。
1.它不能有public的構造函數,這樣做可以保證客戶代碼沒有辦法新建一個enum的實例。
2.所有枚舉值都是public , static , final的。注意這一點只是針對於枚舉值,我們可以和在普通類裡面定義 變數一樣定義其它任何類型的非枚舉變數,這些變數可以用任何你想用的修飾符。
3.Enum默認實現了java.lang.Comparable介面。
4.Enum覆載了了toString方法,因此我們如果調用Color.Blue.toString()默認返回字元串」Blue」.
5.Enum提供了一個valueOf方法,這個方法和toString方法是相對應的。調用valueOf(「Blue」)將返回Color.Blue.因此我們在自己重寫toString方法的時候就要注意到這一點,一把來說應該相對應地重寫valueOf方法。
6.Enum還提供了values方法,這個方法使你能夠方便的遍歷所有的枚舉值。
7.Enum還有一個oridinal的方法,這個方法返回枚舉值在枚舉類種的順序,這個順序根據枚舉值聲明的順序而定,這里Color.Red.ordinal()返回0。
了解了這些基本特性,我們來看看如何使用它們。
1.遍歷所有有枚舉值. 知道了有values方法,我們可以輕車熟路地用ForEach循環來遍歷了枚舉值了。
for (Color c: Color.values())
System.out.println(「find value:」 + c);
2.在enum中定義方法和變數,比如我們可以為Color增加一個方法隨機返回一個顏色。
public enum Color {
Red,
Green,
Blue;
/*
*定義一個變數表示枚舉值的數目。
*(我有點奇怪為什麼sun沒有給enum直接提供一個size方法).
*/
private static int number = Color.values().length ;
/**
* 隨機返回一個枚舉值
@return a random enum value.
*/
public static Color getRandomColor(){
long random = System.currentTimeMillis() % number;
switch ((int) random){
case 0:
return Color.Red;
case 1:
return Color.Green;
case 2:
return Color.Blue;
default : return Color.Red;
}
}
}
可以看出這在枚舉類型里定義變數和方法和在普通類裡面定義方法和變數沒有什麼區別。唯一要注意的只是變數和方法定義必須放在所有枚舉值定義的後面,否則編譯器會給出一個錯誤。
3.覆載(Override)toString, valueOf方法
前面我們已經知道enum提供了toString,valueOf等方法,很多時候我們都需要覆載默認的toString方法,那麼對於enum我們怎麼做呢。其實這和覆載一個普通class的toString方法沒有什麼區別。
….
public String toString(){
switch (this){
case Red:
return "Color.Red";
case Green:
return "Color.Green";
case Blue:
return "Color.Blue";
default:
return "Unknow Color";
}
}
….
這時我們可以看到,此時再用前面的遍歷代碼列印出來的是
Color.Red
Color.Green
Color.Blue
而不是
Red
Green
Blue.
可以看到toString確實是被覆載了。一般來說在覆載toString的時候我們同時也應該覆載valueOf方法,以保持它們相互的一致性。
4.使用構造函數
雖然enum不可以有public的構造函數,但是我們還是可以定義private的構造函數,在enum內部使用。還是用Color這個例子。
public enum Color {
Red("This is Red"),
Green("This is Green"),
Blue("This is Blue");
private String desc;
Color(String desc){
this.desc = desc;
}
public String getDesc(){
return this.desc;
}
}
這里我們為每一個顏色提供了一個說明信息, 然後定義了一個構造函數接受這個說明信息。
要注意這里構造函數不能為public或者protected, 從而保證構造函數只能在內部使用,客戶代碼不能new一個枚舉值的實例出來。這也是完全符合情理的,因為我們知道枚舉值是public static final的常量而已。
5.實現特定的介面
我們已經知道enum可以定義變數和方法,它要實現一個介面也和普通class實現一個介面一樣,這里就不作示例了。
6.定義枚舉值自己的方法。
前面我們看到可以為enum定義一些方法,其實我們甚至可以為每一個枚舉值定義方法。這樣,我們前面覆載 toString的例子可以被改寫成這樣。
public enum Color {
Red {
public String toString(){
return "Color.Red";
}
},
Green {
public String toString(){
return "Color.Green";
}
},
Blue{
public String toString(){
return "Color.Blue";
}
};
}
從邏輯上來說這樣比原先提供一個「全局「的toString方法要清晰一些。
總的來說,enum作為一個全新定義的類型,是希望能夠幫助程序員寫出的代碼更加簡單易懂,個
人覺得一般也不需要過多的使用enum的一些高級特性,否則就和簡單易懂的初衷想違背了。
『貳』 jdk鍐呮湁鍝浜涚害瀹氫織鎴愮殑鍛藉悕瑙勫垯鍜岃勮寖
2017鐗堢殑闃塊噷java寮鍙戞墜鍐岋細姣旇緝澶氾紝鍙鑳藉嶅埗涓閮ㄥ垎錛屼綘鍙浠ュ幓鐧懼害鍏蜂綋鐨
涓銆佺紪紼嬭勭害
(涓)鍛藉悕瑙勭害
1.銆愬己鍒躲浠g爜涓鐨勫懡鍚嶅潎涓嶈兘浠ヤ笅鍒掔嚎鎴栫編鍏冪﹀彿寮濮嬶紝涔熶笉鑳戒互涓嬪垝綰挎垨緹庡厓絎﹀彿緇撴潫銆
鍙嶄緥錛_name/__name/$Object/name_/name$/Object$
2.銆愬己鍒躲浠g爜涓鐨勫懡鍚嶄弗紱佷嬌鐢ㄦ嫾闊充笌鑻辨枃娣峰悎鐨勬柟寮忥紝鏇翠笉鍏佽哥洿鎺ヤ嬌鐢ㄤ腑鏂囩殑鏂瑰紡銆
璇存槑錛氭g『鐨勮嫳鏂囨嫾鍐欏拰璇娉曞彲浠ヨ╅槄璇昏呮槗浜庣悊瑙o紝閬垮厤姝т箟銆傛敞鎰忥紝鍗充嬌綰鎷奸煶鍛藉悕鏂瑰紡
涔熻侀伩鍏嶉噰鐢ㄣ
鍙嶄緥錛DaZhePromotion[鎵撴姌]/getPingfenByName()[璇勫垎]/int鏌愬彉閲=3
姝d緥錛alibaba/taobao/youku/hangzhou絳夊浗闄呴氱敤鐨勫悕縐幫紝鍙瑙嗗悓鑻辨枃銆
3.銆愬己鍒躲戠被鍚嶄嬌鐢UpperCamelCase椋庢牸錛屽繀欏婚伒浠庨┘宄板艦寮忥紝浣嗕互涓嬫儏褰渚嬪栵細錛堥嗗煙妯″瀷
鐨勭浉鍏沖懡鍚嶏級DO/BO/DTO/VO絳夈
姝d緥錛歁arcoPolo/UserDO/XmlService/TcpUdpDeal/TaPromotion
鍙嶄緥錛歮acroPolo/UserDo/XMLService/TCPUDPDeal/TAPromotion
4.銆愬己鍒躲戞柟娉曞悕銆佸弬鏁板悕銆佹垚鍛樺彉閲忋佸矓閮ㄥ彉閲忛兘緇熶竴浣跨敤lowerCamelCase椋庢牸錛屽繀欏婚伒浠
椹煎嘲褰㈠紡銆
姝d緥錛localValue/getHttpMessage()/inputUserId
5.銆愬己鍒躲戝父閲忓懡鍚嶅叏閮ㄥぇ鍐欙紝鍗曡瘝闂寸敤涓嬪垝綰塊殧寮錛屽姏奼傝涔夎〃杈懼畬鏁存竻妤氾紝涓嶈佸珜鍚嶅瓧闀褲
姝d緥錛MAX_STOCK_COUNT
鍙嶄緥錛MAX_COUNT
6.銆愬己鍒躲戞娊璞$被鍛藉悕浣跨敤Abstract鎴Base寮澶達紱寮傚父綾誨懡鍚嶄嬌鐢Exception緇撳熬錛涙祴璇曠被
鍛藉悕浠ュ畠瑕佹祴璇曠殑綾葷殑鍚嶇О寮濮嬶紝浠Test緇撳熬銆
7.銆愬己鍒躲戜腑鎷鍙鋒槸鏁扮粍綾誨瀷鐨勪竴閮ㄥ垎錛屾暟緇勫畾涔夊備笅錛歋tring[]args;
鍙嶄緥錛氫嬌鐢Stringargs[]鐨勬柟寮忔潵瀹氫箟銆
8.銆愬己鍒躲慞OJO綾諱腑甯冨皵綾誨瀷鐨勫彉閲忥紝閮戒笉瑕佸姞is錛屽惁鍒欓儴鍒嗘嗘灦瑙f瀽浼氬紩璧峰簭鍒楀寲閿欒銆
鍙嶄緥錛氬畾涔変負鍩烘湰鏁版嵁綾誨瀷BooleanisSuccess錛涚殑灞炴э紝瀹冪殑鏂規硶涔熸槸isSuccess()錛孯PC
妗嗘灦鍦ㄥ弽鍚戣В鏋愮殑鏃跺欙紝鈥滀互涓衡濆瑰簲鐨勫睘鎬у悕縐版槸success錛屽艱嚧灞炴ц幏鍙栦笉鍒幫紝榪涜屾姏鍑哄紓
甯搞
9.銆愬己鍒躲戝寘鍚嶇粺涓浣跨敤灝忓啓錛岀偣鍒嗛殧絎︿箣闂存湁涓斾粎鏈変竴涓鑷鐒惰涔夌殑鑻辮鍗曡瘝銆傚寘鍚嶇粺涓浣跨敤
鍗曟暟褰㈠紡錛屼絾鏄綾誨悕濡傛灉鏈夊嶆暟鍚涔夛紝綾誨悕鍙浠ヤ嬌鐢ㄥ嶆暟褰㈠紡銆
姝d緥錛搴旂敤宸ュ叿綾誨寘鍚嶄負com.alibaba.open.util銆佺被鍚嶄負MessageUtils錛堟よ勫垯鍙傝
spring鐨勬嗘灦緇撴瀯錛
10.銆愬己鍒躲戞潨緇濆畬鍏ㄤ笉瑙勮寖鐨勭緝鍐欙紝閬垮厤鏈涙枃涓嶇煡涔夈
鍙嶄緥錛AbstractClass鈥滅緝鍐欌濆懡鍚嶆垚AbsClass錛沜ondition鈥滅緝鍐欌濆懡鍚嶆垚condi錛屾ょ被
闅忔剰緙╁啓涓ラ噸闄嶄綆浜嗕唬鐮佺殑鍙闃呰繪с
11.銆愭帹鑽愩戝傛灉浣跨敤鍒頒簡璁捐℃ā寮忥紝寤鴻鍦ㄧ被鍚嶄腑浣撶幇鍑哄叿浣撴ā寮忋
璇存槑錛氬皢璁捐℃ā寮忎綋鐜板湪鍚嶅瓧涓錛屾湁鍒╀簬闃呰昏呭揩閫熺悊瑙f灦鏋勮捐℃濇兂銆
姝d緥錛歱ublicclassOrderFactory;
publicclassLoginProxy;
publicclassResourceObserver;
12.銆愭帹鑽愩戞帴鍙g被涓鐨勬柟娉曞拰灞炴т笉瑕佸姞浠諱綍淇楗扮﹀彿錛坧ublic涔熶笉瑕佸姞錛夛紝淇濇寔浠g爜鐨勭畝媧
鎬э紝騫跺姞涓婃湁鏁堢殑Javadoc娉ㄩ噴銆傚敖閲忎笉瑕佸湪鎺ュ彛閲屽畾涔夊彉閲忥紝濡傛灉涓瀹氳佸畾涔夊彉閲忥紝鑲瀹氭槸
涓庢帴鍙f柟娉曠浉鍏籌紝騫朵笖鏄鏁翠釜搴旂敤鐨勫熀紜甯擱噺銆
姝d緥錛氭帴鍙f柟娉曠懼悕錛歷oidf();
鎺ュ彛鍩虹甯擱噺琛ㄧず錛歋tringCOMPANY="alibaba";
鍙嶄緥錛氭帴鍙f柟娉曞畾涔夛細publicabstractvoidf();
璇存槑錛欽DK8涓鎺ュ彛鍏佽告湁榛樿ゅ疄鐜幫紝閭d箞榪欎釜default鏂規硶錛屾槸瀵規墍鏈夊疄鐜扮被閮芥湁浠峰肩殑榛
璁ゅ疄鐜般
13.鎺ュ彛鍜屽疄鐜扮被鐨勫懡鍚嶆湁涓ゅ楄勫垯錛
1錛夈愬己鍒躲戝逛簬Service鍜DAO綾伙紝鍩轟簬SOA鐨勭悊蹇碉紝鏆撮湶鍑烘潵鐨勬湇鍔′竴瀹氭槸鎺ュ彛錛屽唴閮
鐨勫疄鐜扮被鐢Impl鐨勫悗緙涓庢帴鍙e尯鍒銆
姝d緥錛欳acheServiceImpl瀹炵幇CacheService鎺ュ彛銆
2錛銆愭帹鑽愩濡傛灉鏄褰㈠硅兘鍔涚殑鎺ュ彛鍚嶇О錛鍙栧瑰簲鐨勫艦瀹硅瘝鍋氭帴鍙e悕錛堥氬父鏄鈥揳ble鐨勫艦寮忥級銆
姝d緥錛欰bstractTranslator瀹炵幇Translatable銆
14.銆愬弬鑰冦戞灇涓劇被鍚嶅緩璁甯︿笂Enum鍚庣紑錛屾灇涓炬垚鍛樺悕縐伴渶瑕佸叏澶у啓錛屽崟璇嶉棿鐢ㄤ笅鍒掔嚎闅斿紑銆
璇存槑錛氭灇涓懼叾瀹炲氨鏄鐗規畩鐨勫父閲忕被錛屼笖鏋勯犳柟娉曡榛樿ゅ己鍒舵槸縐佹湁銆
姝d緥錛氭灇涓懼悕瀛楋細DealStatusEnum錛屾垚鍛樺悕縐幫細SUCCESS/UNKOWN_REASON銆
15.銆愬弬鑰冦戝悇灞傚懡鍚嶈勭害錛
A)Service/DAO灞傛柟娉曞懡鍚嶈勭害
1錛鑾峰彇鍗曚釜瀵硅薄鐨勬柟娉曠敤get鍋氬墠緙銆
2錛鑾峰彇澶氫釜瀵硅薄鐨勬柟娉曠敤list鍋氬墠緙銆
3錛鑾峰彇緇熻″肩殑鏂規硶鐢count鍋氬墠緙銆
4錛鎻掑叆鐨勬柟娉曠敤save錛堟帹鑽愶級鎴insert鍋氬墠緙銆
5錛鍒犻櫎鐨勬柟娉曠敤remove錛堟帹鑽愶級鎴delete鍋氬墠緙銆
6錛淇鏀圭殑鏂規硶鐢update鍋氬墠緙銆
B)棰嗗煙妯″瀷鍛藉悕瑙勭害
1錛鏁版嵁瀵硅薄錛歺xxDO錛寈xx鍗充負鏁版嵁琛ㄥ悕銆
2錛鏁版嵁浼犺緭瀵硅薄錛歺xxDTO錛寈xx涓轟笟鍔¢嗗煙鐩稿叧鐨勫悕縐般
3錛灞曠ず瀵硅薄錛歺xxVO錛寈xx涓鑸涓虹綉欏靛悕縐般
4錛POJO鏄DO/DTO/BO/VO鐨勭粺縐幫紝紱佹㈠懡鍚嶆垚xxxPOJO銆
(浜)甯擱噺瀹氫箟
1.銆愬己鍒躲戜笉鍏佽稿嚭鐜頒換浣曢瓟娉曞礆紙鍗蟲湭緇忓畾涔夌殑甯擱噺錛夌洿鎺ュ嚭鐜板湪浠g爜涓銆
鍙嶄緥錛Stringkey="Id#taobao_"+tradeId錛
cache.put(key,value);
2.銆愬己鍒躲憀ong鎴栬Long鍒濆嬭祴鍊兼椂錛屽繀欏諱嬌鐢ㄥぇ鍐欑殑L錛屼笉鑳芥槸灝忓啓鐨l錛屽皬鍐欏規槗璺熸暟瀛
1娣鋒穯錛岄犳垚璇瑙c
璇存槑錛歀onga=2l;鍐欑殑鏄鏁板瓧鐨21錛岃繕鏄Long鍨嬬殑2?
3.銆愭帹鑽愩戜笉瑕佷嬌鐢ㄤ竴涓甯擱噺綾葷淮鎶ゆ墍鏈夊父閲忥紝搴旇ユ寜甯擱噺鍔熻兘榪涜屽綊綾伙紝鍒嗗紑緇存姢銆傚傦細緙撳瓨
鐩稿叧鐨勫父閲忔斁鍦ㄧ被錛欳acheConsts涓嬶紱緋葷粺閰嶇疆鐩稿叧鐨勫父閲忔斁鍦ㄧ被錛欳onfigConsts涓嬨
璇存槑錛氬ぇ鑰屽叏鐨勫父閲忕被錛岄潪寰椾嬌鐢ㄦ煡鎵懼姛鑳芥墠鑳藉畾浣嶅埌淇鏀圭殑甯擱噺錛屼笉鍒╀簬鐞嗚В鍜岀淮鎶ゃ
4.銆愭帹鑽愩戝父閲忕殑澶嶇敤灞傛℃湁浜斿眰錛氳法搴旂敤鍏變韓甯擱噺銆佸簲鐢ㄥ唴鍏變韓甯擱噺銆佸瓙宸ョ▼鍐呭叡浜甯擱噺銆佸寘
鍐呭叡浜甯擱噺銆佺被鍐呭叡浜甯擱噺銆
1錛璺ㄥ簲鐢ㄥ叡浜甯擱噺錛氭斁緗鍦ㄤ簩鏂瑰簱涓錛岄氬父鏄client.jar涓鐨constant鐩褰曚笅銆
2錛搴旂敤鍐呭叡浜甯擱噺錛氭斁緗鍦ㄤ竴鏂瑰簱鐨moles涓鐨constant鐩褰曚笅銆
鍙嶄緥錛氭槗鎳傚彉閲忎篃瑕佺粺涓瀹氫箟鎴愬簲鐢ㄥ唴鍏變韓甯擱噺錛屼袱浣嶆敾鍩庡笀鍦ㄤ袱涓綾諱腑鍒嗗埆瀹氫箟浜嗚〃紺
鈥滄槸鈥濈殑鍙橀噺錛
綾A涓錛歱ublicstaticfinalStringYES="yes";
綾B涓錛歱ublicstaticfinalStringYES="y";
A.YES.equals(B.YES)錛岄勬湡鏄true錛屼絾瀹為檯榪斿洖涓false錛屽艱嚧浜х敓綰誇笂闂棰樸
3錛瀛愬伐紼嬪唴閮ㄥ叡浜甯擱噺錛氬嵆鍦ㄥ綋鍓嶅瓙宸ョ▼鐨constant鐩褰曚笅銆
4錛鍖呭唴鍏變韓甯擱噺錛氬嵆鍦ㄥ綋鍓嶅寘涓嬪崟鐙鐨constant鐩褰曚笅銆
5錛綾誨唴鍏變韓甯擱噺錛氱洿鎺ュ湪綾誨唴閮privatestaticfinal瀹氫箟銆
5.銆愭帹鑽愩戝傛灉鍙橀噺鍊間粎鍦ㄤ竴涓鑼冨洿鍐呭彉鍖栫敤Enum綾匯傚傛灉榪樺甫鏈夊悕縐頒箣澶栫殑寤朵幾灞炴э紝蹇呴』
浣跨敤Enum綾伙紝涓嬮潰姝d緥涓鐨勬暟瀛楀氨鏄寤朵幾淇℃伅錛岃〃紺烘槦鏈熷嚑銆
姝d緥錛歱ublicEnum{MONDAY(1),TUESDAY(2),WEDNESDAY(3),THURSDAY(4),FRIDAY(5),SATURDAY(6),
SUNDAY(7);}
(涓)鏍煎紡瑙勭害
1.銆愬己鍒躲戝ぇ鎷鍙風殑浣跨敤綰﹀畾銆傚傛灉鏄澶ф嫭鍙峰唴涓虹┖錛屽垯綆媧佸湴鍐欐垚{}鍗沖彲錛屼笉闇瑕佹崲琛岋紱濡傛灉
鏄闈炵┖浠g爜鍧楀垯錛
1錛宸﹀ぇ鎷鍙峰墠涓嶆崲琛屻
2錛宸﹀ぇ鎷鍙峰悗鎹㈣屻
3錛鍙沖ぇ鎷鍙峰墠鎹㈣屻
4錛鍙沖ぇ鎷鍙峰悗榪樻湁else絳変唬鐮佸垯涓嶆崲琛岋紱琛ㄧず緇堟㈠彸澶ф嫭鍙峰悗蹇呴』鎹㈣屻
2.銆愬己鍒躲宸︽嫭鍙峰拰鍚庝竴涓瀛楃︿箣闂翠笉鍑虹幇絀烘牸錛涘悓鏍鳳紝鍙蟲嫭鍙峰拰鍓嶄竴涓瀛楃︿箣闂翠篃涓嶅嚭鐜扮┖
鏍箋傝﹁佺5鏉′笅鏂規d緥鎻愮ず銆
3.銆愬己鍒躲慽f/for/while/switch/do絳変繚鐣欏瓧涓庡乏鍙蟲嫭鍙蜂箣闂撮兘蹇呴』鍔犵┖鏍箋
4.銆愬己鍒躲戜換浣曡繍綆楃﹀乏鍙沖繀欏誨姞涓涓絀烘牸銆
璇存槑錛氳繍綆楃﹀寘鎷璧嬪艱繍綆楃=銆侀昏緫榪愮畻絎&&銆佸姞鍑忎箻闄ょ﹀彿銆佷笁鐩榪愮畻絎︾瓑銆
5.銆愬己鍒躲戠緝榪涢噰鐢4涓絀烘牸錛岀佹浣跨敤tab瀛楃︺
璇存槑錛氬傛灉浣跨敤tab緙╄繘錛屽繀欏昏劇疆1涓tab涓4涓絀烘牸銆侷DEA璁劇疆tab涓4涓絀烘牸鏃訛紝
璇峰嬁鍕鵑Usetabcharacter錛涜屽湪eclipse涓錛屽繀欏誨嬀閫insertspacesfortabs銆
姝d緥錛錛堟秹鍙1-5鐐癸級
publicstaticvoidmain(String[]args){
//緙╄繘4涓絀烘牸
Stringsay="hello";
//榪愮畻絎︾殑宸﹀彸蹇呴』鏈変竴涓絀烘牸
intflag=0;
//鍏抽敭璇if涓庢嫭鍙蜂箣闂村繀欏繪湁涓涓絀烘牸錛屾嫭鍙峰唴鐨f涓庡乏鎷鍙鳳紝0涓庡彸鎷鍙蜂笉闇瑕佺┖鏍
if(flag==0){
System.out.println(say);
}
//宸﹀ぇ鎷鍙峰墠鍔犵┖鏍間笖涓嶆崲琛岋紱宸﹀ぇ鎷鍙峰悗鎹㈣
if(flag==1){
System.out.println("world");
//鍙沖ぇ鎷鍙峰墠鎹㈣岋紝鍙沖ぇ鎷鍙峰悗鏈else錛屼笉鐢ㄦ崲琛
闃塊噷宸村反Java寮鍙戞墜鍐
鈥斺旂佹㈢敤浜庡晢涓氱敤閫旓紝榪濊呭繀絀垛斺6/37
}else{
System.out.println("ok");
//鍦ㄥ彸澶ф嫭鍙峰悗鐩存帴緇撴潫錛屽垯蹇呴』鎹㈣
}
}
6.銆愬己鍒躲戝崟琛屽瓧絎︽暟闄愬埗涓嶈秴榪120涓錛岃秴鍑洪渶瑕佹崲琛岋紝鎹㈣屾椂閬靛驚濡備笅鍘熷垯錛
1錛絎浜岃岀浉瀵圭涓琛岀緝榪4涓絀烘牸錛屼粠絎涓夎屽紑濮嬶紝涓嶅啀緇х畫緙╄繘錛屽弬鑰冪ず渚嬨
2錛榪愮畻絎︿笌涓嬫枃涓璧鋒崲琛屻
3錛鏂規硶璋冪敤鐨勭偣絎﹀彿涓庝笅鏂囦竴璧鋒崲琛屻
4錛鍦ㄥ氫釜鍙傛暟瓚呴暱錛岄楀彿鍚庤繘琛屾崲琛屻
5錛鍦ㄦ嫭鍙峰墠涓嶈佹崲琛岋紝瑙佸弽渚嬨
姝d緥錛
StringBuffersb=newStringBuffer();
//瓚呰繃120涓瀛楃︾殑鎯呭喌涓嬶紝鎹㈣岀緝榪4涓絀烘牸錛屽苟涓旀柟娉曞墠鐨勭偣絎﹀彿涓璧鋒崲琛
sb.append("zi").append("xin")...
.append("huang")...
.append("huang")...
.append("huang");
鍙嶄緥錛
StringBuffersb=newStringBuffer();
//瓚呰繃120涓瀛楃︾殑鎯呭喌涓嬶紝涓嶈佸湪鎷鍙峰墠鎹㈣
sb.append("zi").append("xin")...append
("huang");
//鍙傛暟寰堝氱殑鏂規硶璋冪敤鍙鑳借秴榪120涓瀛楃︼紝涓嶈佸湪閫楀彿鍓嶆崲琛
method(args1,args2,args3,...
,argsX);
7.銆愬己鍒躲戞柟娉曞弬鏁板湪瀹氫箟鍜屼紶鍏ユ椂錛屽氫釜鍙傛暟閫楀彿鍚庤竟蹇呴』鍔犵┖鏍箋
姝d緥錛氫笅渚嬩腑瀹炲弬鐨"a",鍚庤竟蹇呴』瑕佹湁涓涓絀烘牸銆
method("a","b","c");
8.銆愬己鍒躲慖DE鐨textfileencoding璁劇疆涓UTF-8;IDE涓鏂囦歡鐨勬崲琛岀︿嬌鐢Unix鏍煎紡錛
涓嶈佷嬌鐢windows鏍煎紡銆
9.銆愭帹鑽愩戞病鏈夊繀瑕佸炲姞鑻ュ共絀烘牸鏉ヤ嬌鏌愪竴琛岀殑瀛楃︿笌涓婁竴琛岀殑鐩稿簲瀛楃﹀歸綈銆
姝d緥錛
inta=3;
longb=4L;
floatc=5F;
StringBuffersb=newStringBuffer();
璇存槑錛氬炲姞sb榪欎釜鍙橀噺錛屽傛灉闇瑕佸歸綈錛屽垯緇a銆乥銆乧閮借佸炲姞鍑犱釜絀烘牸錛屽湪鍙橀噺姣旇緝澶氱殑
鎯呭喌涓嬶紝鏄涓縐嶇瘡璧樼殑浜嬫儏銆
闃塊噷宸村反Java寮鍙戞墜鍐
鈥斺旂佹㈢敤浜庡晢涓氱敤閫旓紝榪濊呭繀絀垛斺7/37
10.銆愭帹鑽愩戞柟娉曚綋鍐呯殑鎵ц岃鍙ョ粍銆佸彉閲忕殑瀹氫箟璇鍙ョ粍銆佷笉鍚岀殑涓氬姟閫昏緫涔嬮棿鎴栬呬笉鍚岀殑璇涔
涔嬮棿鎻掑叆涓涓絀鴻屻傜浉鍚屼笟鍔¢昏緫鍜岃涔変箣闂翠笉闇瑕佹彃鍏ョ┖琛屻
璇存槑錛氭病鏈夊繀瑕佹彃鍏ュ氳岀┖鏍艱繘琛岄殧寮銆
(鍥)OOP瑙勭害
1.銆愬己鍒躲戦伩鍏嶉氳繃涓涓綾葷殑瀵硅薄寮曠敤璁塊棶姝ょ被鐨勯潤鎬佸彉閲忔垨闈欐佹柟娉曪紝鏃犺皳澧炲姞緙栬瘧鍣ㄨВ鏋愭垚
鏈錛岀洿鎺ョ敤綾誨悕鏉ヨ塊棶鍗沖彲銆
2.銆愬己鍒躲戞墍鏈夌殑瑕嗗啓鏂規硶錛屽繀欏誨姞@Override娉ㄨВ銆
鍙嶄緥錛歡etObject()涓get0bject()鐨勯棶棰樸備竴涓鏄瀛楁瘝鐨O錛屼竴涓鏄鏁板瓧鐨0錛屽姞@Override
鍙浠ュ噯紜鍒ゆ柇鏄鍚﹁嗙洊鎴愬姛銆傚彟澶栵紝濡傛灉鍦ㄦ娊璞$被涓瀵規柟娉曠懼悕榪涜屼慨鏀癸紝鍏跺疄鐜扮被浼氶┈涓婄紪
璇戞姤閿欍
3.銆愬己鍒躲戠浉鍚屽弬鏁扮被鍨嬶紝鐩稿悓涓氬姟鍚涔夛紝鎵嶅彲浠ヤ嬌鐢Java鐨勫彲鍙樺弬鏁幫紝閬垮厤浣跨敤Object銆
璇存槑錛氬彲鍙樺弬鏁板繀欏繪斁緗鍦ㄥ弬鏁板垪琛ㄧ殑鏈鍚庛傦紙鎻愬″悓瀛︿滑灝介噺涓嶇敤鍙鍙樺弬鏁扮紪紼嬶級
姝d緥錛歱ublicUsergetUsers(Stringtype,Integer...ids)
4.銆愬己鍒躲戝栭儴姝e湪璋冪敤鎴栬呬簩鏂瑰簱渚濊禆鐨勬帴鍙o紝涓嶅厑璁鎬慨鏀規柟娉曠懼悕錛岄伩鍏嶅規帴鍙h皟鐢ㄦ柟浜х敓
褰卞搷銆傛帴鍙h繃鏃跺繀欏誨姞@Deprecated娉ㄨВ錛屽苟娓呮櫚鍦拌存槑閲囩敤鐨勬柊鎺ュ彛鎴栬呮柊鏈嶅姟鏄浠涔堛
5.銆愬己鍒躲戜笉鑳戒嬌鐢ㄨ繃鏃剁殑綾繪垨鏂規硶銆
璇存槑錛歫ava.net.URLDecoder涓鐨勬柟娉decode(StringencodeStr)榪欎釜鏂規硶宸茬粡榪囨椂錛屽簲
璇ヤ嬌鐢ㄥ弻鍙傛暟decode(Stringsource,Stringencode)銆傛帴鍙f彁渚涙柟鏃㈢劧鏄庣『鏄榪囨椂鎺ュ彛錛
閭d箞鏈変箟鍔″悓鏃舵彁渚涙柊鐨勬帴鍙o紱浣滀負璋冪敤鏂規潵璇達紝鏈変箟鍔″幓鑰冭瘉榪囨椂鏂規硶鐨勬柊瀹炵幇鏄浠涔堛
6.銆愬己鍒躲慜bject鐨equals鏂規硶瀹規槗鎶涚┖鎸囬拡寮傚父錛屽簲浣跨敤甯擱噺鎴栫『瀹氭湁鍊肩殑瀵硅薄鏉ヨ皟鐢
equals銆
姝d緥錛"test".equals(object);
鍙嶄緥錛object.equals("test");
璇存槑錛氭帹鑽愪嬌鐢java.util.Objects#equals錛圝DK7寮曞叆鐨勫伐鍏風被錛
7.銆愬己鍒躲戞墍鏈夌殑鐩稿悓綾誨瀷鐨勫寘瑁呯被瀵硅薄涔嬮棿鍊肩殑姣旇緝錛屽叏閮ㄤ嬌鐢equals鏂規硶姣旇緝銆
璇存槑錛氬逛簬Integervar=?鍦-128鑷127涔嬮棿鐨勮祴鍊礆紝Integer瀵硅薄鏄鍦
IntegerCache.cache浜х敓錛浼氬嶇敤宸叉湁瀵硅薄錛榪欎釜鍖洪棿鍐呯殑Integer鍊煎彲浠ョ洿鎺ヤ嬌鐢==榪涜
鍒ゆ柇錛浣嗘槸榪欎釜鍖洪棿涔嬪栫殑鎵鏈夋暟鎹錛閮戒細鍦ㄥ爢涓婁駭鐢燂紝騫朵笉浼氬嶇敤宸叉湁瀵硅薄錛榪欐槸涓涓澶у潙錛
鎺ㄨ崘浣跨敤equals鏂規硶榪涜屽垽鏂銆
8.鍏充簬鍩烘湰鏁版嵁綾誨瀷涓庡寘瑁呮暟鎹綾誨瀷鐨勪嬌鐢ㄦ爣鍑嗗備笅錛
1錛銆愬己鍒躲戞墍鏈夌殑POJO綾誨睘鎬у繀欏諱嬌鐢ㄥ寘瑁呮暟鎹綾誨瀷銆
2錛銆愬己鍒躲慠PC鏂規硶鐨勮繑鍥炲煎拰鍙傛暟蹇呴』浣跨敤鍖呰呮暟鎹綾誨瀷銆
3錛銆愭帹鑽愩戞墍鏈夌殑灞閮ㄥ彉閲忎嬌鐢ㄥ熀鏈鏁版嵁綾誨瀷銆
璇存槑錛歅OJO綾誨睘鎬ф病鏈夊垵鍊兼槸鎻愰啋浣跨敤鑰呭湪闇瑕佷嬌鐢ㄦ椂錛屽繀欏昏嚜宸辨樉寮忓湴榪涜岃祴鍊礆紝浠諱綍
NPE闂棰橈紝鎴栬呭叆搴撴鏌ワ紝閮界敱浣跨敤鑰呮潵淇濊瘉銆
姝d緥錛氭暟鎹搴撶殑鏌ヨ㈢粨鏋滃彲鑳芥槸null錛屽洜涓鴻嚜鍔ㄦ媶綆憋紝鐢ㄥ熀鏈鏁版嵁綾誨瀷鎺ユ敹鏈NPE椋庨櫓銆
鍙嶄緥錛氭瘮濡傛樉紺烘垚浜ゆ婚濇定璺屾儏鍐碉紝鍗蟲h礋x%錛寈涓哄熀鏈鏁版嵁綾誨瀷錛岃皟鐢ㄧ殑RPC鏈嶅姟錛岃皟鐢
涓嶆垚鍔熸椂錛岃繑鍥炵殑鏄榛樿ゅ礆紝欏甸潰鏄劇ず錛0%錛岃繖鏄涓嶅悎鐞嗙殑錛屽簲璇ユ樉紺烘垚涓鍒掔嚎-銆傛墍浠ュ寘瑁
鏁版嵁綾誨瀷鐨null鍊礆紝鑳藉熻〃紺洪濆栫殑淇℃伅錛屽傦細榪滅▼璋冪敤澶辮觸錛屽紓甯擱鍑恆
9.銆愬己鍒躲戝畾涔DO/DTO/VO絳POJO綾繪椂錛屼笉瑕佽懼畾浠諱綍灞炴ч粯璁ゅ箋
鍙嶄緥錛歅OJO綾葷殑gmtCreate榛樿ゅ間負newDate();浣嗘槸榪欎釜灞炴у湪鏁版嵁鎻愬彇鏃跺苟娌℃湁緗鍏ュ叿
浣撳礆紝鍦ㄦ洿鏂板叾瀹冨瓧孌墊椂鍙堥檮甯︽洿鏂頒簡姝ゅ瓧孌碉紝瀵艱嚧鍒涘緩鏃墮棿琚淇鏀規垚褰撳墠鏃墮棿銆
10.銆愬己鍒躲戝簭鍒楀寲綾繪柊澧炲睘鎬ф椂錛岃蜂笉瑕佷慨鏀serialVersionUID瀛楁碉紝閬垮厤鍙嶅簭鍒楀け璐ワ紱濡
鏋滃畬鍏ㄤ笉鍏煎瑰崌綰э紝閬垮厤鍙嶅簭鍒楀寲娣蜂貢錛岄偅涔堣蜂慨鏀serialVersionUID鍊箋
璇存槑錛氭敞鎰serialVersionUID涓嶄竴鑷翠細鎶涘嚭搴忓垪鍖栬繍琛屾椂寮傚父銆
11.銆愬己鍒躲戞瀯閫犳柟娉曢噷闈㈢佹㈠姞鍏ヤ換浣曚笟鍔¢昏緫錛屽傛灉鏈夊垵濮嬪寲閫昏緫錛岃鋒斁鍦init鏂規硶涓銆
12.銆愬己鍒躲慞OJO綾誨繀欏誨啓toString鏂規硶銆備嬌鐢IDE鐨勪腑宸ュ叿錛歴ource>generatetoString
鏃訛紝濡傛灉緇ф壙浜嗗彟涓涓POJO綾伙紝娉ㄦ剰鍦ㄥ墠闈㈠姞涓涓super.toString銆
璇存槑錛氬湪鏂規硶鎵ц屾姏鍑哄紓甯告椂錛屽彲浠ョ洿鎺ヨ皟鐢POJO鐨toString()鏂規硶鎵撳嵃鍏跺睘鎬у礆紝渚誇簬鎺
鏌ラ棶棰樸
13.銆愭帹鑽愩戜嬌鐢ㄧ儲寮曡塊棶鐢String鐨split鏂規硶寰楀埌鐨勬暟緇勬椂錛岄渶鍋氭渶鍚庝竴涓鍒嗛殧絎﹀悗鏈夋棤
鍐呭圭殑媯鏌ワ紝鍚﹀垯浼氭湁鎶IndexOutOfBoundsException鐨勯庨櫓銆
璇存槑錛
Stringstr="a,b,c,,";
String[]ary=str.split(",");
//棰勬湡澶т簬3錛岀粨鏋滄槸3
System.out.println(ary.length);
14.銆愭帹鑽愩戝綋涓涓綾繪湁澶氫釜鏋勯犳柟娉曪紝鎴栬呭氫釜鍚屽悕鏂規硶錛岃繖浜涙柟娉曞簲璇ユ寜欏哄簭鏀劇疆鍦ㄤ竴璧鳳紝
渚誇簬闃呰匯
15.銆愭帹鑽愩綾誨唴鏂規硶瀹氫箟欏哄簭渚濇℃槸錛氬叕鏈夋柟娉曟垨淇濇姢鏂規硶>縐佹湁鏂規硶>getter/setter
鏂規硶銆
璇存槑錛氬叕鏈夋柟娉曟槸綾葷殑璋冪敤鑰呭拰緇存姢鑰呮渶鍏沖績鐨勬柟娉曪紝棣栧睆灞曠ず鏈濂斤紱淇濇姢鏂規硶鉶界劧鍙鏄瀛愮被
鍏沖績錛屼篃鍙鑳芥槸鈥滄ā鏉胯捐℃ā寮忊濅笅鐨勬牳蹇冩柟娉曪紱鑰岀佹湁鏂規硶澶栭儴涓鑸涓嶉渶瑕佺壒鍒鍏沖績錛屾槸涓涓
榛戠洅瀹炵幇錛涘洜涓烘柟娉曚俊鎮浠峰艱緝浣庯紝鎵鏈Service鍜DAO鐨getter/setter鏂規硶鏀懼湪綾諱綋鏈
鍚庛
16.銆愭帹鑽愩憇etter鏂規硶涓錛屽弬鏁板悕縐頒笌綾繪垚鍛樺彉閲忓悕縐頒竴鑷達紝this.鎴愬憳鍚=鍙傛暟鍚嶃傚湪
getter/setter鏂規硶涓錛屽敖閲忎笉瑕佸炲姞涓氬姟閫昏緫錛屽炲姞鎺掓煡闂棰樼殑闅懼害銆
鍙嶄緥錛
publicIntegergetData(){
if(true){
returndata+100;
}else{
returndata-100;
}
}
17.銆愭帹鑽愩戝驚鐜浣撳唴錛屽瓧絎︿覆鐨勮繛鎺ユ柟寮忥紝浣跨敤StringBuilder鐨append鏂規硶榪涜屾墿灞曘
鍙嶄緥錛
Stringstr="start";
for(intI=0;I<100;i++){
str=str+"hello";
}
璇存槑錛氬弽緙栬瘧鍑虹殑瀛楄妭鐮佹枃浠舵樉紺烘瘡嬈″驚鐜閮戒細new鍑轟竴涓StringBuilder瀵硅薄錛岀劧鍚庤繘琛
append鎿嶄綔錛屾渶鍚庨氳繃toString鏂規硶榪斿洖String瀵硅薄錛岄犳垚鍐呭瓨璧勬簮嫻璐廣
18.銆愭帹鑽愩戜笅鍒楁儏鍐碉紝澹版槑鎴final浼氭洿鏈夋彁紺烘э細
1錛涓嶉渶瑕侀噸鏂拌祴鍊肩殑鍙橀噺錛屽寘鎷綾誨睘鎬с佸矓閮ㄥ彉閲忋
2錛瀵硅薄鍙傛暟鍓嶅姞final錛岃〃紺轟笉鍏佽鎬慨鏀瑰紩鐢ㄧ殑鎸囧悜銆
3錛綾繪柟娉曠『瀹氫笉鍏佽歌閲嶅啓銆
19.銆愭帹鑽愩戞厧鐢Object鐨clone鏂規硶鏉ユ嫹璐濆硅薄銆
璇存槑錛氬硅薄鐨clone鏂規硶榛樿ゆ槸嫻呮嫹璐濓紝鑻ユ兂瀹炵幇娣辨嫹璐濋渶瑕侀噸鍐clone鏂規硶瀹炵幇灞炴у硅薄
鐨勬嫹璐濄
20.銆愭帹鑽愩戠被鎴愬憳涓庢柟娉曡塊棶鎺у埗浠庝弗錛
1錛濡傛灉涓嶅厑璁稿栭儴鐩存帴閫氳繃new鏉ュ壋寤哄硅薄錛岄偅涔堟瀯閫犳柟娉曞繀欏繪槸private銆
2錛宸ュ叿綾諱笉鍏佽告湁public鎴default鏋勯犳柟娉曘
3錛綾婚潪static鎴愬憳鍙橀噺騫朵笖涓庡瓙綾誨叡浜錛屽繀欏繪槸protected銆
4錛綾婚潪static鎴愬憳鍙橀噺騫朵笖浠呭湪鏈綾諱嬌鐢錛屽繀欏繪槸private銆
5錛綾static鎴愬憳鍙橀噺濡傛灉浠呭湪鏈綾諱嬌鐢錛屽繀欏繪槸private銆
6錛鑻ユ槸static鎴愬憳鍙橀噺錛屽繀欏昏冭檻鏄鍚︿負final銆
7錛綾繪垚鍛樻柟娉曞彧渚涚被鍐呴儴璋冪敤錛屽繀欏繪槸private銆
8錛綾繪垚鍛樻柟娉曞彧瀵圭戶鎵跨被鍏寮錛岄偅涔堥檺鍒朵負protected銆
璇存槑錛氫換浣曠被銆佹柟娉曘佸弬鏁般佸彉閲忥紝涓ユ帶璁塊棶鑼冨洿銆傝繃瀹芥硾鐨勮塊棶鑼冨洿錛屼笉鍒╀簬妯″潡瑙h︺傛
鑰冿細濡傛灉鏄涓涓private鐨勬柟娉曪紝鎯沖垹闄ゅ氨鍒犻櫎錛屽彲鏄涓涓public鐨Service鏂規硶錛屾垨鑰呬竴
涓public鐨勬垚鍛樺彉閲忥紝鍒犻櫎涓涓嬶紝涓嶅緱鎵嬪績鍐掔偣奼楀悧錛熷彉閲忓儚鑷宸辯殑灝忓╋紝灝介噺鍦ㄨ嚜宸辯殑瑙
綰垮唴錛屽彉閲忎綔鐢ㄥ煙澶澶э紝濡傛灉鏃犻檺鍒剁殑鍒板勮窇錛岄偅涔堜綘浼氭媴蹇冪殑銆
『叄』 澶у﹁繖浜涘啓浠g爜鐨勪範鎯灝變細鍍忓啓璇椾竴鑸
Java浠g爜涔犳儻浠g爜鍍忓啓璇椾竴鏍!
1銆佸簲璇ュ湪姣忎釜紼嬪簭鐨勫紑濮嬮兘鍔犱笂娉ㄩ噴錛岃В閲婅ョ▼搴忕殑鐩鐨勩佷綔鑰呬互鍙婄▼搴忔渶鍚庝竴嬈¤淇鏀圭殑鏃ユ湡鍜屾椂闂淬
2銆佷嬌鐢ㄧ┖琛屽拰絀烘牸鏉ュ炲己紼嬪簭鐨勫彲璇繪э紝渚嬪 for 寰鐜鎷鍙蜂袱杈規渶濂戒篃瑕佹祦鍑虹┖鏍 澧炲己鍙璇繪с
3銆佹寜鐓х害瀹氾紝綾誨悕鏍囪瘑絎︿腑鐨勭涓涓瀛楁瘝澶у啓錛屽悓鏃跺皢鍏跺悗姣忎釜鍗曡瘝鐨勯栧瓧姣嶉兘澶у啓銆俲ava紼嬪簭鍛樿や負榪欐牱鐨勬爣璇嗙﹂氬父琛ㄧずjava涓鐨勭被錛屾墍浠ラ伒瀹堣繖涓綰﹀畾錛屼嬌鍏跺彲璇繪у炲己銆
4銆佺▼搴忎腑鐣屽畾綾諱富浣撶殑鑺辨嫭鍙鋒垨鑰呮柟娉曠殑鑺辨嫭鍙鋒敞鎰忛敭鍏ュ垎鐒跺悗緙╄繘涓綰э紝涓鏂歸潰澧炲姞鍙璇伙紝鍙︿竴鏂歸潰闃叉㈤仐婕忚姳鎷鍙楓
5銆侀夋嫨浣犲枩嬈㈢殑緙╄繘閲忥紝騫朵笖鍥哄畾浣跨敤: 鍙浠ラ噰鐢═AB閿鏉ュ壋寤虹緝榪涳紝鍗曚笉鍚岀紪杈戝櫒鐨勫埗琛ㄤ綅鎵浜х敓鐨勯棿璺濅笉鍚屻傚緩璁姣忎竴綰х緝榪涗嬌鐢3涓絀烘牸銆
6銆佸湪鍙傛暟鍒楄〃涓姣忎竴涓閫楀彿涔嬪悗鍔犱竴涓絀烘牸鍙鎻愰珮紼嬪簭鍙璇繪с
7銆佹瘡涓鍙橀噺閮界敤鍗曠嫭鐨勮屾潵澹版槑錛屼究浜庡湪姣忎釜澹版槑涔嬪悗鍔犱笂鎻忚堪鎬х殑娉ㄩ噴
8銆侀夋嫨鏈夋剰涔夌殑鍙橀噺鍚嶏紝浣跨▼搴忓叿鏈夎嚜璇存槑鎬с備篃灝辨槸璇達紝鍙瑕侀槄璇葷▼搴忔湰鐪佸氨鍙浠ョ悊瑙g▼搴忕殑鍔熻兘錛屼笉闇瑕侀槄璇繪墜鍐屾垨澶ч噺鍏朵粬娉ㄩ噴銆
9銆佹寜鐓ф儻渚嬶紝鍙橀噺鍚嶆爣璇嗙︿互灝忓啓瀛楁瘝寮澶達紝騫朵笖絎涓涓鍗曡瘝涔嬪悗鐨勬瘡涓涓鍗曡瘝閮界敤澶у啓瀛楁瘝寮澶淬備緥濡傚彉閲忓悕鏍囪瘑絎firstNumber涓鐨勭浜屼釜鍗曡瘝Number鐨勯栧瓧姣嶅ぇ鍐欍
10銆佸湪浜屽厓榪愮畻絎︿袱渚ч兘鍔犱笂絀烘牸浼氫嬌鍏舵洿鍔犻啋鐩錛屾彁楂樼▼搴忕殑鍙璇繪
11銆佸湪澶嶆潅鐨勭畻鏁拌〃杈懼紡涓鍔犲叆鎷鍙()鍗充嬌鏄涓嶅繀欏葷殑錛屼害鍙浠ヤ嬌鍏舵洿鏄撹匯
12銆佸傛灉璇鍙ヨ緝闀匡紝鍙浠ュ皢瀹冨啓鎴愬氳屻傚傛灉蹇呴』灝嗚鍙ヨ法琛屽啓錛屽簲閫夋嫨鏈夋剰涔夌殑鏂鐐癸紝濡傚湪閫楀彿鍒嗛殧鍒楄〃涓鐨勬煇涓閫楀彿涔嬪悗錛屾垨鍦ㄩ暱琛ㄨ揪寮忕殑涓涓榪愮畻絎︿箣鍚庛傚傛灉璇鍙ヨ法浜嗕袱琛屾垨鑰呮洿澶氳岋紝搴旇ュ皢鎵鏈夌殑鏂琛岄兘緙╄繘
13銆佸湪涔﹀啓鍖呭惈澶氫釜榪愮畻絎︾殑琛ㄨ揪寮忔椂錛屽簲鍙傝冭繍綆楃︿紭鍏堢駭琛ㄣ傝佷繚璇佽〃杈懼紡鏃舵寜鐓т綘鎵鏈熸湜鐨勯『搴忚繘琛岃$畻鐨勩傚傛灉涓嶇『瀹氬嶆潅琛ㄨ揪寮忎腑鐨勮$畻欏哄簭錛屼嬌鐢ㄦ嫭鍙鋒潵寮哄埗瀹炵幇欏哄簭錛屽氨鎯充唬鏁拌〃杈懼紡涓閭f牱銆傛敞鎰忥紝鏈変簺榪愮畻絎︼紝濡傝祴鍊(搴旇ュ湪姣忎釜鍩熷拰鏂規硶澹版槑鍓嶅姞涓涓璁塊棶淇楗扮︺備綔涓虹害瀹氫織鎴愮殑瑙勫垯錛屽疄渚嬪彉閲忓簲璇ュ0鏄庝負涓撶敤鐨勶紝鏂規硶搴旇ュ0鏄庝負public(鏌愪簺鏂規硶濡傛灉鍙鏄鐢辮ョ被鐨勫叾浠栨柟娉曡塊棶錛屽垯閫傞噾澹版槑涓簆rivate
14銆佺被涓鐨勫悇涓鍩熷簲褰撳厛琚鍒楀嚭錛岃繖鏍蜂究浜庨槄璇
15銆佸湪鏂規硶澹版槑涔嬪墠鍔犱竴涓絀鴻岋紝鍙浠ヤ嬌鍚勪釜鏂規硶鍒嗛殧騫朵笖澧炲己紼嬪簭鐨勫彲璇繪с
16銆乮f...else璇鍙ョ殑涓や釜涓諱綋涓嶅皝閮藉簲璇ユ槸緙╄繘鐨勩
17銆佸傛灉鏈夊嚑綰х緝榪涳紝姣忎竴闆嗛兘搴旇ョ緝榪涘悓鏍鋒暟閲忕殑絀烘牸銆
18銆佹潯浠惰〃杈懼紡姣攊f...else鐨勫彲璇繪у樊錛屽洜姝ゅ簲璇ヤ粎鐢ㄤ簬鏇誇唬涓や釜鍊間箣闂磋繘琛岄夋嫨鐨勭畝鍗昳f...else璇鍙ャ
19銆佷負浜嗘彁楂樺彲璇繪э紝鍦ㄥ0鏄庤鍙ュ拰鏂規硶涓鐨勫叾浠栬鍙ヤ箣闂寸暀涓涓絀鴻屻
20銆佷笌浜屽厓榪愮畻絎︿笉鍚岋紝涓鍏冭繍綆楃(濡++or--)搴旇ヤ笌鎿嶄綔鏁扮浉閭繪斁緗錛屼腑闂翠笉鑳界暀絀烘牸銆
21銆佸湪寰鐜鍜岄夋嫨鎺у埗璇鍙ョ殑涓婁笅鏂歸兘鍔犱笂絀鴻岋紝騫跺皢璇鍙ヤ綋緙╄繘錛屼互澧炲己鍙璇繪с
22銆佸湪while鎴栬協or璇鍙ョ殑鏉′歡涓浣跨敤緇堝礆紝騫剁敤<=鍏崇郴榪愮畻絎︼紝鏈夊姪浜庨伩鍏嶅樊1閿欒銆傚逛簬涓涓鎸囩ず鍊0~10鐨勫驚鐜錛屽驚鐜鏉′歡搴旇ユ槸counter<=10錛岃屼笉鏄痗ounter<=10(鍚庤呬細浜х敓宸1閿欒)銆傛垨鑰呴噰鐢╟ounter<11銆傝稿氱▼搴忓憳鍠滄㈠熀浜庨浂鐨勮$畻鏂瑰紡錛屽傛灉瑕佽℃暟10嬈★紝鍒檆ounter鍒濆嬪寲鎴0錛屽苟涓斿驚鐜緇х畫嫻嬭瘯鏉′歡涓篶ounter<10銆
23銆佸湪澶у氭暟鎯呭喌涓嬶紝鍓嶇紑鐨勫為噺鍜屽悗緙澧為噺鏂瑰紡閮藉彲鐢ㄥ共璇鍙ヤ腑鐨勫彉閲忓姞1.鍦ㄨ繖涓ょ嶆儏鍐典笅鐨勬晥鏋滄槸瀹屽叏涓鏍風殑錛屽彧鏄鍓嶇紑澧為噺鏂瑰紡紼嶅井鏈変簺鎬ц兘浼樺娍銆備竴鑸鎯呭喌涓嬶紝鎴戜滑鍋囧0緙栬瘧鍣ㄨ兘澶熷逛唬鐮佽繘琛屼紭鍖栦互鑾峰緱鏈浣蟲ц兘錛岄偅涔堜箙搴旇ラ夌敤鑷宸辨劅瑙夋渶涔犳儻浣跨敤鐨勬柟寮忋
24銆佸敖鍙鑳藉皢鎺у埗璇鍙ラ栭儴鐨勫ぇ灝忛檺鍒舵垚鍗曠嫭涓琛屻
25銆佸湪for璇鍙ョ殑initiallization鍜宨ncrement閮ㄥ垎錛屽彧鏀懼叆閭d簺涓庢帶鍒跺彉閲忔湁鍏崇殑琛ㄨ揪寮忋傚瑰叾浠栧彉閲忕殑鎿嶄綔搴旇ュ嚭鐜板湪寰鐜涔嬪墠(濡傛灉榪欎簺鍙橀噺鍙鎵ц屼竴嬈★紝涓巌nitialization璇鍙ョ被浼)鎴栬呭驚鐜浣撲腑(濡傛灉紼嬪簭姣忔″驚鐜閬嶅巻閮芥墽琛岃繖浜涙搷浣滐紝涓巌ncrement鎴杁ecrement綾諱技)銆
26銆佷笉瑕佷嬌鐢╠ouble鎴栬協loat綾誨瀷鐨勫彉閲忔潵鎵ц岀簿紜鐨勮揣甯佽$畻銆傛誕鐐規暟鐨勪笉綺劇『鎬т細浜х敓閿欒瀵艱嚧涓嶆g『鐨勮揣甯佸箋
27銆佸嵆浣誇笉鏄蹇呴』鐢錛屽湪do...wvhile璇鍙ヤ腑搴旇ユ繪槸鍖呭惈鑺辨嫭鍙楓傝繖鏍鋒湁鍔╁共娑堥櫎wvhile璇鍙ュ拰鍙鍖呭惈涓鏉¤鍙ョ殑do...while璇鍙ヤ箣闂寸殑浜屼箟鎬
28.鍦ㄤ竴涓猻witch璇鍙ヤ腑錛屽敖綆case鍜宒efault鎯呭喌閮借兘澶熶互浠繪剰嬈″簭鍙戠敓錛屼絾榪樻槸搴旇ュ惂default鎯呭喌鏀懼湪鏈鍚庛傚綋default鏀懼湪鏈鍚庢椂錛岃繖縐嶆儏鍐靛氨涓嶉渶瑕乥reak璇鍙ヤ簡銆備竴浜涚▼搴忓憳浠嶄細鍔犱笂榪欎釜break錛屼互渚誇唬鐮佹洿鏄庢櫚錛屽苟涓庡叾浠栨儏鍐靛圭О銆
29.涓瀹氳佺啛鎮塱avaAPI鎻愪緵鐨勪赴瀵岀殑綾誨拰鏂規硶銆
30.鍦ㄥ父閲忓悕涓鍙浣跨敤澶у啓瀛楁瘝銆傝繖鏍峰彲浠ヤ嬌甯擱噺鍚嶅湪紼嬪簭涓鏄懼緱寰堢獊鍑猴紝騫朵笖鍙浠ユ彁閱掔▼搴忓憳錛岃繖浜涗簨鏋氫婦甯擱噺鑰屼笉鏄鍙橀噺銆
31.浣跨敤鏋氫婦甯擱噺浼氫嬌紼嬪簭鏇存槗闃呰誨拰緇存姢銆
32.涓轟簡鎻愰珮鍙璇繪э紝姣忎釜澹版槑璇鍙ヤ腑鍙澹版槑涓涓鍙橀噺銆
『肆』 java鏋氫婦鏄浠涔堟剰鎬
Java鍒涘緩鏋氫婦鏄涓轟簡鍦ㄤ唬鐮佷腑瀹氫箟涓涓鍙橀噺錛岃繖涓鍙橀噺鍙鑳芥槸鏃㈠畾鏈夐檺鍊奸泦鍚堜腑鐨勬煇涓涓錛岃屼笉鑳戒負鍏朵粬鍊箋傛灇涓劇被鍨嬮氳繃鍏抽敭瀛梕num瀹氫箟銆傛灇涓懼彲浠ヤ繚璇佺被鍨嬪畨鍏錛屼笖鏄撲簬鐞嗚В鍜岀淮鎶ゃ侸ava鏋氫婦閬垮厤浜嗕嬌鐢ㄦ暟瀛楁垨瀛楃︿覆琛ㄧず甯擱噺鍊兼墍甯︽潵鐨勯敊璇鎴栦笉瀹夊叏鎬с
Java鏋氫婦綾誨瀷鏄閫氳繃涓涓綾繪潵瀹炵幇鐨勶紝瀹冨寘鍚浜嗕竴涓鎴栧氫釜甯擱噺錛屾瘡涓甯擱噺閮芥槸涓涓鏋氫婦綾誨瀷鐨勫疄渚嬨傝繖涓綾誨彲浠ュ寘鍚鏂規硶銆佹瀯閫犲櫒鍜屽叾浠栧瓧孌點傜浉姣斾簬鏅閫氱殑Java綾伙紝鏋氫婦綾繪洿瀹規槗浣跨敤鍜屼唬鐮佸彲璇繪ф洿楂橈紝鐢氳嚦鍙浠ュ皢鏋氫婦綾誨瀷鎵╁睍鍒版帴鍙f垨鎶借薄綾諱腑銆
Java鏋氫婦綾葷殑甯擱噺鍊兼槸閫氳繃鏋氫婦綾葷殑鍚嶇О鍜屽父閲忓悕縐版潵琛ㄧず鐨勩侸ava緙栬瘧鍣ㄤ細鍦ㄧ紪璇戞椂鑷鍔ㄤ負鏋氫婦綾葷敓鎴愪竴涓猣inal鐨勭被錛屽叾涓鍖呭惈鏋氫婦甯擱噺錛岃繖鏍峰彲浠ヤ繚璇佹灇涓劇被鍨嬬殑瀹夊叏鎬у拰涓嶅彉鎬с傛灇涓劇被甯擱噺鍙浠ョ敤鍦╯witch璇鍙ヤ腑錛屾垨浣跨敤瀹冧滑鏉ヨ〃紺虹▼搴忎腑鐗瑰畾鐨勭姸鎬佹垨琛屼負銆傛灇涓懼湪Java搴旂敤紼嬪簭涓闈炲父甯哥敤錛岀壒鍒鏄鍦ㄥ畾涔堿PI鏃訛紝浠ュ畾涔変竴緇勭畝鍗曠殑鏁版嵁綾誨瀷銆
『伍』 enum在java中是什麼意思
Enum 類型的介紹
枚舉類型(Enumerated Type) 很早就出現在編程語言中,它被用來將一組類似的值包含到一種類型當中。而這種枚舉類型的名稱則會被定義成獨一無二的類型描述符,在這一點上和常量的定義相似。不過相比較常量類型,枚舉類型可以為申明的變數提供更大的取值范圍。
舉個例子來說明一下,如果希望為彩虹描繪出七種顏色,你可以在 Java 程序中通過常量定義方式來實現。
清單 1. 常量定義
PublicstaticclassRainbowColor{
//紅橙黃綠青藍紫七種顏色的常量定義
publicstaticfinalintRED=0;
publicstaticfinalintORANGE=1;
publicstaticfinalintYELLOW=2;
publicstaticfinalintGREEN=3;
publicstaticfinalintCYAN=4;
publicstaticfinalintBLUE=5;
publicstaticfinalintPURPLE=6;
}
使用的時候,你可以在程序中直接引用這些常量。但是,這種方式還是存在著一些問題。
類型不安全
由於顏色常量的對應值是整數形,所以程序執行過程中很有可能給顏色變數傳入一個任意的整數值,導致出現錯誤。
沒有命名空間
由於顏色常量只是類的屬性,當你使用的時候不得不通過類來訪問。
一致性差
因為整形枚舉屬於編譯期常量,所以編譯過程完成後,所有客戶端和伺服器端引用的地方,會直接將整數值寫入。這樣,當你修改舊的枚舉整數值後或者增加新的枚舉值後,所有引用地方代碼都需要重新編譯,否則運行時刻就會出現錯誤。
類型無指意性
由於顏色枚舉值僅僅是一些無任何含義的整數值,如果在運行期調試時候,你就會發現日誌中有很多魔術數字,但除了程序員本身,其他人很難明白其奧秘。
如何定義 Enum 類型
為了改進 Java 語言在這方面的不足彌補缺陷,5.0 版本 SDK 發布時候,在語言層面上增加了枚舉類型。枚舉類型的定義也非常的簡單,用 enum 關鍵字加上名稱和大括弧包含起來的枚舉值體即可,例如上面提到的彩虹顏色就可以用新的 enum 方式來重新定義:
enumRainbowColor{RED,ORANGE,YELLOW,GREEN,CYAN,BLUE,PURPLE}
從上面的定義形式來看,似乎 Java 中的枚舉類型很簡單,但實際上 Java 語言規范賦予枚舉類型的功能非常的強大,它不僅是簡單地將整形數值轉換成對象,而是將枚舉類型定義轉變成一個完整功能的類定義。這種類型定義的擴展允許開發者給枚舉類型增加任何方法和屬性,也可以實現任意的介面。另外,Java 平台也為 Enum 類型提供了高質量的實現,比如默認實現 Comparable 和 Serializable 介面,讓開發者一般情況下不用關心這些細節。
回到本文的主題上來,引入枚舉類型到底能夠給我們開發帶來什麼樣好處呢?一個最直接的益處就是擴大 switch 語句使用范圍。5.0 之前,Java 中 switch 的值只能夠是簡單類型,比如 int、byte、short、char, 有了枚舉類型之後,就可以使用對象了。這樣一來,程序的控制選擇就變得更加的方便,看下面的例子:
清單 2. 定義 Enum 類型
//定義一周七天的枚舉類型
publicenumWeekDayEnum{Mon,Tue,Wed,Thu,Fri,Sat,Sun}
//讀取當天的信息
WeekDayEnumtoday=readToday();
//根據日期來選擇進行活動
switch(today){
Mon:dosomething;break;
Tue:dosomething;break;
Wed:dosomething;break;
Thu:dosomething;break;
Fri:dosomething;break;
Sat:playsportsgame;break;
Sun:havearest;break;
}
對於這些枚舉的日期,JVM 都會在運行期構造成出一個簡單的對象實例一一對應。這些對象都有唯一的 identity,類似整形數值一樣,switch 語句就根據此來進行執行跳轉。
如何定製 Enum 類型
除了以上這種最常見的枚舉定義形式外,如果需要給枚舉類型增加一些復雜功能,也可以通過類似 class 的定義來給枚舉進行定製。比如要給 enum 類型增加屬性,可以像下面這樣定義:
清單 3. 定製枚舉類型
//定義RSS(ReallySimpleSyndication)種子的枚舉類型
publicenumNewsRSSFeedEnum{
//雅虎頭條新聞RSS種子
YAHOO_TOP_STORIES("http://rss.news.yahoo.com/rss/topstories"),
//CBS頭條新聞RSS種子
CBS_TOP_STORIES("http://feeds.cbsnews.com/CBSNewsMain?format=xml"),
//洛杉磯時報頭條新聞RSS種子
LATIMES_TOP_STORIES("http://feeds.latimes.com/latimes/news?format=xml");
//枚舉對象的RSS地址的屬性
privateStringrss_url;
//枚舉對象構造函數
privateNewsRSSFeedEnum(Stringrss){
this.rss_url=rss;
}
//枚舉對象獲取RSS地址的方法
publicStringgetRssURL(){
returnthis.rss_url;
}
}
上面頭條新聞的枚舉類型增加了一個 RSS 地址的屬性 , 記錄頭條新聞的訪問地址。同時,需要外部傳入 RSS 訪問地址的值,因而需要定義一個構造函數來初始化此屬性。另外,還需要向外提供方法來讀取 RSS 地址。
如何避免錯誤使用 Enum
不過在使用 Enum 時候有幾個地方需要注意:
enum 類型不支持 public 和 protected 修飾符的構造方法,因此構造函數一定要是 private 或 friendly 的。也正因為如此,所以枚舉對象是無法在程序中通過直接調用其構造方法來初始化的。
定義 enum 類型時候,如果是簡單類型,那麼最後一個枚舉值後不用跟任何一個符號;但如果有定製方法,那麼最後一個枚舉值與後面代碼要用分號';'隔開,不能用逗號或空格。
由於 enum 類型的值實際上是通過運行期構造出對象來表示的,所以在 cluster 環境下,每個虛擬機都會構造出一個同義的枚舉對象。因而在做比較操作時候就需要注意,如果直接通過使用等號 ( 『 == 』 ) 操作符,這些看似一樣的枚舉值一定不相等,因為這不是同一個對象實例。
看下面的這個例子:
清單 4. 避免錯誤使用 Enum 示例
//定義一個一周七天的枚舉類型
packageexample.enumeration.codes;
publicenumWeekDayEnum{
Mon(1),Tue(2),Wed(3),Thu(4),Fri(5),Sat(6),Sun(7);
privateintindex;
WeekDayEnum(intidx){
this.index=idx;
}
publicintgetIndex(){
returnindex;
}
}
//客戶端程序,將一個枚舉值通過網路傳遞給伺服器端
packageexample.enumeration.codes;
importjava.io.IOException;
importjava.io.ObjectOutputStream;
importjava.io.OutputStream;
importjava.net.InetSocketAddress;
importjava.net.Socket;
importjava.net.UnknownHostException;
publicclassEnumerationClient{
publicstaticvoidmain(String...args)throwsUnknownHostException,IOException{
Socketsocket=newSocket();
//建立到伺服器端的連接
socket.connect(newInetSocketAddress("127.0.0.1",8999));
//從連接中得到輸出流
OutputStreamos=socket.getOutputStream();
ObjectOutputStreamoos=newObjectOutputStream(os);
//將星期五這個枚舉值傳遞給伺服器端
oos.writeObject(WeekDayEnum.Fri);
oos.close();
os.close();
socket.close();
}
}
//伺服器端程序,將從客戶端收到的枚舉值應用到邏輯處理中
packageexample.enumeration.codes;
importjava.io.*;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclassEnumerationServer{
publicstaticvoidmain(String...args)throwsIOException,ClassNotFoundException{
ServerSocketserver=newServerSocket(8999);
//建立伺服器端的網路連接偵聽
Socketsocket=server.accept();
//從連接中獲取輸入流
InputStreamis=socket.getInputStream();
ObjectInputStreamois=newObjectInputStream(is);
//讀出客戶端傳遞來的枚舉值
WeekDayEnumday=(WeekDayEnum)ois.readObject();
//用值比較方式來對比枚舉對象
if(day==WeekDayEnum.Fri){
System.out.println("'s");
}elseif(day.equals(WeekDayEnum.Fri)){
System.out.println("'s");
}else{
System.out.println("'s");
}
//用switch方式來比較枚舉對象
switch(day){
caseMon:
System.out.println("DoMondaywork");
break;
caseTue:
System.out.println("DoTuesdaywork");
break;
caseWed:
System.out.println("DoWednesdaywork");
break;
caseThu:
System.out.println("DoThursdaywork");
break;
caseFri:
System.out.println("DoFridaywork");
break;
caseSat:
System.out.println("DoSaturdaywork");
break;
caseSun:
System.out.println("DoSundaywork");
break;
default:
System.out.println("Idon'tknowwhichisday");
break;
}
ois.close();
is.close();
socket.close();
}
}
列印結果如下:
client Friday enum value is same as server's
Do Friday work
通過程序執行結果,我們能夠發現在分布式條件下客戶端和服務端的虛擬機上都生成了一個枚舉對象,即使看起來一樣的 Fri 枚舉值,如果使用等號『 == 』進行比較的話會出現不等的情況。而 switch 語句則是通過 equal 方法來比較枚舉對象的值,因此當你的枚舉對象較復雜時候,你就需要小心 override 與比較相關的方法,防止出現值比較方面的錯誤。
Enum 相關工具類
JDK5.0 中在增加 Enum 類的同時,也增加了兩個工具類 EnumSet 和 EnumMap,這兩個類都放在 java.util 包中。EnumSet 是一個針對枚舉類型的高性能的 Set 介面實現。EnumSet 中裝入的所有枚舉對象都必須是同一種類型,在其內部,是通過 bit-vector 來實現,也就是通過一個 long 型數。EnumSet 支持在枚舉類型的所有值的某個范圍中進行迭代。回到上面日期枚舉的例子上:
enumWeekDayEnum{Mon,Tue,Wed,Thu,Fri,Sat,Sun}
你能夠在每周七天日期中進行迭代,EnumSet 類提供一個靜態方法 range 讓迭代很容易完成:
for(WeekDayEnumday:EnumSet.range(WeekDayEnum.Mon,WeekDayEnum.Fri)){
System.out.println(day);
}
列印結果如下:
Mon
Tue
Wed
Thu
Fri
EnumSet 還提供了很多個類型安全的獲取子集的 of 方法,使你很容易取得子集:
EnumSet<WeekDayEnum>subset=EnumSet.of(WeekDayEnum.Mon,WeekDayEnum.Wed);
for(WeekDayEnumday:subset){
System.out.println(day);
}
列印結果如下:
Mon
Wed
與 EnumSet 類似,EnumMap 也是一個高性能的 Map 介面實現,用來管理使用枚舉類型作為 keys 的映射表,內部是通過數組方式來實現。EnumMap 將豐富的和安全的 Map 介面與數組快速訪問結合到一起,如果你希望要將一個枚舉類型映射到一個值,你應該使用 EnumMap。看下面的例子:
清單 5. EnumMap 示例
//定義一個EnumMap對象,映射表主鍵是日期枚舉類型,值是顏色枚舉類型
privatestaticMap<WeekDayEnum,RainbowColor>schema=
newEnumMap<WeekDayEnum,RainbowColor>(WeekDayEnum.class);
static{
//將一周的每一天與彩虹的某一種色彩映射起來
for(inti=0;i<WeekDayEnum.values().length;i++){
schema.put(WeekDayEnum.values()[i],RainbowColor.values()[i]);
}
}
System.out.println("Whatistheluckycolortoday?");
System.out.println("It's"+schema.get(WeekDayEnum.Sat));
當你詢問周六的幸運色彩時候,會得到藍色:
清單 6. 運行結果
What is the lucky color today?
It's BLUE
結束語
Enum 類型提出給 JAVA 編程帶了了極大的便利,讓程序的控制更加的容易,也不容易出現錯誤。所以在遇到需要控製程序流程時候,可以多想想是否可以利用 enum 來實現。
『陸』 java枚舉類型enum用法
用法如下:
用法一:常量 在JDK1.5之前,我們定義常量都是:public static fianl....。現在好了,有了枚舉,可以把相關的常量分組到一個枚舉類型里,而且枚舉提供了比常量更多的方法
用法六:使用介面組織枚舉
用法七:關於枚舉集合的使用
『柒』 java 鏋氫婦鎴愬憳鍙浠ユ槸鏁板瓧鍚楋紵
鏋氫婦鎴愬憳涔熸槸鍙橀噺錛屽彉閲忓悕褰撶劧涓嶈兘浠ユ暟瀛楀紑澶寸殑銆傛垨璁鎬綘鍙浠ヨ繖鏍鳳細
publicenumNum{
NUM1(1),NUM2(2),NUM3(3);
privateintvalue;
privateNum(intnum){
this.value=num;
}
publicinttoValue(){
returnvalue;
}
}
System.out.println(Num.NUM2.toValue());
『捌』 java中枚舉常量的命名規范是怎樣的
假如有一筆業務需要審核,審核狀態分:未審核,審核中,審核通過,審核不通過。我們在程序里是否可以直接這么寫:
if(state==1){//1代表未操作
//操作
}else{
//......
}
將狀態標識直接寫在代碼裡面(硬編碼),只圖一時方便,卻是後患無窮,如果有一天你需要修改狀態標識,用0代表未審核而不是1,你不得不將所有與該標識相關的代碼都找出來一個個改,另外,在編碼過程中,標識輸入錯誤的概率是比較高的,一不小心把0輸入成了10,雖然不會提示任何編譯錯誤,但運行結果將是出乎人的意料的。