Java´úÂëȱÏÝ×Ô¶¯·ÖÎö¹¤¾ß½éÉÜ
ÉÏһƪ / ÏÂһƪ 2007-06-07 14:30:40 / ¸öÈË·ÖÀࣺÆäËû
Java´úÂëȱÏÝ×Ô¶¯·ÖÎö¹¤¾ß½éÉÜ
4c~dm!u}6O/sR0l)fHqT0GP0 »ÆÎý²¨51TestingÈí¼þ²âÊÔÍø{5Nlj)A \u
51TestingÈí¼þ²âÊÔÍø1Wm:j6VVF^7MJava´úÂëȱÏÝ×Ô¶¯·ÖÎö¹¤¾ßÖ÷ÒªÓУºFindbugs¡¢PMDºÍCheckStyle¹¤¾ß¡£ÕâÀïÖصã½éÉÜFindbugsµÄʹÓ㬼òÒªÌá¼°PMDºÍCheckStyle¹¤¾ßµÄʹÓá£51TestingÈí¼þ²âÊÔÍø?Bat(L&@/]
1 FindBugsÊÇʲô£¿
51TestingÈí¼þ²âÊÔÍøf&O \ R1vOsFindBugs ÊÇÒ»¸öjava bytecode¾²Ì¬·ÖÎö¹¤¾ß£¬Ëü¿ÉÒÔ°ïÖújava¹¤³ÌʦÌá¸ß´úÂëÖÊÁ¿ÒÔ¼°ÅųýÒþº¬µÄȱÏÝ¡£
{+`.q A2U7\$Z2oW?0J E0 51TestingÈí¼þ²âÊÔÍø~6R)p#v*gwQFindBugs¼ì²éÀà»òÕß JAR Îļþ£¬½«×Ö½ÚÂëÓëÒ»×éȱÏÝģʽ½øÐжԱÈÒÔ·¢ÏÖ¿ÉÄܵÄÎÊÌâ¡£51TestingÈí¼þ²âÊÔÍøR$U!`i A6t4A"Z x
L*tCs'Rs'E$~}0ÓÐÁ˾²Ì¬·ÖÎö¹¤¾ß£¬¾Í¿ÉÒÔÔÚ²»Êµ¼ÊÔËÐгÌÐòµÄÇé¿ö¶ÔÈí¼þ½øÐзÖÎö¡£FindBugs²»ÊÇͨ¹ý·ÖÎöÀàÎļþµÄÐÎʽ»ò½á¹¹À´È·¶¨³ÌÐòµÄÒâͼ£¬¶øÊÇͨ³£Ê¹Óà Visitor ģʽ½øÐзÖÎö£¨Visitor ģʽµÄ¸ü¶àÐÅÏ¢£©¡£51TestingÈí¼þ²âÊÔÍø:mG ley:pK @
51TestingÈí¼þ²âÊÔÍø x$a3[BF3Qq&@H ndUpdb!PR1[0
2 FindBugs¿ÉÒÔ×öʲô£¿
51TestingÈí¼þ²âÊÔÍø~bO3l1VBS BSFindBugsÌṩÁË35¸ö¼ì²âÆ÷À´¼ì²â×Ö½ÚÂëÖпÉÄܵÄȱÏÝ¡£¿ÉÒÔ×öµÄÊÂÇéÖ÷ÒªÓУº
}e0L#v!Z02.1 ÕÒ³ö hash equals ²»Æ¥Åä
h,Vldf*`*cA T0ÕÒÓë equals()
ºÍ hashCode()
µÄʵÏÖÏà¹ØµÄ¼¸¸öÎÊÌâ¡£ÕâÁ½¸ö·½·¨·Ç³£ÖØÒª£¬ÒòΪ¼¸ºõËùÓлùÓÚ¼¯ºÏµÄÀà---List¡¢Map¡¢Set µÈ¶¼µ÷ÓÃËüÃÇ¡£Ò»°ãÀ´Ëµ£¬Õâ¸ö¼ì²âÆ÷Ñ°ÕÒÁ½ÖÖ²»Í¬ÀàÐ͵ÄÎÊÌâ:
¢Ùµ±Ò»¸öÀàÖØд¶ÔÏóµÄ equals()
·½·¨£¬µ«ÊÇûÓÐÖØдËüµÄ hashCode
·½·¨£¬»òÕßÏà·´µÄÇé¿öʱ¡£ 51TestingÈí¼þ²âÊÔÍø4nmaHz$l
:[7Xr9z
]V0¢Ú¶¨ÒåÒ»¸ö co-variant °æ±¾µÄ equals()
»ò compareTo()
·½·¨¡£ÀýÈ磬 Bob
ÀඨÒåÆä equals()
·½·¨Îª²¼¶û equals(Bob)
£¬Ëü¸²¸ÇÁ˶ÔÏóÖж¨ÒåµÄ equals()
·½·¨¡£ÒòΪ Java ´úÂëÔÚ±àÒëʱ½âÎöÖØÔØ·½·¨µÄ·½Ê½£¬ÔÚÔËÐÐʱʹÓõļ¸ºõ×ÜÊÇÔÚ¶ÔÏóÖж¨ÒåµÄÕâ¸ö°æ±¾µÄ·½·¨£¬¶ø²»ÊÇÔÚ Bob
Öж¨ÒåµÄÄÇÒ»¸ö£¨³ý·ÇÏÔʽ½« equals()
·½·¨µÄ²ÎÊýÇ¿ÖÆת»»Îª Bob
ÀàÐÍ£©¡£Òò´Ë£¬µ±Õâ¸öÀàµÄÒ»¸öʵÀý·ÅÈëµ½À༯ºÏÖеÄÈκÎÒ»¸öÖÐʱ£¬Ê¹ÓõÄÊÇ Object.equals()
°æ±¾µÄ·½·¨£¬¶ø²»ÊÇÔÚ Bob
Öж¨ÒåµÄ°æ±¾¡£ÔÚÕâÖÖÇé¿öÏ£¬ Bob
ÀàÓ¦µ±¶¨ÒåÒ»¸ö½ÓÊÜÀàÐÍΪ Object
µÄ²ÎÊýµÄ equals()
·½·¨¡£
7~(iHf`Z)jv0
v5k5x^4z/a;G2K02.2 ¼ì²â£ººöÂÔ·½·¨·µ»ØÖµ
51TestingÈí¼þ²âÊÔÍø_,|4W7["ALP Li;kÕâ¸ö¼ì²âÆ÷²éÕÒ´úÂëÖкöÂÔÁ˲»Ó¦¸ÃºöÂԵķ½·¨·µ»ØÖµµÄµØ·½¡£ÕâÖÖÇé¿öµÄÒ»¸ö³£¼ûÀý×ÓÊÇÔÚµ÷Óà String
·½·¨Ê±£¬ÀýÈç:
-u,SoO/G[5l01 String aString = "bob";
7eEW@y([E;}02 b.replace('b', 'p');
51TestingÈí¼þ²âÊÔÍø|t8{b2BO'K
3 if(b.equals("pop"))
Õâ¸ö´íÎóºÜ³£¼û¡£ÔÚµÚ 2 ÐУ¬³ÌÐòÔ±ÈÏΪËûÒѾÓà p Ìæ»»ÁË×Ö·û´®ÖеÄËùÓÐ b¡£È·ÊµÊÇÕâÑù£¬µ«ÊÇËûÍü¼ÇÁË×Ö·û´®ÊDz»¿É±äµÄ¡£ËùÓÐÕâÀà·½·¨¶¼·µ»ØÒ»¸öÐÂ×Ö·û´®£¬¶ø´ÓÀ´²»»á¸Ä±äÏûÏ¢µÄ½ÓÊÕÕß¡£
'E&jXobx/_;x#NK0-? M K{\X&m"F7n0 51TestingÈí¼þ²âÊÔÍøy3kvkh k
2.3 ¼ì²â£ºNull Ö¸Õë¶Ô null µÄ½âÒýÓã¨dereference£©ºÍÈßÓà±È½Ï
Pc3`uN$D0Õâ¸ö¼ì²âÆ÷²éÕÒÁ½ÀàÎÊÌâ¡£Ëü²éÕÒ´úÂë·¾¶½«»á»òÕß¿ÉÄÜÔì³É null Ö¸ÕëÒì³£µÄÇé¿ö£¬Ëü»¹²éÕÒ¶Ô null µÄÈßÓà±È½ÏµÄÇé¿ö¡£ÀýÈ磬Èç¹ûÁ½¸ö±È½ÏÖµ¶¼Îª null£¬ÄÇôËüÃǾÍÊÇÈßÓàµÄ²¢¿ÉÄܱíÃ÷´úÂë´íÎó¡£FindBugs ÔÚ¿ÉÒÔÈ·¶¨Ò»¸öֵΪ null ¶øÁíÒ»¸öÖµ²»Îª null ʱ£¬¼ì²âÀàËƵĴíÎó£¬ÀýÈ磺 51TestingÈí¼þ²âÊÔÍø [Wmw7gsjICv!Ov
4o
b:v
hg4xO01 Person person = aMap.get("bob");
i)c@8R ~ V02 if (person != null) {
51TestingÈí¼þ²âÊÔÍø9I`,ie0ik,\ v-E+?
3 person.updateAccessTime();
q(UeWF;G04 }
51TestingÈí¼þ²âÊÔÍø-^OJ8Ku9Q
5 String name = person.getName();
ÔÚÕâ¸öÀý×ÓÖУ¬Èç¹ûµÚ 1 ÐÐµÄ Map
²»°üÀ¨Ò»¸öÃûΪ“bob”µÄÈË£¬ÄÇôÔÚµÚ 5 ÐÐѯÎÊ person
µÄÃû×Öʱ¾Í»á³öÏÖ null Ö¸ÕëÒì³£¡£ÒòΪ FindBugs ²»ÖªµÀ map ÊÇ·ñ°üº¬“bob”£¬ËùÒÔËü½«µÚ 5 Ðбê¼ÇΪ¿ÉÄÜ null Ö¸ÕëÒì³£¡£ 51TestingÈí¼þ²âÊÔÍøAm!N"D5H9]
r
51TestingÈí¼þ²âÊÔÍøc:mb;Y5A1O,k.w
2.4 ¼ì²â£º³õʼ»¯Ö®Ç°¶ÁÈ¡×Ö¶Î
51TestingÈí¼þ²âÊÔÍøY6C)Y9H3hEÕâ¸ö¼ì²âÆ÷Ñ°ÕÒÔÚ¹¹Ô캯ÊýÖгõʼ»¯Ö®Ç°±»¶ÁÈ¡µÄ×ֶΡ£Õâ¸ö´íÎóͨ³£ÊÇÓÉʹÓÃ×Ö¶ÎÃû¶ø²»Êǹ¹Ô캯Êý²ÎÊýÒýÆðµÄ£¬ÀýÈçÔÚ¹¹Ô캯ÊýÖжÁȡδ³õʼ»¯µÄ×Ö¶Î:51TestingÈí¼þ²âÊÔÍø;hj$d9xf:c7v0S
51TestingÈí¼þ²âÊÔÍøD.aM ~|[ ]1 public class Thing {
51TestingÈí¼þ²âÊÔÍø\/Me+J y Hj
%?|/Qpd02 private List actions;
51TestingÈí¼þ²âÊÔÍø#k!Ej0r#vl$b
GK#v:A-Q/wc03 public Thing(String startingActions) {