hey guys ,Õâ²»ÊÇÒ²µ½ÁËÃæÊÔ¼¾ÁËô,cxuan ÓÖ´òËãÖØÐÂдһÏ Java Ïà¹ØµÄÃæÊÔÌâ,ÏÈ´Ó»ù´¡µÄ¿ªÊ¼°É,ÕâЩÃæÊÔÌâÊôÓÚ»ù´¡ÏµÁÐ,²»°üº¬¶àÏß³ÌÏà¹ØÃæÊÔÌâºÍ JVM Ïà¹ØÃæÊÔÌâ,¶àÏß³ÌºÍ JVM µÄÎÒ·ÅÔÚºóÃæÁË,ÏÂÃæ²»¶à˵,¸ãÆð!
²¢·¢ÐÔµÄ
: Äã¿ÉÒÔÔÚÆäÖÐÖ´ÐÐÐí¶àÓï¾ä,¶ø²»±ØÒ»´ÎÖ´ÐÐËüÃæÏò¶ÔÏóµÄ
:»ùÓÚÀàºÍÃæÏò¶ÔÏóµÄ±à³ÌÓïÑÔ¡£¶ÀÁ¢ÐÔµÄ
: Ö§³ÖÒ»´Î±àд,µ½´¦ÔËÐеĶÀÁ¢±à³ÌÓïÑÔ,¼´±àÒëºóµÄ´úÂë¿ÉÒÔÔÚÖ§³Ö Java µÄËùÓÐƽ̨ÉÏÔËÐС£Java µÄÌØÐÔÓÐÈçÏÂÕ⼸µã
¼òµ¥
,Java »áÈÃÄãµÄ¹¤×÷±äµÃ¸ü¼ÓÇáËÉ,ʹÄã°Ñ¹Ø×¢µã·ÅÔÚÖ÷ÒªÒµÎñÂß¼ÉÏ,¶ø²»±Ø¹ØÐÄÖ¸Õë¡¢ÔËËã·ûÖØÔØ¡¢ÄÚ´æ»ØÊÕµÈÓëÖ÷ÒªÒµÎñÎ޹صŦÄÜ¡£±ãЯÐÔ
,Java ÊÇƽ̨ÎÞ¹ØÐÔµÄ,ÕâÒâζ×ÅÔÚÒ»¸öƽ̨ÉϱàдµÄÈκÎÓ¦ÓóÌÐò¶¼¿ÉÒÔÇáËÉÒÆÖ²µ½ÁíÒ»¸öƽ̨ÉÏ¡£°²È«ÐÔ
, ±àÒëºó»á½«ËùÓеĴúÂëת»»Îª×Ö½ÚÂë,ÈËÀàÎÞ·¨¶ÁÈ¡¡£Ëüʹ¿ª·¢ÎÞ²¡¶¾,Î޴۸ĵÄϵͳ/Ó¦ÓóÉΪ¿ÉÄÜ¡£¶¯Ì¬ÐÔ
,Ëü¾ßÓÐÊÊÓ¦²»¶Ï±ä»¯µÄ»·¾³µÄÄÜÁ¦,ËüÄܹ»Ö§³Ö¶¯Ì¬ÄÚ´æ·ÖÅä,´Ó¶ø¼õÉÙÁËÄÚ´æÀË·Ñ,Ìá¸ßÁËÓ¦ÓóÌÐòµÄÐÔÄÜ¡£·Ö²¼Ê½
,Java ÌṩµÄ¹¦ÄÜÓÐÖúÓÚ´´½¨·Ö²¼Ê½Ó¦Óá£Ê¹ÓÃÔ¶³Ì·½·¨µ÷ÓÃ(RMI)
,³ÌÐò¿ÉÒÔͨ¹ýÍøÂçµ÷ÓÃÁíÒ»¸ö³ÌÐòµÄ·½·¨²¢»ñÈ¡Êä³ö¡£Äú¿ÉÒÔͨ¹ý´Ó»¥ÁªÍøÉϵÄÈκμÆËã»úÉϵ÷Ó÷½·¨À´·ÃÎÊÎļþ¡£ÕâÊǸïÃüÐÔµÄÒ»¸öÌصã,¶ÔÓÚµ±½ñµÄ»¥ÁªÍøÀ´ËµÌ«ÖØÒªÁË¡£½¡×³ÐÔ
,Java ÓÐÇ¿´óµÄÄÚ´æ¹ÜÀí¹¦ÄÜ,ÔÚ±àÒëºÍÔËÐÐʱ¼ì²é´úÂë,ËüÓÐÖúÓÚÏû³ý´íÎ󡣸ßÐÔÄÜ
,Java ×îºÚµÄ¿Æ¼¼¾ÍÊÇ×Ö½ÚÂë±à³Ì,Java ´úÂë±àÒë³ÉµÄ×Ö½ÚÂë¿ÉÒÔÇáËÉת»»Îª±¾µØ»úÆ÷´úÂ롣ͨ¹ý JIT ¼´Ê±±àÒëÆ÷À´ÊµÏÖ¸ßÐÔÄÜ¡£½âÊÍÐÔ
,Java ±»±àÒë³É×Ö½ÚÂë,ÓÉ Java ÔËÐÐʱ»·¾³½âÊÍ¡£¶àÏß³ÌÐÔ
,JavaÖ§³Ö¶à¸öÖ´ÐÐÏß³Ì(Ò²³ÆΪÇáÁ¿¼¶½ø³Ì),°üÀ¨Ò»×éͬ²½ÔÓï¡£ÕâʹµÃʹÓÃÏ̱߳à³Ì¸ü¼ÓÈÝÒ×,Java ͨ¹ý¹Ü³ÌÄ£ÐÍÀ´ÊµÏÖḬ̈߳²È«ÐÔ¡£ÃæÏò¶ÔÏóµÄÌØÕ÷Ö÷ÒªÓÐÈýµã
·â×°:·â×°ÊÇÃæÏò¶ÔÏóµÄÌØÕ÷Ö®Ò»,ÊǶÔÏóºÍÀà¸ÅÄîµÄÖ÷ÒªÌØÐÔ¡£·â×°,Ò²¾ÍÊǰѿ͹ÛÊÂÎï·â×°³É³éÏóµÄÀà,²¢ÇÒÀà¿ÉÒÔ°Ñ×Ô¼ºµÄÊý¾ÝºÍ·½·¨Ö»ÈÿÉÐŵÄÀà»òÕ߶ÔÏó²Ù×÷,¶Ô²»¿ÉÐŵĽøÐÐÐÅÏ¢Òþ²Ø¡£
¼Ì³Ð:¼Ì³ÐÖ¸µÄÊÇʹÓÃÏÖÓÐÀàµÄËùÓй¦ÄÜ,²¢ÔÚÎÞÐèÖØбàдÔÀ´µÄÀàµÄÇé¿ö϶ÔÕâЩ¹¦ÄܽøÐÐÀ©Õ¹¡£
¶à̬:¶à̬ÊÇÔÊÐíÄ㽫¸¸¶ÔÏóÉèÖóÉΪºÍÒ»¸ö»ò¸ü¶àµÄËûµÄ×Ó¶ÔÏóÏàµÈµÄ¼¼Êõ,¸³ÖµÖ®ºó,¸¸¶ÔÏó¾Í¿ÉÒÔ¸ù¾Ýµ±Ç°¸³Öµ¸øËüµÄ×Ó¶ÔÏóµÄÌØÐÔÒÔ²»Í¬µÄ·½Ê½ÔË×÷¡£¼òµ¥µÄ˵,¾ÍÊÇÒ»¾ä»°:ÔÊÐí½«×ÓÀàÀàÐ͵ÄÖ¸Õ븳ֵ¸ø¸¸ÀàÀàÐ͵ÄÖ¸Õë¡£
ÕâÀﻹÐèÒª½âÊÍһϠJVM ÊÇʲô
´óÖÂÀ´Ëµ,JRE¡¢JDK ºÍ JVM µÄ¹ØϵÈçÏÂ
ÒªÏëÕæÕýÀí½âµÄ»°,¿ÉÒԲο¼ÕâƪÎÄÕ : https://www.zhihu.com/question/31203609
¼òµ¥Àí½âµÄ»°¾ÍÊÇ
Öµ´«µÝ
ÊÇÖ¸ÔÚµ÷Óú¯Êýʱ½«Êµ¼Ê²ÎÊý¸´ÖÆÒ»·Ýµ½º¯ÊýÖÐ,ÕâÑùµÄ»°Èç¹ûº¯Êý¶ÔÆä´«µÝ¹ýÀ´µÄÐÎʽ²ÎÊý½øÐÐÐÞ¸Ä,½«²»»áÓ°Ï쵽ʵ¼Ê²ÎÊý
ÒýÓô«µÝ
ÊÇÖ¸ÔÚµ÷Óú¯Êýʱ½«¶ÔÏóµÄµØÖ·Ö±½Ó´«µÝµ½º¯ÊýÖÐ,Èç¹ûÔÚ¶ÔÐÎʽ²ÎÊý½øÐÐÐÞ¸Ä,½«Ó°Ï쵽ʵ¼Ê²ÎÊýµÄÖµ¡£
==
ÊÇ Java ÖÐÒ»ÖÖ²Ù×÷·û,ËüÓÐÁ½ÖֱȽϷ½Ê½
»ù±¾Êý¾ÝÀàÐÍ
À´Ëµ, == ÅжϵÄÊÇÁ½±ßµÄÖµ
ÊÇ·ñÏàµÈpublic class DoubleCompareAndEquals {
Person person1 = new Person(24,"boy");
Person person2 = new Person(24,"girl");
int c = 10;
private void doubleCompare(){
int a = 10;
int b = 10;
System.out.println(a == b);
System.out.println(a == c);
System.out.println(person1.getId() == person2.getId());
}
}
ÒýÓÃÀàÐÍ
À´Ëµ, == ÅжϵÄÊÇÁ½±ßµÄÒýÓÃ
ÊÇ·ñÏàµÈ,Ò²¾ÍÊÇÅжÏÁ½¸ö¶ÔÏóÊÇ·ñÖ¸ÏòÁËͬһ¿éÄÚ´æÇøÓò¡£private void equals(){
System.out.println(person1.getName().equals(person2.getName()));
}
equals
ÊÇ Java ÖÐËùÓжÔÏóµÄ¸¸Àà,¼´ Object
ÀඨÒåµÄÒ»¸ö·½·¨¡£ËüÖ»ÄܱȽ϶ÔÏó,Ëü±íʾµÄÊÇÒýÓÃË«·½µÄÖµÊÇ·ñÏàµÈ¡£ËùÒÔ¼Çס,²¢²»ÊÇ˵ == ±È½ÏµÄ¾ÍÊÇÒýÓÃÊÇ·ñÏàµÈ,equals ±È½ÏµÄ¾ÍÊÇÖµ,ÕâÐèÒªÇø·ÖÀ´ËµµÄ¡£
equals ÓÃ×÷¶ÔÏóÖ®¼äµÄ±È½Ï¾ßÓÐÈçÏÂÌØÐÔ
×Ô·´ÐÔ
:¶ÔÓÚÈκηǿÕÒýÓà x À´Ëµ,x.equals(x) Ó¦¸Ã·µ»Ø true¡£¶Ô³ÆÐÔ
:¶ÔÓÚÈκηǿÕÒýÓà x ºÍ y À´Ëµ,Èôx.equals(y)Ϊ true,Ôòy.equals(x)ҲΪ true¡£´«µÝÐÔ
:¶ÔÓÚÈκηǿÕÒýÓõÄÖµÀ´Ëµ,ÓÐÈý¸öÖµ,x¡¢y ºÍ z,Èç¹ûx.equals(y) ·µ»Øtrue,y.equals(z) ·µ»Øtrue,ÄÇôx.equals(z) Ò²Ó¦¸Ã·µ»Øtrue¡£Ò»ÖÂÐÔ
:¶ÔÓÚÈκηǿÕÒýÓà x ºÍ y À´Ëµ,Èç¹û x.equals(y) ÏàµÈµÄ»°,ÄÇôËüÃDZØÐëʼÖÕÏàµÈ¡£·Ç¿ÕÐÔ
:¶ÔÓÚÈκηǿÕÒýÓõÄÖµ x À´Ëµ,x.equals(null) ±ØÐë·µ»Ø false¡£ÔÚ Java ÖÐ,Êý¾ÝÀàÐÍÖ»ÓÐËÄÀà°ËÖÖ
byte Ò²¾ÍÊÇ×Ö½Ú,1 byte = 8 bits,byte µÄĬÈÏÖµÊÇ 0 ;
short Õ¼ÓÃÁ½¸ö×Ö½Ú,Ò²¾ÍÊÇ 16 λ,1 short = 16 bits,ËüµÄĬÈÏÖµÒ²ÊÇ 0 ;
int Õ¼ÓÃËĸö×Ö½Ú,Ò²¾ÍÊÇ 32 λ,1 int = 32 bits,ĬÈÏÖµÊÇ 0 ;
long Õ¼Óð˸ö×Ö½Ú,Ò²¾ÍÊÇ 64 λ,1 long = 64 bits,ĬÈÏÖµÊÇ 0L;
ËùÒÔÕûÊýÐ͵ÄÕ¼ÓÃ×Ö½Ú´óС¿Õ¼äΪ long > int > short > byte
¸¡µãÐÍÓÐÁ½ÖÖÊý¾ÝÀàÐÍ:float ºÍ double
float Êǵ¥¾«¶È¸¡µãÐÍ,Õ¼Óà 4 λ,1 float = 32 bits,ĬÈÏÖµÊÇ 0.0f;
double ÊÇË«¾«¶È¸¡µãÐÍ,Õ¼Óà 8 λ,1 double = 64 bits,ĬÈÏÖµÊÇ 0.0d;
×Ö·ûÐ;ÍÊÇ char,char ÀàÐÍÊÇÒ»¸öµ¥Ò»µÄ 16 λ Unicode ×Ö·û,×îСֵÊÇ \u0000 (Ò²¾ÍÊÇ 0 )
,×î´óÖµÊÇ \uffff (¼´Îª 65535)
,char Êý¾ÝÀàÐÍ¿ÉÒÔ´æ´¢ÈκÎ×Ö·û,ÀýÈç char a = ¡®A¡¯¡£
²¼¶ûÐÍÖ¸µÄ¾ÍÊÇ boolean,boolean Ö»ÓÐÁ½ÖÖÖµ,true »òÕßÊÇ false,Ö»±íʾ 1 λ,ĬÈÏÖµÊÇ false¡£
ÒÔÉÏ x λ
¶¼Ö¸µÄÊÇÔÚÄÚ´æÖеÄÕ¼Óá£
String ´ú±íµÄÊÇ Java ÖеÄ×Ö·û´®
,String Àà±È½ÏÌØÊâ,ËüÕû¸öÀ඼ÊDZ» final
ÐÞÊεÄ,Ò²¾ÍÊÇ˵,String ²»Äܱ»ÈκÎÀà¼Ì³Ð,ÈκΠÐÞ¸Ä
String ×Ö·û´®µÄ·½·¨¶¼ÊÇ´´½¨ÁËÒ»¸öеÄ×Ö·û´®¡£
equals ·½·¨ÊÇ Object ÀඨÒåµÄ·½·¨,Object ÊÇËùÓÐÀàµÄ¸¸Àà,µ±È»Ò²°üÀ¨ String,String ÖØдÁË equals
·½·¨,ÏÂÃæÎÒÃÇÀ´¿´¿´ÊÇÔõôÖØдµÄ
ÒýÓÃ
ÊÇ·ñÏàµÈ¡£Èç¹ûÒýÓÃÏàµÈµÄ»°,Ö±½Ó·µ»Ø true ,²»ÏàµÈµÄ»°¼ÌÐøÏÂÃæµÄÅжÏ×Ö·û
ÊÇ·ñÏàµÈ,Ò»µ©ÓÐÒ»¸ö×Ö·û²»ÏàµÈ,¾Í»áÖ±½Ó·µ»Ø false¡£ÏÂÃæÊÇËüµÄÁ÷³Ìͼ
ÕâÀïÔÙÌáʾһÏÂ,Äã¿ÉÄÜÓÐÒÉ»óʲôʱºòÊÇ
if (this == anObject) {
return true;
}
Õâ¸öÅжÏÓï¾äÈçºÎ²ÅÄÜ·µ»Ø true?ÒòΪ¶¼ÊÇ×Ö·û´®°¡,×Ö·û´®±È½ÏµÄ²»¶¼ÊǶѿռäÂð,ÃÍȻһ¿´·¢ÏÖºÃÏñÓÀÔ¶Ò²²»»á×ß,µ«ÊÇÄãÍü¼ÇÁË String.intern()
·½·¨,Ëü±íʾµÄ¸ÅÄîÔÚ²»Í¬µÄ JDK °æ±¾Óв»Í¬µÄÇø·Ö
ÔÚ JDK1.7 ¼°ÒÔºóµ÷Óà intern ·½·¨ÊÇÅжÏÔËÐÐʱ³£Á¿³ØÖÐÊÇ·ñÓÐÖ¸¶¨µÄ×Ö·û´®,Èç¹ûûÓеĻ°,¾Í°Ñ×Ö·û´®Ìí¼Óµ½³£Á¿³ØÖÐ,²¢·µ»Ø³£Á¿³ØÖеĶÔÏó¡£
ÑéÖ¤¹ý³ÌÈçÏÂ
private void StringOverrideEquals(){
String s1 = "aaa";
String s2 = "aa" + new String("a");
String s3 = new String("aaa");
System.out.println(s1.intern().equals(s1));
System.out.println(s1.intern().equals(s2));
System.out.println(s3.intern().equals(s1));
}
Ê×ÏÈ s1.intern.equals(s1) Õâ¸öÎÞÂÛÈçºÎ¶¼·µ»Ø true,ÒòΪ s1 ×Ö·û´®´´½¨³öÀ´¾ÍÒѾÔÚ³£Á¿³ØÖдæÔÚÁË¡£
È»ºóµÚ¶þÌõÓï¾ä·µ»Ø false,ÒòΪ s1 ·µ»ØµÄÊdz£Á¿³ØÖеĶÔÏó,¶ø s2 ·µ»ØµÄÊǶÑÖеĶÔÏó
µÚÈýÌõÓï¾ä s3.intern.equals(s1),·µ»Ø true ,ÒòΪ s3 ¶ÔÏóËäÈ»ÔÚ¶ÑÖд´½¨ÁËÒ»¸ö¶ÔÏó,µ«ÊÇ s3 ÖÐµÄ ¡°aaa¡± ·µ»ØµÄÊdz£Á¿³ØÖеĶÔÏó¡£
equals ·½·¨ºÍ hashCode ¶¼ÊÇ Object Öж¨ÒåµÄ·½·¨,ËüÃǾ³£±»Ò»ÆðÖØд¡£
equals ·½·¨ÊÇÓÃÀ´±È½Ï¶ÔÏó´óСÊÇ·ñÏàµÈµÄ·½·¨,hashcode ·½·¨ÊÇÓÃÀ´ÅжÏÿ¸ö¶ÔÏó hash ÖµµÄÒ»ÖÖ·½·¨¡£Èç¹ûÖ»ÖØд equals ·½·¨¶ø²»ÖØд hashcode ·½·¨,ºÜ¿ÉÄÜ»áÔì³ÉÁ½¸ö²»Í¬µÄ¶ÔÏó,ËüÃÇµÄ hashcode Ò²ÏàµÈ,Ôì³É³åÍ»¡£±ÈÈç
String str1 = "ͨ»°";
String str2 = "ÖصØ";
ËüÃÇÁ½¸öµÄ hashcode ÏàµÈ,µ«ÊÇ equals ¿É²»ÏàµÈ¡£
ÎÒÃÇÀ´¿´Ò»Ï hashCode ¹Ù·½µÄ¶¨Òå
×ܽáÆðÀ´¾ÍÊÇ
Õâ¸ö¿Ï¶¨ÊDz»Ò»¶¨µÄ,¾Ù¸ö·Ç³£¼òµ¥µÄÀý×Ó,ÄãÖØдÁË hashcode ·½·¨,À´ËãÈ¡ÓàÊý,ÄÇôÁ½¸ö¶ÔÏóµÄ hashcode ºÜ¿ÉÄÜÖظ´,µ«ÊÇÁ½¸ö¶ÔÏóµÄ equals È´²»Ò»¶¨Ïàͬ¡£
¾ÍËãÄã²»ÖØд hashcode ·½·¨,ÎÒ¸øÄãÒ»¶Î´úÂëʾÀý
String str1 = "ͨ»°";
String str2 = "ÖصØ";
System. out. println(String. format("str1:%d | str2:%d", str1. hashCode(),str2. hashCode()));
System. out. println(str1. equals(str2));
ÉÏÃæÁ½¶Î´úÂëµÄÊä³ö½á¹ûÊÇ
str1:1179395 | str2:1179395
false
ÕâÁ½¸ö×Ö·û´®µÄ equals ²¢²»Ïàͬ¡£Ò²¾ÍÊÇ˵,¾ÍËãÊÇ hashcode ÏàͬµÄ×Ö·û´®,equals Ò²ÓпÉÄܲ»Í¬¡£
Ò»¸ö»òÕßÁ½¸ö,String s1 ÊÇÉùÃ÷ÁËÒ»¸ö String ÀàÐ굀 s1 ±äÁ¿,Ëü²»ÊǶÔÏó¡£Ê¹Óà new
¹Ø¼ü×Ö»áÔÚ¶ÑÖд´½¨Ò»¸ö¶ÔÏó,ÁíÍâÒ»¸ö¶ÔÏóÊÇ abc
,Ëü»áÔÚ³£Á¿³ØÖд´½¨,ËùÒÔÒ»¹²´´½¨ÁËÁ½¸ö¶ÔÏó;Èç¹û abc ÔÚ³£Á¿³ØÖÐÒѾ´æÔڵĻ°,ÄÇô¾Í»á´´½¨Ò»¸ö¶ÔÏó¡£
ÏêϸÇë·ÔıÊÕßµÄÁíÍâһƪÎÄÕ һƪÓëÖÚ²»Í¬µÄ String¡¢StringBuffer¡¢StringBuilder Ïê½â
Ê×ÏÈÁ˽âÒ»ÏÂʲôÊDz»¿É±ä¶ÔÏó
,²»¿É±ä¶ÔÏó¾ÍÊÇÒ»¾´´½¨ºó,Æä¶ÔÏóµÄÄÚ²¿×´Ì¬²»Äܱ»ÐÞ¸Ä,ɶÒâ˼ÄØ?Ò²¾ÍÊÇ˵²»¿É±ä¶ÔÏóÐèÒª×ñÊØÏÂÃ漸ÌõÔÔò
ÓëÆä˵ÎÊ String ΪʲôÊDz»¿É±äµÄ,²»Èç˵ÈçºÎ°Ñ String Éè¼Æ³É²»¿É±äµÄ¡£
String ÀàÊÇÒ»ÖÖ¶ÔÏó,ËüÊǶÀÁ¢ÓÚ Java »ù±¾Êý¾ÝÀàÐͶø´æÔÚµÄ,String Äã¿ÉÒÔ°ÑËüÀí½âΪ×Ö·û´®µÄ¼¯ºÏ,String ±»Éè¼ÆΪ final µÄ,±íʾ String ¶ÔÏóÒ»¾´´½¨ºó,ËüµÄÖµ¾Í²»ÄÜÔÙ±»ÐÞ¸Ä,ÈÎºÎ¶Ô String Öµ½øÐÐÐ޸ĵķ½·¨¾ÍÊÇÖØд´½¨Ò»¸ö×Ö·û´®¡£String ¶ÔÏó´´½¨ºó»á´æÔÚÓÚÔËÐÐʱ³£Á¿³ØÖÐ,ÔËÐÐʱ³£Á¿³ØÊÇÊôÓÚ·½·¨ÇøµÄÒ»²¿·Ö,JDK1.7 ºó°ÑËüÒƵ½Á˶ÑÖС£
²»¿É±ä¶ÔÏó²»ÊÇÕæµÄ²»¿É±ä,¿ÉÒÔͨ¹ý·´Éä
À´¶ÔÆäÄÚ²¿µÄÊôÐÔºÍÖµ½øÐÐÐÞ¸Ä,²»¹ýÒ»°ãÎÒÃDz»ÕâÑù×ö¡£
static ÊÇ Java Öзdz£ÖØÒªµÄ¹Ø¼ü×Ö,static ±íʾµÄ¸ÅÄîÊÇ ¾²Ì¬µÄ
,ÔÚ Java ÖÐ,static Ö÷ÒªÓÃÀ´
¾²Ì¬±äÁ¿
¡¢Ò²³ÆΪÀà±äÁ¿
,Àà±äÁ¿ÊôÓÚÀàËùÓÐ,¶ÔÓÚ²»Í¬µÄÀàÀ´Ëµ,static ±äÁ¿Ö»ÓÐÒ»·Ý,static ÐÞÊεıäÁ¿Î»ÓÚ·½·¨ÇøÖÐ;static ÐÞÊεıäÁ¿Äܹ»Ö±½Óͨ¹ý ÀàÃû.±äÁ¿Ãû À´½øÐзÃÎÊ,²»ÓÃͨ¹ýʵÀý»¯ÀàÔÙ½øÐÐʹÓ᣾²Ì¬·½·¨
,¾²Ì¬·½·¨Äܹ»Ö±½Óͨ¹ý ÀàÃû.·½·¨Ãû À´Ê¹ÓÃ,ÔÚ¾²Ì¬·½·¨ÄÚ²¿²»ÄÜʹÓ÷Ǿ²Ì¬ÊôÐԺͷ½·¨static{}
,ÕâÖÖ±»³ÆΪ¾²Ì¬´úÂë¿é
,Ò»ÖÖÊÇÔÚÀàÖж¨Ò徲̬ÄÚ²¿Àà
,ʹÓà static class xxx
À´½øÐж¨Òå¡£import static xxx
À´ÊµÏÖ,ÕâÖÖ·½Ê½Ò»°ã²»ÍƼöʹÓÃÉîÈëÀí½âÇë²Î¿¼ÕâƪÎÄÕ һ¸öССµÄ static »¹ÄÜÄѵÃסÎÒ?
final ÊÇ Java ÖеĹؼü×Ö,Ëü±íʾµÄÒâ˼ÊÇ ²»¿É±äµÄ
,ÔÚ Java ÖÐ,final Ö÷ÒªÓÃÀ´
extends
À´¼Ì³Ð±» final ÐÞÊεÄÀà¡£²»¿É±ä
µÄЧ¹û,ËùÒÔ,¿ÉÒÔÓÃÀ´±£»¤Ö»¶ÁÊý¾Ý,ÓÈÆäÊÇÔÚ²¢·¢±à³ÌÖÐ,ÒòΪÃ÷È·µÄ²»ÄÜÔÙΪ final ±äÁ¿½øÐи³Öµ,ÓÐÀûÓÚ¼õÉÙ¶îÍâµÄͬ²½¿ªÏú¡£³éÏóÀàºÍ½Ó¿Ú¶¼ÊÇ Java ÖеĹؼü×Ö,³éÏóÀàºÍ½Ó¿ÚÖж¼ÔÊÐí½øÐз½·¨µÄ¶¨Òå,¶ø²»ÓþßÌåµÄ·½·¨ÊµÏÖ¡£³éÏóÀàºÍ½Ó¿Ú¶¼ÔÊÐí±»¼Ì³Ð,ËüÃǹ㷺µÄÓ¦ÓÃÓÚ JDK ºÍ¿ò¼ÜµÄÔ´ÂëÖÐ,À´ÊµÏÖ¶à̬ºÍ²»Í¬µÄÉè¼Æģʽ¡£
²»Í¬µãÔÚÓÚ
³éÏ󼶱ð²»Í¬
:Àà¡¢³éÏóÀà¡¢½Ó¿ÚÆäʵÊÇÈýÖÖ²»Í¬µÄ³éÏ󼶱ð,³éÏó³Ì¶ÈÒÀ´ÎÊÇ ½Ó¿Ú > ³éÏóÀà > Àà¡£ÔÚ½Ó¿ÚÖÐ,Ö»ÔÊÐí½øÐз½·¨µÄ¶¨Òå,²»ÔÊÐíÓз½·¨µÄʵÏÖ,³éÏóÀàÖпÉÒÔ½øÐз½·¨µÄ¶¨ÒåºÍʵÏÖ;¶øÀàÖÐÖ»ÔÊÐí½øÐз½·¨µÄʵÏÖ,ÎÒ˵µÄ·½·¨µÄ¶¨ÒåÊDz»ÔÊÐíÔÚ·½·¨ºóÃæ³öÏÖ {}
ʹÓõĹؼü×Ö²»Í¬
:ÀàʹÓà class
À´±íʾ;³éÏóÀàʹÓà abstract class
À´±íʾ;½Ó¿ÚʹÓà interface
À´±íʾ±äÁ¿
:½Ó¿ÚÖж¨ÒåµÄ±äÁ¿Ö»ÄÜÊǹ«¹²µÄ¾²Ì¬³£Á¿,³éÏóÀàÖеıäÁ¿ÊÇÆÕͨ±äÁ¿¡£ÔÚ Java ÖÐ,ÖØдºÍÖØÔض¼ÊǶÔͬһ·½·¨µÄ²»Í¬±íÏÖÐÎʽ,ÏÂÃæÎÒÃÇÕë¶ÔÖØдºÍÖØÔØ×öһϼòµ¥µÄÇø·Ö
×Ó¸¸¼¶¹Øϵ²»Í¬
,ÖØдÊÇÕë¶Ô×Ó¼¶ºÍ¸¸¼¶µÄ²»Í¬±íÏÖÐÎʽ,¶øÖØÔØÊÇÔÚͬһÀàÖеIJ»Í¬±íÏÖÐÎʽ;¸ÅÄͬ
,×ÓÀàÖØд¸¸ÀàµÄ·½·¨Ò»°ãʹÓà @override
À´±íʾ;ÖØдºóµÄ·½·¨Æä·½·¨µÄÉùÃ÷ºÍ²ÎÊýÀàÐÍ¡¢Ë³Ðò±ØÐëÒªÓ븸ÀàÍêÈ«Ò»ÖÂ;ÖØÔØÊÇÕë¶ÔͬһÀàÖиÅÄî,ËüÒªÇóÖØÔصķ½·¨±ØÐëÂú×ãÏÂÃæÈκÎÒ»¸öÒªÇó:·½·¨²ÎÊýµÄ˳Ðò,²ÎÊýµÄ¸öÊý,²ÎÊýµÄÀàÐÍÈÎÒâÒ»¸ö±£³Ö²»Í¬¼´¿É¡£ÕâµÀÌ⿼µ½Äã¶ÔÓÚ¹¹ÔìÆ÷µÄÀí½âºÍÈÏʶ¡£
ÎÒÃÇ Java Öд´½¨Ò»¸ö¶ÔÏóÆäʵ¾ÍÊǵ÷ÓÃÁ˸öÔÏóµÄ¹¹Ôì·½·¨,±ÈÈçÏÂÃæ´úÂë
InstanceObject IO = new InstanceObject() ; // µ÷ÓÃÁËÎ޲ι¹Ôì·½·¨
InstanceObject IO = new InstanceObject(xxx) ; // µ÷ÓÃÁËÓвÎÊýµÄ¹¹Ôì·½·¨
¶øÖØÔصĸÅÄîÊÇʲôÄØ?
ËüÊÇÖ¸ÎÒÃÇ¿ÉÒÔ¶¨ÒåһЩÃû³ÆÏàͬµÄ·½·¨,ͨ¹ý¶¨Ò岻ͬµÄÊäÈë²ÎÊýÀ´Çø·ÖÕâЩ·½·¨,È»ºóÔÙµ÷ÓÃʱ,JVM ¾Í»á¸ù¾Ý²»Í¬µÄ²ÎÊýÑùʽ,À´Ñ¡ÔñºÏÊʵķ½·¨Ö´ÐС£
Ò²¾ÍÊÇ˵,ÖØÔصĸÅÄî¸ü¶àÃèÊöµÄÊǶÔÏàͬ
ÃüÃûµÄ·½·¨µÄ²»Í¬ÃèÊö¡£ÄÇôÎÒÃÇÉÏÃæÕâ¶Î´úÂëºÜÏÔÈ»¾ÍÊÇÖØÔØÁË,ÒòΪÃû³ÆÏàͬ,ÎÒ¿ÉÒÔͨ¹ýÓÐÎÞ²ÎÊýÀ´Åжϵ÷Óò»Í¬µÄ¹¹Ôì·½·¨À´½øÐгõʼ»¯¡£
ÄÇô¹¹ÔìÆ÷ÄÜ·ñ±»ÖØдÄØ?ÕâÀïÎÒÃÇÏÈÀ´¿´Ò»ÏÂʲôÊÇÖØд
ÖØдÊÇ×ÓÀà¶Ô¸¸ÀàµÄÔÊÐí·ÃÎʵķ½·¨µÄʵÏÖ¹ý³Ì½øÐÐÖØбàд, ·µ»ØÖµºÍÐβζ¼²»Äܸı䡣´ÓÖØдµÄ¸ÅÄÒåÀ´ËµÎÒÃǾÍÖªµÀ¹¹ÔìÆ÷²»Äܱ»ÖØдÁË¡£
Ê×ÏÈ,¹¹ÔìÆ÷ûÓзµ»ØÖµ,µÚ¶þµã,¹¹ÔìÆ÷µÄÃû³Æ±ØÐëºÍÀàÃûÒ»Ö¡£
Äã×ܲ»ÄÜÔÚÀà A ÖÐдÁË public A();ÔÚÀà B ÖÐҲд public A() °É,ÕâÏÔÈ»ÊDz»ÄÜͨ¹ý±àÒëµÄ¡£
byte µÄÈ¡Öµ·¶Î§ÊÇ -128 -> 127 Ö®¼ä,Ò»¹²ÊÇ 256 ¸ö¡£Ò»¸ö byte ÀàÐÍÔÚ¼ÆËã»úÖÐÕ¼¾ÝÒ»¸ö×Ö½Ú,ÄÇô¾ÍÊÇ 8 bit,ËùÒÔ×î´ó¾ÍÊÇ 2^7 = 1111 1111¡£
Java ÖÐÓò¹Âë
À´±íʾ¶þ½øÖÆÊý,²¹ÂëµÄ×î¸ßλÊÇ·ûºÅλ,×î¸ßλÓà 0 ±íʾÕýÊý,×î¸ßλ 1 ±íʾ¸ºÊý,ÕýÊýµÄ²¹Âë¾ÍÊÇÆä±¾Éí
,ÓÉÓÚ×î¸ßλÊÇ·ûºÅλ,ËùÒÔÕýÊý±íʾµÄ¾ÍÊÇ 0111 1111 ,Ò²¾ÍÊÇ 127¡£×î´ó¸ºÊý¾ÍÊÇ 1111 1111,ÕâÆäÖлáÉæ¼°µ½Á½¸ö 0 ,Ò»¸ö +0 ,Ò»¸ö -0 ,+0 ¹éΪÕýÊý,Ò²¾ÍÊÇ 0 ,-0 ¹éΪ¸ºÊý,Ò²¾ÍÊÇ -128,ËùÒÔ byte µÄ·¶Î§¾ÍÊÇ -128 - 127¡£
Ïàͬµã
HashMap ºÍ HashTable ¶¼ÊÇ»ùÓÚ¹þÏ£±íʵÏÖµÄ,ÆäÄÚ²¿Ã¿¸öÔªËض¼ÊÇ key-value
¼üÖµ¶Ô,HashMap ºÍ HashTable ¶¼ÊµÏÖÁË Map¡¢Cloneable¡¢Serializable ½Ó¿Ú¡£
²»Í¬µã
¸¸À಻ͬ:HashMap ¼Ì³ÐÁË AbstractMap
Àà,¶ø HashTable ¼Ì³ÐÁË Dictionary
Àà
¿ÕÖµ²»Í¬:HashMap ÔÊÐí¿ÕµÄ key ºÍ value Öµ,HashTable ²»ÔÊÐí¿ÕµÄ key ºÍ value Öµ¡£HashMap »á°Ñ Null key µ±×öÆÕͨµÄ key ¶Ô´ý¡£²»ÔÊÐí null key Öظ´¡£
Collections.synchronizedMap
»òÕßÊÇ ConcurrentHashMap
¡£¶ø HashTable ±¾Éí¾ÍÊÇḬ̈߳²È«µÄÈÝÆ÷¡£µ¥Á´±í
µÄ,µ«ÊÇ HashMap ½øÐÐ put »òÕß get ²Ù×÷,¿ÉÒÔ´ïµ½³£Êýʱ¼äµÄÐÔÄÜ;¶ø HashTable µÄ put ºÍ get ²Ù×÷¶¼ÊǼÓÁË synchronized
ËøµÄ,ËùÒÔЧÂʺܲHashSet ¼Ì³ÐÓÚ AbstractSet ½Ó¿Ú,ʵÏÖÁË Set¡¢Cloneable,¡¢java.io.Serializable ½Ó¿Ú¡£HashSet ²»ÔÊÐí¼¯ºÏÖгöÏÖÖظ´µÄÖµ¡£HashSet µ×²ãÆäʵ¾ÍÊÇ HashMap,ËùÓÐ¶Ô HashSet µÄ²Ù×÷Æäʵ¾ÍÊÇ¶Ô HashMap µÄ²Ù×÷¡£ËùÒÔ HashSet Ò²²»±£Ö¤¼¯ºÏµÄ˳Ðò,Ò²²»ÊÇḬ̈߳²È«µÄÈÝÆ÷¡£
JDK1.7 ÖÐ,HashMap ²ÉÓÃλͰ + Á´±í
µÄʵÏÖ,¼´Ê¹ÓÃÁ´±í
À´´¦Àí³åÍ»,ͬһ hash ÖµµÄÁ´±í¶¼´æ´¢ÔÚÒ»¸öÊý×éÖС£µ«Êǵ±Î»ÓÚÒ»¸öÍ°ÖеÄÔªËؽ϶à,¼´ hash ÖµÏàµÈµÄÔªËؽ϶àʱ,ͨ¹ý key ÖµÒÀ´Î²éÕÒµÄЧÂʽϵ͡£
ËùÒÔ,Óë JDK 1.7 Ïà±È,JDK 1.8 Ôڵײã½á¹¹·½Ãæ×öÁËһЩ¸Ä±ä,µ±Ã¿¸öÍ°ÖÐÔªËØ´óÓÚ 8 µÄʱºò,»áת±äΪºìºÚÊ÷,Ä¿µÄ¾ÍÊÇÓÅ»¯²éѯЧÂÊ¡£
ÕâµÀÌâÎÒÏëÁ˼¸Ìì,֮ǰºÍȺÀïС»ï°éÃÇ̽ÌÖÿÈÕÒ»ÌâµÄʱºò,ÎÊËûÃÇΪʲô length%hash == (n - 1) & hash,ËüÃÇ˵ÏàµÈµÄÇ°ÌáÊÇ length µÄ³¤¶È 2 µÄÃݴη½,È»ºóÎÒ»ØÁËÒ»¾äÄѵÀ length »¹Äܲ»ÊÇ 2 µÄÃݴη½Âð?ÆäʵÊÇÎÒûÓи㶮Òò¹û¹Øϵ,ÒòΪ HashMap µÄ³¤¶ÈÊÇ 2 µÄÃݴη½,ËùÒÔʹÓÃÓàÊýÀ´ÅжÏÔÚÍ°ÖеÄϱꡣÈç¹û length µÄ³¤¶È²»ÊÇ 2 µÄÃݴη½,С»ï°éÃÇ¿ÉÒÔ¾Ù¸öÀý×ÓÀ´ÊÔÊÔ
ÀýÈ糤¶ÈΪ 9 ʱºò,3 & (9-1) = 0,2 & (9-1) = 0 ,¶¼ÔÚ 0 ÉÏ,ÅöײÁË;
ÕâÑù»áÔö´ó HashMap ÅöײµÄ¼¸ÂÊ¡£
HashMap ²»ÊÇÒ»¸öḬ̈߳²È«µÄÈÝÆ÷,Ôڸ߲¢·¢³¡¾°ÏÂ,Ó¦¸ÃʹÓà ConcurrentHashMap
,ÔÚ¶àÏ̳߳¡¾°ÏÂʹÓà HashMap »áÔì³ÉËÀÑ»·ÎÊÌâ(»ùÓÚ JDK1.7),³öÏÖÎÊÌâµÄλÖÃÔÚ rehash
´¦,Ò²¾ÍÊÇ
do {
Entry<K,V> next = e.next; // <--¼ÙÉèÏß³ÌÒ»Ö´Ðе½ÕâÀï¾Í±»µ÷¶È¹ÒÆðÁË
int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
ÕâÊÇ JDK1.7 µÄ rehash ´úÂëƬ¶Î,ÔÚ²¢·¢µÄ³¡¾°Ï»áÐγɻ·¡£
JDK1.8 Ò²»áÔì³ÉËÀÑ»·ÎÊÌâ¡£
ÒòΪ HashMap ²»ÊÇÒ»¸öḬ̈߳²È«µÄÈÝÆ÷,ËùÒÔ²¢·¢³¡¾°ÏÂÍƼöʹÓà ConcurrentHashMap
,»òÕßʹÓÃḬ̈߳²È«µÄ HashMap,ʹÓà Collections
°üϵÄḬ̈߳²È«µÄÈÝÆ÷,±ÈÈç˵
Collections.synchronizedMap(new HashMap());
»¹¿ÉÒÔʹÓà HashTable ,ËüÒ²ÊÇḬ̈߳²È«µÄÈÝÆ÷,»ùÓÚ key-value ´æ´¢,¾³£Óà HashMap ºÍ HashTable ×ö±È½Ï¾ÍÊÇÒòΪ HashTable µÄÊý¾Ý½á¹¹ºÍ HashMap Ïàͬ¡£
ÉÏÃæЧÂÊ×î¸ßµÄ¾ÍÊÇ ConcurrentHashMap¡£
Ê×ÏÈ»áʹÓà hash º¯ÊýÀ´¼ÆËã key,È»ºóÖ´ÐÐÕæÕýµÄ²åÈë·½·¨
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
Node<K,V>[] tab; Node<K,V> p; int n, i;
// Èç¹ûtable Ϊnull »òÕßûÓÐΪtable·ÖÅäÄÚ´æ,¾ÍresizeÒ»´Î
if ((tab = table) == null || (n = tab.length) == 0)
n = (tab = resize()).length;
// Ö¸¶¨hashÖµ½ÚµãΪ¿ÕÔòÖ±½Ó²åÈë,Õâ¸ö(n - 1) & hash²ÅÊDZíÖÐÕæÕýµÄ¹þÏ£
if ((p = tab[i = (n - 1) & hash]) == null)
tab[i] = newNode(hash, key, value, null);
// Èç¹û²»Îª¿Õ
else {
Node<K,V> e; K k;
// ¼ÆËã±íÖеÄÕâ¸öÕæÕýµÄ¹þÏ£ÖµÓëÒª²åÈëµÄkey.hashÏà±È
if (p.hash == hash &&
((k = p.key) == key || (key != null && key.equals(k))))
e = p;
// Èô²»Í¬µÄ»°,²¢ÇÒµ±Ç°½ÚµãÒѾÔÚ TreeNode ÉÏÁË
else if (p instanceof TreeNode)
// ²ÉÓúìºÚÊ÷´æ´¢·½Ê½
e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
// key.hash ²»Í¬²¢ÇÒÒ²²»ÔÙ TreeNode ÉÏ,ÔÚÁ´±íÉÏÕÒµ½ p.next==null
else {
for (int binCount = 0; ; ++binCount) {
if ((e = p.next) == null) {
// ÔÚ±íβ²åÈë
p.next = newNode(hash, key, value, null);
// ÐÂÔö½ÚµãºóÈç¹û½Úµã¸öÊýµ½´ïãÐÖµ,Ôò½øÈë treeifyBin() ½øÐÐÔÙ´ÎÅжÏ
if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
treeifyBin(tab, hash);
break;
}
// Èç¹ûÕÒµ½ÁËͬhash¡¢keyµÄ½Úµã,ÄÇôֱ½ÓÍ˳öÑ»·
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
break;
// ¸üРp Ö¸ÏòÏÂÒ»½Úµã
p = e;
}
}
// mapÖк¬ÓоÉÖµ,·µ»Ø¾ÉÖµ
if (e != null) { // existing mapping for key
V oldValue = e.value;
if (!onlyIfAbsent || oldValue == null)
e.value = value;
afterNodeAccess(e);
return oldValue;
}
}
// mapµ÷Õû´ÎÊý + 1
++modCount;
// ¼üÖµ¶ÔµÄÊýÁ¿´ïµ½ãÐÖµ,ÐèÒªÀ©ÈÝ
if (++size > threshold)
resize();
afterNodeInsertion(evict);
return null;
}
HashMap put ·½·¨µÄºËÐľÍÊÇÔÚ putval
·½·¨,ËüµÄ²åÈë¹ý³ÌÈçÏÂ
¹ØÓÚ HashMap µÄÉîÈëÀí½âÇë²Î¿¼ÕâƪÎÄÕ ¿´ÍêÕâƪ HashMap ,ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË
ConcurrentHashMap ÊÇḬ̈߳²È«µÄ Map,ËüÒ²ÊǸ߲¢·¢³¡¾°ÏµÄÊ×Ñ¡Êý¾Ý½á¹¹,ConcurrentHashMap µ×²ãÊÇʹÓ÷ֶÎËø
À´ÊµÏֵġ£
Integer »º´æ³ØÒ²¾ÍÊÇ IntegerCache
,ËüÊÇ Integer µÄ¾²Ì¬ÄÚ²¿Àà¡£
ËüµÄĬÈÏÖµÓÃÓÚ»º´æ -128 - 127 Ö®¼äµÄÊý×Ö,Èç¹ûÓÐ -128 - 127 Ö®¼äµÄÊý×ֵĻ°,ʹÓà new Integer ²»Óô´½¨¶ÔÏó,»áÖ±½Ó´Ó»º´æ³ØÖÐÈ¡,´Ë²Ù×÷»á¼õÉÙ¶ÑÖжÔÏóµÄ·ÖÅä,ÓÐÀûÓÚÌá¸ß³ÌÐòµÄÔËÐÐЧÂÊ¡£
ÀýÈç´´½¨Ò»¸ö Integer a = 24,ÆäʵÊǵ÷Óà Integer µÄ valueOf
,¿ÉÒÔͨ¹ý·´±àÒëµÃ³öÕâ¸ö½áÂÛ
È»ºóÎÒÃÇ¿´Ò»Ï valueOf ·½·¨
Èç¹ûÔÚÖ¸¶¨»º´æ³Ø·¶Î§ÄڵĻ°,»áÖ±½Ó·µ»Ø»º´æµÄÖµ¶ø²»Óô´½¨Ð嵀 Integer ¶ÔÏó¡£
»º´æµÄ´óС¿ÉÒÔʹÓà XX:AutoBoxCacheMax
À´Ö¸¶¨,ÔÚ VM ³õʼ»¯Ê±,java.lang.Integer.IntegerCache.high
ÊôÐÔ»áÉèÖúͱ£´æÔÚ sun.misc.VM
µÄ˽ÓÐϵͳÊôÐÔÖС£
ÓÉÓÚÿ¸ö¹ú¼Ò¶¼ÓÐ×Ô¼º¶ÀÓеÄ×Ö·û±àÂë,ËùÒÔUnicode µÄ·¢Õ¹Ö¼ÔÚ´´½¨Ò»¸öеıê×¼,ÓÃÀ´Ó³Éäµ±½ñʹÓõĴó¶àÊýÓïÑÔÖеÄ×Ö·û,ÕâЩ×Ö·ûÓÐһЩ²»ÊDZØÒªµÄ,µ«ÊǶÔÓÚ´´½¨Îı¾À´ËµÈ´ÊDz»¿É»òȱµÄ¡£Unicode ͳһÁËËùÓÐ×Ö·ûµÄ±àÂë,ÊÇÒ»¸ö Character Set,Ò²¾ÍÊÇ×Ö·û¼¯,×Ö·û¼¯Ö»ÊǸøËùÓеÄ×Ö·ûÒ»¸öΨһ±àºÅ,µ«ÊÇȴûÓй涨ÈçºÎ´æ´¢,²»Í¬µÄ×Ö·ûÆä´æ´¢¿Õ¼ä²»Ò»Ñù,ÓеÄÐèÒªÒ»¸ö×Ö½Ú¾ÍÄÜ´æ´¢,ÓеÄÔòÐèÒª2¡¢3¡¢4¸ö×Ö½Ú¡£
UTF-8 Ö»ÊÇÖÚ¶àÄܹ»¶ÔÎı¾×Ö·û½øÐнâÂë
µÄÒ»ÖÖ·½Ê½,ËüÊÇÒ»Öֱ䳤µÄ·½Ê½¡£UTF-8 ´ú±í 8 λһ×é±íʾ Unicode ×Ö·ûµÄ¸ñʽ,ʹÓà 1 - 4 ¸ö×Ö½ÚÀ´±íʾ×Ö·û¡£
U+ 0000 ~ U+ 007F: 0XXXXXXX
U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
¿ÉÒÔ¿´µ½,UTF-8 ͨ¹ý¿ªÍ·µÄ±ê־λλÊýʵÏÖÁ˱䳤¡£¶ÔÓÚµ¥×Ö½Ú×Ö·û,Ö»Õ¼ÓÃÒ»¸ö×Ö½Ú,ʵÏÖÁËÏòϼæÈÝ ASCII,²¢ÇÒÄÜºÍ UTF-32 Ò»Ñù,°üº¬ Unicode ÖеÄËùÓÐ×Ö·û,ÓÖÄÜÓÐЧ¼õÉÙ´æ´¢´«Êä¹ý³ÌÖÐÕ¼ÓõĿռ䡣
¿ÉÒÔ,ÒòΪ Unicode ±àÂë²ÉÓà 2 ¸ö×ֽڵıàÂë,UTF-8 ÊÇ Unicode µÄÒ»ÖÖʵÏÖ,ËüʹÓÿɱ䳤¶ÈµÄ×Ö·û¼¯½øÐбàÂë,char c = ¡®ÖС¯ ÊÇÁ½¸ö×Ö½Ú,ËùÒÔÄܹ»´æ´¢¡£ºÏ·¨¡£
Arrays.asList
ÊÇ Array ÖеÄÒ»¸ö¾²Ì¬·½·¨,ËüÄܹ»ÊµÏÖ°ÑÊý×éת»»³ÉΪ List ÐòÁÐ,ÐèҪעÒâÏÂÃ漸µã
public static void main(String[] args) {
Integer[] integer = new Integer[] { 1, 2, 3, 4 };
List integetList = Arrays.asList(integer);
integetList.add(5);
}
½á¹û»áÖ±½ÓÅ׳ö
Exception in thread "main" java.lang.UnsupportedOperationException
ÎÒÃÇ¿´Ò»ÏÂÔ´Âë¾ÍÄÜ·¢ÏÖÎÊÌâ
// ÕâÊÇ java.util.Arrays µÄÄÚ²¿Àà,¶ø²»ÊÇ java.util.ArrayList
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
¼Ì³Ð AbstractList ÖÐ¶Ô add¡¢remove¡¢set ·½·¨ÊÇÖ±½ÓÅ×Òì³£µÄ,Ò²¾ÍÊÇ˵Èç¹û¼Ì³ÐµÄ×ÓÀàûÓÐÈ¥ÖØдÕâЩ·½·¨,ÄÇô×ÓÀàµÄʵÀýÈ¥µ÷ÓÃÕâЩ·½·¨ÊÇ»áÖ±½ÓÅ×Òì³£µÄ¡£
ÏÂÃæÊÇAbstractListÖз½·¨µÄ¶¨Òå,ÎÒÃÇ¿ÉÒÔ¿´µ½¾ßÌåÅ׳öµÄÒì³£:
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
public E set(int index, E element) {
throw new UnsupportedOperationException();
}
ËäÈ» set ·½·¨Ò²Å׳öÁËÒ»³¡,µ«ÊÇÓÉÓÚ ÄÚ²¿Àà ArrayList ÖØдÁË set ·½·¨,ËùÒÔÖ§³ÖÆä¿ÉÒÔ¶ÔÔªËؽøÐÐÐ޸ġ£
Java ÖеĻù´¡Êý¾ÝÀàÐÍ(byte,short,int,long,float,double,boolean)ÊDz»Ö§³ÖʹÓà Arrays.asList ·½·¨È¥×ª»»µÄ
Collection ºÍ Collections ¶¼ÊÇλÓÚ java.util
°üϵÄÀà
Collection ÊǼ¯ºÏÀàµÄ¸¸Àà,ËüÊÇÒ»¸ö¶¥¼¶½Ó¿Ú,´ó²¿·Ö³éÏóÀà±ÈÈç˵ AbstractList
¡¢AbstractSet
¶¼¼Ì³ÐÁË Collection Àà,Collection ÀàÖ»¶¨ÒåÒ»½Ú±ê×¼·½·¨±ÈÈç˵ add¡¢remove¡¢set¡¢equals µÈ,¾ßÌåµÄ·½·¨ÓɳéÏóÀà»òÕßʵÏÖÀàȥʵÏÖ¡£
Collections ÊǼ¯ºÏÀàµÄ¹¤¾ßÀà,Collections ÌṩÁËһЩ¹¤¾ßÀàµÄ»ù±¾Ê¹ÓÃ
Collections.synchronizedList
¡¢ Collections.synchronizedMap
µÈÓкܶàÓ÷¨,¶ÁÕß¿ÉÒÔ·ÔÄ Collections µÄÔ´Âë²é¿´,Collections ²»ÄܽøÐÐʵÀý»¯,ËùÒÔ Collections Öеķ½·¨¶¼ÊÇÓÉ Collections.·½·¨
Ö±½Óµ÷Óá£
fail-fast
ÊÇ Java ÖеÄÒ»ÖÖ¿ìËÙʧ°Ü
»úÖÆ,java.util °üÏÂËùÓеļ¯ºÏ¶¼ÊÇ¿ìËÙʧ°ÜµÄ,¿ìËÙʧ°Ü»áÅ׳ö ConcurrentModificationException
Òì³£,fail-fast Äã¿ÉÒÔ°ÑËüÀí½âΪһÖÖ¿ìËÙ¼ì²â»úÖÆ,ËüÖ»ÄÜÓÃÀ´¼ì²â´íÎó,²»»á¶Ô´íÎó½øÐлָ´,fail-fast ²»Ò»¶¨Ö»ÔÚ¶àÏß³Ì
»·¾³Ï´æÔÚ,ArrayList Ò²»áÅ׳öÕâ¸öÒì³£,Ö÷ÒªÔÒòÊÇÓÉÓÚ modCount ²»µÈÓÚ expectedModCount¡£
fail-safe
ÊÇ Java ÖеÄÒ»ÖÖ °²È«Ê§°Ü
»úÖÆ,Ëü±íʾµÄÊÇÔÚ±éÀúʱ²»ÊÇÖ±½ÓÔÚÔ¼¯ºÏÉϽøÐзÃÎÊ,¶øÊÇÏȸ´ÖÆÔÓм¯ºÏÄÚÈÝ,ÔÚ¿½±´µÄ¼¯ºÏÉϽøÐбéÀú¡£ ÓÉÓÚµü´úʱÊǶÔÔ¼¯ºÏµÄ¿½±´½øÐбéÀú,ËùÒÔÔÚ±éÀú¹ý³ÌÖжÔÔ¼¯ºÏËù×÷µÄÐ޸IJ¢²»Äܱ»µü´úÆ÷¼ì²âµ½,ËùÒÔ²»»á´¥·¢ ConcurrentModificationException¡£java.util.concurrent
°üϵÄÈÝÆ÷¶¼ÊÇ°²È«Ê§°ÜµÄ,¿ÉÒÔÔÚ¶àÏß³ÌÌõ¼þÏÂʹÓÃ,²¢·¢Ð޸ġ£
ÕâÒ²ÊÇÒ»µÀÀÏÉú³£Ì¸µÄÎÊÌâÁË
ArrayList¡¢LinkedList¡¢Vector ¶¼ÊÇλÓÚ java.util
°üÏµĹ¤¾ßÀà,ËüÃǶ¼ÊµÏÖÁË List ½Ó¿Ú¡£
Collections.synchronizedList
;ArrayList ÔÚÀ©ÈÝʱ»áÔö¼Ó 50% µÄÈÝÁ¿¡£Collections.synchronizedList
synchronized
Ëø,ËùÒÔËüµÄÔöɾ¡¢±éÀúЧÂʶ¼ºÜµÍ¡£Vector ÔÚÀ©ÈÝʱ,ËüµÄÈÝÁ¿»áÔö¼ÓÒ»±¶¡£Exception ·ºÖ¸µÄÊÇ Òì³£
,Exception Ö÷Òª·ÖΪÁ½ÖÖÒì³£,Ò»ÖÖÊDZàÒëÆÚ³öÏÖµÄÒì³£,³ÆΪ checkedException
,Ò»ÖÖÊdzÌÐòÔËÐÐÆÚ¼ä³öÏÖµÄÒì³£,³ÆΪ uncheckedException
,³£¼ûµÄ checkedException ÓÐ IOException
,uncheckedException ͳ³ÆΪ RuntimeException
,³£¼ûµÄ RuntimeException Ö÷ÒªÓÐNullPointerException
¡¢ IllegalArgumentException
¡¢ArrayIndexOutofBoundException
µÈ,Exception ¿ÉÒÔ±»²¶»ñ¡£
Error ÊÇÖ¸³ÌÐòÔËÐйý³ÌÖгöÏֵĴíÎó,ͨ³£Çé¿öÏ»áÔì³É³ÌÐòµÄ±ÀÀ£,Error ͨ³£ÊDz»¿É»Ö¸´µÄ,Error ²»Äܱ»²¶»ñ¡£
Ïêϸ¿ÉÒԲο¼ÕâƪÎÄÕ ¿´ÍêÕâƪ Exception ºÍ Error ,ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË
String ÌØÖ¸µÄÊÇ Java ÖеÄ×Ö·û´®,String ÀàλÓÚ java.lang
°üÏÂ,String ÀàÊÇÓÉ final ÐÞÊεÄ,String ×Ö·û´®Ò»µ©´´½¨¾Í²»Äܱ»ÐÞ¸Ä,ÈÎºÎ¶Ô String ½øÐÐÐ޸ĵIJÙ×÷¶¼Ï൱ÓÚÖØд´½¨ÁËÒ»¸ö×Ö·û´®¡£String ×Ö·û´®µÄµ×²ãʹÓà StringBuilder À´ÊµÏÖµÄ
StringBuilder λÓÚ java.util
°üÏÂ,StringBuilder ÊÇÒ»·ÇḬ̈߳²È«µÄÈÝÆ÷,StringBuilder µÄ append ·½·¨³£ÓÃÓÚ×Ö·û´®Æ´½Ó,ËüµÄÆ´½ÓЧÂÊÒª±È String ÖÐ +
ºÅµÄÆ´½ÓЧÂʸߡ£StringBuilder Ò»°ã²»ÓÃÓÚ²¢·¢»·¾³
StringBuffer λÓÚ java.util
°üÏÂ,StringBuffer ÊÇÒ»¸öḬ̈߳²È«µÄÈÝÆ÷,¶àÏ̳߳¡¾°ÏÂÒ»°ãʹÓà StringBuffer ÓÃ×÷×Ö·û´®µÄÆ´½Ó
StringBuilder ºÍ StringBuffer ¶¼ÊǼ̳ÐÓÚAbstractStringBuilder Àà,AbstractStringBuilder ÀàʵÏÖÁË StringBuffer ºÍ StringBuilder µÄ³£¹æ²Ù×÷¡£
ÉîÈëÀí½â¿ÉÒԲο¼Ò»ÏÂÕâƪÎÄÕ ÉîÈëÀí½â String¡¢StringBuilder ºÍ StringBuffer
´úÀíÒ»°ã·ÖΪ¾²Ì¬´úÀí
ºÍ ¶¯Ì¬´úÀí
,ËüÃǶ¼ÊÇ´úÀíģʽµÄÒ»ÖÖÓ¦ÓÃ,¾²Ì¬´úÀíÖ¸µÄÊÇÔÚ³ÌÐòÔËÐÐÇ°ÒѾ±àÒëºÃ,³ÌÐòÖªµÀÓÉËÀ´Ö´ÐдúÀí·½·¨¡£
¶ø¶¯Ì¬´úÀíÖ»ÓÐÔÚ³ÌÐòÔËÐÐÆÚ¼ä²ÅÄÜÈ·¶¨,Ïà±ÈÓÚ¾²Ì¬´úÀí, ¶¯Ì¬´úÀíµÄÓÅÊÆÔÚÓÚ¿ÉÒԺܷ½±ãµÄ¶Ô´úÀíÀàµÄº¯Êý½øÐÐͳһµÄ´¦Àí,¶ø²»ÓÃÐÞ¸Äÿ¸ö´úÀíÀàÖеķ½·¨¡£¿ÉÒÔ˵¶¯Ì¬´úÀíÊÇ»ùÓÚ ·´Éä
ʵÏֵġ£Í¨¹ý·´ÉäÎÒÃÇ¿ÉÒÔÖ±½Ó²Ù×÷Àà»òÕ߶ÔÏó,±ÈÈç»ñÈ¡ÀàµÄ¶¨Òå,»ñÈ¡ÉùÃ÷µÄÊôÐԺͷ½·¨,µ÷Ó÷½·¨,ÔÚÔËÐÐʱ¿ÉÒÔÐÞ¸ÄÀàµÄ¶¨Òå¡£
¶¯Ì¬´úÀíÊÇÒ»ÖÖÔÚÔËÐÐʱ¹¹½¨´úÀí¡¢¶¯Ì¬´¦Àí·½·¨µ÷ÓõĻúÖÆ¡£¶¯Ì¬´úÀíµÄʵÏÖ·½Ê½Óкܶà,Java ÌṩµÄ´úÀí±»³ÆΪ JDK ¶¯Ì¬´úÀí
,JDK ¶¯Ì¬´úÀíÊÇ»ùÓÚÀàµÄ¼Ì³Ð¡£
Àí½â¶¯Ì¬´úÀí¿ÉÒԲο¼ÕâƪÎÄÕ ¶¯Ì¬´úÀíÉîÈëÀí½â
¶¯Ì¬´úÀíµÄʵÏÖ·½Ê½ÎÒ¸øÄãÂÞÁÐËÄÖÖ,·Ö±ðÊÇ
Javassist
ÊÇÔÚ Java Öбà¼×Ö½ÚÂëµÄÀà¿â;Ëüʹ Java ³ÌÐòÄܹ»ÔÚÔËÐÐʱ¶¨ÒåÒ»¸öÐÂÀà, ²¢ÔÚ JVM ¼ÓÔØʱÐÞ¸ÄÀàÎļþ¡£¹ØÓÚÕâËÄÖÖ×Ö½ÚÂëµÄʵÏÖ¿ÉÒԲο¼ ¶¯Ì¬´úÀí¾¹È»Èç´Ë¼òµ¥!
Serialization ±íʾµÄÊÇÐòÁл¯,ʵÏÖÐòÁл¯ºÍ·´ÐòÁл¯µÄ¶ÔÏó±ØÐëʵÏÖ serializable
½Ó¿Ú,ÐòÁл¯Êǽ«¶ÔÏó±ä³É×Ö½ÚÁ÷,´æ´¢µ½´ÅÅÌ»òÍøÂçÖС£·´ÐòÁл¯ÊÇÐòÁл¯µÄ·´¹ý³Ì¡£
ÎÒÔÚѧµ½ÐòÁл¯µÄʱºò¾Í¾³£ÓиöÒÉÎÊ,Ϊʲô¶ÔÏóÐèÒªÐòÁл¯ÄØ?
ΪÁËÊý¾Ý´«ÊäµÄÄ¿µÄ,ÒòΪÕâ¸ö¶ÔÏóÔÚÄã´úÂëÖÐÊǶÔÏó¸ñʽ,µ«ÊÇËüÔÚ´«ÊäµÄ¹ý³ÌÖпɲ»ÊǶÔÏó¸ñʽ,ËùÒÔ,µ±ÆäËû½ø³Ì»òÕßÆäËû»úÆ÷ÏëÒªºÍÄãͨÐÅʱ,ÄãÃÇË«·½»á·¢Ë͸÷ÖÖÀàÐ͵ÄÊý¾Ý,Ò²ÓпÉÄÜ»á°ÑÕâ¸ö¶ÔÏó·¢Ë͹ýÈ¥,ËùÒÔÕâ¸ö¶ÔÏóÊƱػáת»»ÎªÄܹ»ÔÚÍøÂçÖлòÕß´ÅÅÌÖÐÄܹ»Ê¶±ðµÄ¸ñʽ,Ò²¾ÍÊǶþ½øÖÆ¡£
ÕâÒ²¾ÍÊÇ˵,·¢ËÍ·½ÐèÒª°ÑÕâ¸ö Java ¶ÔÏóת»»Îª×Ö½ÚÐòÁÐ,²ÅÄÜÔÚÍøÂçÉÏ´«ËÍ;½ÓÊÕ·½ÔòÐèÒª°Ñ×Ö½ÚÐòÁÐÔÙ»Ö¸´Îª Java ¶ÔÏó,ÕâÒ²ÊÇ Deserialization ½Ó¿ÚËù×öµÄ¹¤×÷¡£
int ºÍ Integer Çø±ð¿É¾ÍÌ«¶àÁË
ÕûÐÍ
,Ò»¸ö int Õ¼ 4 ×Ö½Ú,Ò²¾ÍÊÇ 32 λ,int µÄ³õʼֵÊÇĬÈÏÖµÊÇ 0 ,int ÔÚ Java ÄÚ´æÄ£ÐÍÖб»·ÖÅäÔÚÕ»ÖÐ,int ûÓз½·¨¡£×°Ïä
,Integer -> int µÄ¹ý³Ì³ÆΪ ²ðÏä
,Integer »¹ÓÐ IntegerCache ,»á×Ô¶¯»º´æ -128 - 127 ÖеÄÖµÉîÈëÀí½â²ðÏäºÍ×°Ïä¿ÉÒԲο¼ÕâƪÎÄÕ Ïê½â Java ÖеÄ×Ô¶¯×°ÏäÓë²ðÏä
Java I/O ·½Ê½ÓкܶàÖÖ,´«Í³µÄ I/O Ò²³ÆΪ BIO
,Ö÷ÒªÁ÷ÓÐÈçϼ¸ÖÖ¡£
Java I/O °üµÄʵÏֱȽϼòµ¥,µ«ÊÇÈÝÒ׳öÏÖÐÔÄÜÆ¿¾±,´«Í³µÄ I/O ÊÇ»ùÓÚͬ²½×èÈûµÄ¡£
JDK 1.4 Ö®ºóÌṩÁË NIO
,Ò²¾ÍÊÇλÓÚ java.nio
°üÏÂ,ÌṩÁË»ùÓÚ channel¡¢Selector¡¢BufferµÄ³éÏó,¿ÉÒÔ¹¹½¨¶à·¸´Óá¢Í¬²½·Ç×èÈû I/O ³ÌÐò¡£
JDK 1.7 Ö®ºó¶Ô NIO ½øÐÐÁ˽øÒ»²½¸Ä½ø,ÒýÈëÁË Òì²½·Ç×èÈû
µÄ·½Ê½,Ò²±»³ÆΪ AIO(Asynchronous IO)
¡£¿ÉÒÔÓÃÉú»îÖеÄÀý×ÓÀ´ËµÃ÷:ÏîÄ¿¾Àí½»¸øÊÖÏÂÔ±¹¤È¥¸ÄÒ»¸ö bug,ÄÇôÏîÄ¿¾Àí²»»áÒ»Ö±µÈ´ýÔ±¹¤½â¾ö bug,Ëû¿Ï¶¨ÔÚÔ±¹¤½â¾ö bug µÄÆÚ¼ä¸øÆäËûÊÖÏ·ÖÅä bug »òÕß×öÆäËûÊÂÇé,Ô±¹¤½â¾öÍê bug Ö®ºóÔÙ¸æËßÏîÄ¿¾Àí bug ½â¾öÍêÁË¡£
ÉîÈëÀí½â IO ¿ÉÒԲο¼ÕâƪÎÄÕ ÉîÈëÀí½â IO ¡£
Ò»ÕÅ˼άµ¼Í¼Õò³¡
±ÈÈçÈ«¾ÖΨһÐÔ¿ÉÒÔÓà µ¥Àýģʽ
¡£
¿ÉÒÔʹÓà ²ßÂÔģʽ
ÓÅ»¯¹ý¶àµÄ if¡else¡
Öƶ¨±ê×¼Óà ģ°æģʽ
½ÓÊÖÆäËûÈ˵Ĺø,µ«²»Ïë¸ÄÔÀ´µÄÀàÓà ÊÊÅäÆ÷ģʽ
ʹÓà ×éºÏ
¶ø²»ÊǼ̳Ð
ʹÓà װÊÎÆ÷
¿ÉÒÔÖÆ×÷¼ÓÌÇ¡¢¼ÓÄÌÀҵĿ§·È
´úÀí
¿ÉÒÔÓÃÓÚÈκÎÖмäÉÌ¡
ÕâÒ²ÊÇÒ»µÀÀÏÉú³£Ì¸µÄÃæÊÔÌâÁË,Ò»°ã²»»áÈÃÄãÊÖдµ¥Àýģʽ¡£¾ÍËãÊÇÊÖдµÄ»°,Ö»ÐèҪд³ö¹Ø¼ü´úÂëÀ´¾Í¿ÉÒÔÁË¡£ÕâµÀÌâÆäʵÏëÎʵÄÊǵ¥ÀýģʽµÄ¼¸ÖÖʵÏÖ·½Ê½,²¢ÇÒÿÖÖʵÏÖ·½Ê½ÓÐûÓÐʲôÎÊÌâ¡£
Ò»°ã¿ÉÒÔÕâÑù»Ø´ðÏÂ
Èç¹ûÏëÒªÉîÈëÁ˽âÕâµÀÃæÊÔÌâ,¿ÉÒÔ²éÔÄ ÎÒÏòÃæÊÔ¹Ù½²½âÁ˵¥Àýģʽ,Ëû¶ÔÎÒÊúÆðÁË´óÄ´Ö¸
Comparable ¸üÏñÊÇ×ÔÈ»ÅÅÐò
Comparator ¸üÏñÊǶ¨ÖÆÅÅÐò
ͬʱ´æÔÚʱ²ÉÓà Comparator(¶¨ÖÆÅÅÐò)µÄ¹æÔò½øÐбȽϡ£
¶ÔÓÚһЩÆÕͨµÄÊý¾ÝÀàÐÍ(±ÈÈç String, Integer, Double¡),ËüÃÇĬÈÏʵÏÖÁËComparable ½Ó¿Ú,ʵÏÖÁË compareTo ·½·¨,ÎÒÃÇ¿ÉÒÔÖ±½ÓʹÓá£
¶ø¶ÔÓÚһЩ×Ô¶¨ÒåÀà,ËüÃÇ¿ÉÄÜÔÚ²»Í¬Çé¿öÏÂÐèҪʵÏÖ²»Í¬µÄ±È½Ï²ßÂÔ,ÎÒÃÇ¿ÉÒÔд´½¨ Comparator ½Ó¿Ú,È»ºóʹÓÃÌض¨µÄ Comparator ʵÏÖ½øÐбȽϡ£
¹ØÓÚ Comparator ºÍ Comparable µÄÉîÈëÀí½â,¿ÉÒԲο¼ÕâƪÎÄÕ Comparable ºÍ ComparatorµÄÀí½â¡£
Object ÀàÊÇËùÓжÔÏóµÄ¸¸Àà,ËüÀïÃæ°üº¬Ò»Ð©ËùÓжÔÏó¶¼Äܹ»Ê¹Óõķ½·¨
¹ØÓÚ Java ·ºÐͺͲÁ³ý¿´×Åһƪ¾Í¹»ÁË¡£
·´Éä»úÖƾÍÊÇʹ Java ³ÌÐòÔÚÔËÐÐʱ¾ßÓÐ×ÔÊ¡(introspect)
µÄÄÜÁ¦,ͨ¹ý·´ÉäÎÒÃÇ¿ÉÒÔÖ±½Ó²Ù×÷ÀàºÍ¶ÔÏó,±ÈÈç»ñȡij¸öÀàµÄ¶¨Òå,»ñÈ¡ÀàµÄÊôÐԺͷ½·¨,¹¹Ôì·½·¨µÈ¡£
´´½¨ÀàʵÀýµÄÈýÖÖ·½Ê½ÊÇ
ÉîÈëÀí½â·´ÉäµÄÎÄÕÂ,Çë²éÔÄ Ñ§»á·´Éäºó,ÎÒ±»Â¼È¡ÁË!(¸É»õ)
ÎÒÃÇ˵µÄ²»Í¬µÄÒýÓÃÀàÐÍÆäʵ¶¼ÊÇÂß¼ÉϵÄ,¶ø¶ÔÓÚÐéÄâ»úÀ´Ëµ,Ö÷ÒªÌåÏÖµÄÊǶÔÏóµÄ²»Í¬µÄ¿É´ïÐÔ(reachable)
״̬ºÍ¶ÔÀ¬»øÊÕ¼¯(garbage collector)
µÄÓ°Ïì¡£
¿ÉÒÔͨ¹ýÏÂÃæµÄÁ÷³ÌÀ´¶Ô¶ÔÏóµÄÉúÃüÖÜÆÚ×öÒ»¸ö×ܽá
¶ÔÏó±»´´½¨²¢³õʼ»¯,¶ÔÏóÔÚÔËÐÐʱ±»Ê¹ÓÃ,È»ºóÀ뿪¶ÔÏóµÄ×÷ÓÃÓò,¶ÔÏó»á±ä³É²»¿É´ï²¢»á±»À¬»øÊÕ¼¯Æ÷»ØÊÕ¡£Í¼ÖÐÓúìÉ«±êÃ÷µÄÇøÓò±íʾ¶ÔÏó´¦ÓÚÇ¿¿É´ï½×¶Î¡£
JDK1.2 ½éÉÜÁË java.lang.ref
°ü,¶ÔÏóµÄÉúÃüÖÜÆÚÓÐËĸö½×¶Î:Ç¿¿É´ï(Strongly Reachable)
¡¢Èí¿É´ï(Soft Reachable)
¡¢Èõ¿É´ï(Weak Reachable)
¡¢ »ÃÏó¿É´ï(Phantom Reachable)
¡£
Èç¹ûÖ»ÌÖÂÛ·ûºÏÀ¬»ø»ØÊÕÌõ¼þµÄ¶ÔÏó,ÄÇôֻÓÐÈýÖÖ:Èí¿É´ï¡¢Èõ¿É´ïºÍ»ÃÏó¿É´ï¡£
Èí¿É´ï:Èí¿É´ï¾ÍÊÇÎÒÃÇÖ»ÄÜͨ¹ýÈíÒýÓòÅÄÜ·ÃÎʵÄ״̬,Èí¿É´ïµÄ¶ÔÏóÊÇÓÉ SoftReference
ÒýÓõĶÔÏó,²¢ÇÒûÓÐÇ¿ÒýÓõĶÔÏó¡£ÈíÒýÓÃÊÇÓÃÀ´ÃèÊöһЩ»¹ÓÐÓõ«ÊǷDZØÐëµÄ¶ÔÏó¡£À¬»øÊÕ¼¯Æ÷»á¾¡¿ÉÄܳ¤Ê±¼äµÄ±£ÁôÈíÒýÓõĶÔÏó,µ«ÊÇ»áÔÚ·¢Éú OutOfMemoryError
֮ǰ,»ØÊÕÈíÒýÓõĶÔÏó¡£Èç¹û»ØÊÕÍêÈíÒýÓõĶÔÏó,Äڴ滹ÊDz»¹»·ÖÅäµÄ»°,¾Í»áÖ±½ÓÅ׳ö OutOfMemoryError¡£
Èõ¿É´ï:Èõ¿É´ïµÄ¶ÔÏóÊÇ WeakReference
ÒýÓõĶÔÏó¡£À¬»øÊÕ¼¯Æ÷¿ÉÒÔËæʱÊÕ¼¯ÈõÒýÓõĶÔÏó,²»»á³¢ÊÔ±£ÁôÈíÒýÓõĶÔÏó¡£
»ÃÏó¿É´ï:»ÃÏó¿É´ïÊÇÓÉ PhantomReference
ÒýÓõĶÔÏó,»ÃÏó¿É´ï¾ÍÊÇûÓÐÇ¿¡¢Èí¡¢ÈõÒýÓýøÐйØÁª,²¢ÇÒÒѾ±» finalize ¹ýÁË,Ö»ÓлÃÏóÒýÓÃÖ¸ÏòÕâ¸ö¶ÔÏóµÄʱºò¡£
³ý´ËÖ®Íâ,»¹ÓÐÇ¿¿É´ïºÍ²»¿É´ïµÄÁ½ÖÖ¿É´ïÐÔÅжÏÌõ¼þ
²»¿É´ï(unreachable)
:´¦ÓÚ²»¿É´ïµÄ¶ÔÏó¾ÍÒâζ×ŶÔÏó¿ÉÒÔ±»Çå³ýÁË¡£ÏÂÃæÊÇÒ»¸ö²»Í¬¿É´ïÐÔ״̬µÄת»»Í¼
ÅжϿɴïÐÔÌõ¼þ,Ò²ÊÇ JVM À¬»øÊÕ¼¯Æ÷¾ö¶¨ÈçºÎ´¦Àí¶ÔÏóµÄÒ»²¿·Ö¿¼ÂÇÒòËØ¡£
ËùÓеĶÔÏó¿É´ïÐÔÒýÓö¼ÊÇ java.lang.ref.Reference
µÄ×ÓÀà,ËüÀïÃæÓÐÒ»¸öget()
·½·¨,·µ»ØÒýÓöÔÏó¡£ Èç¹ûÒÑͨ¹ý³ÌÐò»òÀ¬»øÊÕ¼¯Æ÷Çå³ýÁË´ËÒýÓöÔÏó,Ôò´Ë·½·¨·µ»Ø null ¡£Ò²¾ÍÊÇ˵,³ýÁË»ÃÏóÒýÓÃÍâ,ÈíÒýÓúÍÈõÒýÓö¼ÊÇ¿ÉÒԵõ½¶ÔÏóµÄ¡£¶øÇÒÕâЩ¶ÔÏó¿ÉÒÔÈËΪÕü¾È
,±äΪǿÒýÓÃ,ÀýÈç°Ñ this ¹Ø¼ü×Ö¸³Öµ¸ø¶ÔÏó,Ö»ÒªÖØкÍÒýÓÃÁ´ÉϵÄÈÎÒâÒ»¸ö¶ÔÏó½¨Á¢¹ØÁª¼´¿É¡£
ÉîÈëÀí½âÒýÓÃÎÊÌâ,¿ÉÒÔ¿´¿´ÕâһƪÎÄÕ ÉîÈëÀí½â¸÷ÖÖÒýÓÃÎÊÌâ¡£
ÕâÈýÕß¿ÉÒÔ˵ÊÇûÓÐÈκιØÁªÖ®´¦,ÎÒÃÇÉÏÃæ̸µ½ÁË,final ¿ÉÒÔÓÃÀ´ÐÞÊÎÀà¡¢±äÁ¿ºÍ·½·¨,¿ÉÒԲο¼ÉÏÃæ final µÄÄǵÀÃæÊÔÌâ¡£
finally ÊÇÒ»¸ö¹Ø¼ü×Ö,Ëü¾³£ºÍ try ¿éÒ»ÆðʹÓÃ,ÓÃÓÚÒì³£´¦Àí¡£Ê¹Óà try¡finally µÄ´úÂë¿éÖÖ,finally ²¿·ÖµÄ´úÂëÒ»¶¨»á±»Ö´ÐÐ,ËùÒÔÎÒÃǾ³£ÔÚ finally ·½·¨ÖÐÓÃÓÚ×ÊÔ´µÄ¹Ø±Õ²Ù×÷¡£
JDK1.7 ÖÐ,ÍƼöʹÓà try-with-resources
ÓÅÑŵĹرÕ×ÊÔ´,ËüÖ±½ÓʹÓà try(){} ½øÐÐ×ÊÔ´µÄ¹Ø±Õ¼´¿É,¾Í²»ÓÃд finally ¹Ø¼ü×ÖÁË¡£
finalize ÊÇ Object ¶ÔÏóÖеÄÒ»¸ö·½·¨,ÓÃÓÚ¶ÔÏóµÄ»ØÊÕ·½·¨,Õâ¸ö·½·¨ÎÒÃÇÒ»°ã²»ÍƼöʹÓÃ,finalize ÊǺÍÀ¬»ø»ØÊÕ¹ØÁªÔÚÒ»ÆðµÄ,ÔÚ Java 9 ÖÐ,½« finalize ±ê¼ÇΪÁË deprecated
, Èç¹ûûÓÐÌرðÔÒò,²»ÒªÊµÏÖ finalize ·½·¨,Ò²²»ÒªÖ¸ÍûËûÀ´½øÐÐÀ¬»ø»ØÊÕ¡£
ÉîÈëÀí½â final¡¢finally ºÍ finalize ,¿ÉÒÔ¿´¿´Õâһƪ ¿´ÍêÕâƪ final¡¢finally ºÍ finalize ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË¡£
ÔÚ Java ÖÐ,¿ÉÒÔ½«Ò»¸öÀàµÄ¶¨Òå·ÅÔÚÁíÍâÒ»¸öÀàµÄ¶¨ÒåÄÚ²¿,Õâ¾ÍÊÇÄÚ²¿Àà¡£ÄÚ²¿Àà±¾Éí¾ÍÊÇÀàµÄÒ»¸öÊôÐÔ,ÓëÆäËûÊôÐÔ¶¨Ò巽ʽһÖ¡£
ÄÚ²¿ÀàµÄ·ÖÀàÒ»°ãÖ÷ÒªÓÐËÄÖÖ
¾²Ì¬ÄÚ²¿Àà
¾ÍÊǶ¨ÒåÔÚÀàÄÚ²¿µÄ¾²Ì¬Àà,¾²Ì¬ÄÚ²¿Àà¿ÉÒÔ·ÃÎÊÍⲿÀàËùÓеľ²Ì¬±äÁ¿,¶ø²»¿É·ÃÎÊÍⲿÀàµÄ·Ç¾²Ì¬±äÁ¿;
³ÉÔ±ÄÚ²¿Àà
¾ÍÊǶ¨ÒåÔÚÀàÄÚ²¿,³ÉԱλÖÃÉϵķǾ²Ì¬Àà,¾ÍÊdzÉÔ±ÄÚ²¿Àà¡£³ÉÔ±ÄÚ²¿Àà¿ÉÒÔ·ÃÎÊÍⲿÀàËùÓеıäÁ¿ºÍ·½·¨,°üÀ¨¾²Ì¬ºÍ·Ç¾²Ì¬,˽Óк͹«ÓС£
¶¨ÒåÔÚ·½·¨ÖеÄÄÚ²¿Àà,¾ÍÊǾֲ¿ÄÚ²¿Àà
¡£¶¨ÒåÔÚʵÀý·½·¨Öеľֲ¿Àà¿ÉÒÔ·ÃÎÊÍⲿÀàµÄËùÓбäÁ¿ºÍ·½·¨,¶¨ÒåÔÚ¾²Ì¬·½·¨Öеľֲ¿ÀàÖ»ÄÜ·ÃÎÊÍⲿÀàµÄ¾²Ì¬±äÁ¿ºÍ·½·¨¡£
ÄäÃûÄÚ²¿Àà
¾ÍÊÇûÓÐÃû×ÖµÄÄÚ²¿Àà,³ýÁËûÓÐÃû×Ö,ÄäÃûÄÚ²¿À໹ÓÐÒÔÏÂÌصã:
Ò»¸öJava ³ÌÐòÒª¾¹ý±àд¡¢±àÒë¡¢ÔËÐÐÈý¸ö²½Öè,ÆäÖбàд´úÂë²»ÔÚÎÒÃÇÌÖÂ۵ķ¶Î§Ö®ÄÚ,ÄÇôÎÒÃǵÄÖصã×ÔÈ»¾Í·ÅÔÚÁ˱àÒë
ºÍ ÔËÐÐ
ÕâÁ½¸ö½×¶Î,ÓÉÓÚ±àÒëºÍÔËÐн׶ιý³ÌÏ൱·±Ëö,ÏÂÃæ¾ÍÎÒµÄÀí½âÀ´½øÐнâÊÍ:
Java ³ÌÐò´ÓÔ´Îļþ´´½¨µ½³ÌÐòÔËÐÐÒª¾¹ýÁ½´ó²½Öè:
1¡¢±àÒëʱÆÚÊÇÓɱàÒëÆ÷½«Ô´Îļþ±àÒë³É×Ö½ÚÂëµÄ¹ý³Ì
2¡¢×Ö½ÚÂëÎļþÓÉJavaÐéÄâ»ú½âÊÍÖ´ÐÐ
°ó¶¨¾ÍÊÇÒ»¸ö·½·¨µÄµ÷ÓÃÓëµ÷ÓÃÕâ¸ö·½·¨µÄÀàÁ¬½ÓÔÚÒ»ÆðµÄ¹ý³Ì±»³ÆΪ°ó¶¨¡£
°ó¶¨Ö÷Òª·ÖΪÁ½ÖÖ:
¾²Ì¬°ó¶¨ ºÍ ¶¯Ì¬°ó¶¨
°ó¶¨µÄÆäËû½Ð·¨
¾²Ì¬°ó¶¨ == Ç°ÆÚ°ó¶¨ == ±àÒëʱ°ó¶¨
¶¯Ì¬°ó¶¨ == ºóÆÚ°ó¶¨ == ÔËÐÐʱ°ó¶¨
ΪÁË·½±ãÇø·Ö: ÏÂÃæͳһ³ÆºôΪ¾²Ì¬°ó¶¨ºÍ¶¯Ì¬°ó¶¨
ÔÚ³ÌÐòÔËÐÐÇ°,Ò²¾ÍÊDZàÒëʱÆÚ JVM ¾ÍÄܹ»È·¶¨·½·¨ÓÉ˵÷ÓÃ,ÕâÖÖ»úÖƳÆΪ¾²Ì¬°ó¶¨
ʶ±ð¾²Ì¬°ó¶¨µÄÈý¸ö¹Ø¼ü×ÖÒÔ¼°¸÷×ÔµÄÀí½â
Èç¹ûÒ»¸ö·½·¨ÓÉ private¡¢static¡¢final ÈÎÒâÒ»¸ö¹Ø¼ü×ÖËùÐÞÊÎ,ÄÇôÕâ¸ö·½·¨ÊÇÇ°Æڰ󶨵Ä
¹¹Ôì·½·¨Ò²ÊÇÇ°ÆÚ°ó¶¨
private:private ¹Ø¼ü×ÖÊÇ˽ÓеÄÒâ˼,Èç¹û±» private ÐÞÊεķ½·¨ÊÇÎÞ·¨Óɱ¾ÀàÖ®ÍâµÄÆäËûÀàËùµ÷ÓõÄ,Ò²¾ÍÊDZ¾ÀàËùÌØÓеķ½·¨,ËùÒÔÒ²¾ÍÓɱàÒëÆ÷ʶ±ð´Ë·½·¨ÊÇÊôÓÚÄĸöÀàµÄ
public class Person {
private String talk;
private String canTalk(){
return talk;
}
}
class Animal{
public static void main(String[] args) {
Person p = new Person();
// private ÐÞÊεķ½·¨ÊÇPersonÀà¶ÀÓеÄ,ËùÒÔAnimalÀàÎÞ·¨·ÃÎÊ(¶¯Îï±¾À´¾Í²»ÄÜ˵»°)
// p.canTalk();
}
}
final:final ÐÞÊεķ½·¨²»Äܱ»ÖØд,µ«ÊÇ¿ÉÒÔÓÉ×ÓÀà½øÐе÷ÓÃ,Èç¹û½«·½·¨ÉùÃ÷Ϊ final ¿ÉÒÔÓÐЧµÄ¹Ø±Õ¶¯Ì¬°ó¶¨
public class Fruit {
private String fruitName;
final String eatingFruit(String name){
System.out.println("eating " + name);
return fruitName;
}
}
class Apple extends Fruit{
// ²»ÄÜÖØдfinal·½·¨,eatingFruit·½·¨Ö»ÊôÓÚFruitÀà,AppleÀàÎÞ·¨µ÷ÓÃ
// String eatingFruit(String name){
// super.eatingFruit(name);
// }
String eatingApple(String name){
return super.eatingFruit(name);
}
}
static: static ÐÞÊεķ½·¨±È½ÏÌØÊâ,²»ÓÃͨ¹ý new ³öij¸öÀàÀ´µ÷ÓÃ,ÓÉÀàÃû.±äÁ¿Ãû
Ö±½Óµ÷Óø÷½·¨,Õâ¸ö¾ÍºÜ¹Ø¼üÁË,new ºÜ¹Ø¼ü,Ò²¿ÉÒÔÈÏΪÊÇ¿ªÆô¶à̬µÄµ¼»ðË÷,¶øÓÉÀàÃû.±äÁ¿ÃûÖ±½Óµ÷ÓõĻ°,´ËʱµÄÀàÃûÊÇÈ·¶¨µÄ,²¢²»»á²úÉú¶à̬,ÈçÏ´úÂë:
public class SuperClass {
public static void sayHello(){
System.out.println("ÓÉ superClass ˵ÄãºÃ");
}
}
public class SubClass extends SuperClass{
public static void sayHello(){
System.out.println("ÓÉ SubClass ˵ÄãºÃ");
}
public static void main(String[] args) {
SuperClass.sayHello();
SubClass.sayHello();
}
}
SubClass ¼Ì³Ð SuperClass ºó,ÔÚ
ÊÇÎÞ·¨ÖØд sayHello ·½·¨µÄ,Ò²¾ÍÊÇ˵ sayHello() ·½·¨ÊǶÔ×ÓÀàÒþ²ØµÄ,µ«ÊÇÄã¿ÉÒÔ±àд×Ô¼ºµÄ sayHello() ·½·¨,Ò²¾ÍÊÇ×ÓÀà SubClass µÄsayHello() ·½·¨,Óɴ˿ɼû,·½·¨ÓÉ static ¹Ø¼ü´ÊËùÐÞÊÎ,Ò²ÊDZàÒëʱ°ó¶¨
ÔÚÔËÐÐʱ¸ù¾Ý¾ßÌå¶ÔÏóµÄÀàÐͽøÐаó¶¨
³ýÁËÓÉ private¡¢final¡¢static ËùÐÞÊεķ½·¨ºÍ¹¹Ôì·½·¨Íâ,JVM ÔÚÔËÐÐÆÚ¼ä¾ö¶¨·½·¨ÓÉÄĸö¶ÔÏóµ÷ÓõĹý³Ì³ÆΪ¶¯Ì¬°ó¶¨
Èç¹û°Ñ±àÒë¡¢ÔËÐп´³ÉÒ»Ìõʱ¼äÏߵĻ°,ÔÚÔËÐÐÇ°±ØÐëÒª½øÐгÌÐòµÄ±àÒë¹ý³Ì,ÄÇôÔÚ±àÒëÆÚ½øÐеİó¶¨ÊÇÇ°ÆÚ°ó¶¨,ÔÚ³ÌÐòÔËÐÐÁË,·¢ÉúµÄ°ó¶¨¾ÍÊǺóÆڰ󶨡£
public class Father {
void drinkMilk(){
System.out.println("¸¸Ç×ϲ»¶ºÈÅ£ÄÌ");
}
}
public class Son extends Father{
@Override
void drinkMilk() {
System.out.println("¶ù×Óϲ»¶ºÈÅ£ÄÌ");
}
public static void main(String[] args) {
Father son = new Son();
son.drinkMilk();
}
}
Son Àà¼Ì³Ð Father Àà,²¢ÖØдÁ˸¸ÀàµÄ dringMilk() ·½·¨,ÔÚÊä³ö½á¹ûµÃ³öµÄÊǶù×Óϲ»¶ºÈÅ£ÄÌ¡£ÄÇôÉÏÃæµÄ°ó¶¨·½Ê½ÊÇʲôÄØ?
ÉÏÃæµÄ°ó¶¨·½Ê½³Æ֮Ϊ¶¯Ì¬°ó¶¨
,ÒòΪÔÚÄã±àд Father son = new Son() µÄʱºò,±àÒëÆ÷²¢²»ÖªµÀ son ¶ÔÏóÕæÕýÒýÓõÄÊÇË,ÔÚ³ÌÐòÔËÐÐʱÆÚ²ÅÖªµÀ,Õâ¸ö son ÊÇÒ»¸ö Father ÀàµÄ¶ÔÏó,µ«ÊÇÈ´Ö¸ÏòÁË Son µÄÒýÓÃ,ÕâÖÖ¸ÅÄî³Æ֮Ϊ¶à̬,ÄÇôÎÒÃǾÍÄܹ»ÕûÀí³öÀ´¶à̬µÄÈý¸öÔÔò:
¼Ì³Ð
ÖØд
¸¸ÀàÒýÓÃÖ¸Ïò×ÓÀà¶ÔÏó
Ò²¾ÍÊÇ˵,ÔÚ Father son = new Son() ,´¥·¢Á˶¯Ì¬°ó¶¨»úÖÆ¡£
¶¯Ì¬°ó¶¨µÄ¹ý³Ì
¾²Ì¬°ó¶¨
¾²Ì¬°ó¶¨ÔÚ±àÒëʱÆÚ´¥·¢,ÄÇôËüµÄÖ÷ÒªÌصãÊÇ
1¡¢±àÒëÆÚ´¥·¢,Äܹ»ÌáÔçÖªµÀ´úÂë´íÎó
2¡¢Ìá¸ß³ÌÐòÔËÐÐЧÂÊ
¶¯Ì¬°ó¶¨
1¡¢Ê¹Óö¯Ì¬°ó¶¨µÄÇ°ÌáÌõ¼þÄܹ»Ìá¸ß´úÂëµÄ¿ÉÓÃÐÔ,ʹ´úÂë¸ü¼ÓÁé»î¡£
2¡¢¶à̬ÊÇÉè¼ÆģʽµÄ»ù´¡,Äܹ»½µµÍñîºÏÐÔ¡£
Óï·¨ÌÇÖ¸µÄÊǼÆËã»úÓïÑÔÖÐÌí¼ÓµÄijÖÖÓï·¨,ÕâÖÖÓï·¨¶ÔÓïÑԵŦÄܲ¢Ã»ÓÐÓ°Ïì,µ«ÊǸü·½±ã³ÌÐòԱʹÓá£ÒòΪ Java ´úÂëÐèÒªÔËÐÐÔÚ JVM ÖÐ,JVM ÊDz¢²»Ö§³ÖÓï·¨ÌǵÄ,Óï·¨ÌÇÔÚ³ÌÐò±àÒë½×¶Î¾Í»á±»»¹Ô³É¼òµ¥µÄ»ù´¡Óï·¨½á¹¹,Õâ¸ö¹ý³Ì¾ÍÊǽâÓï·¨ÌÇ
¡£
ÏÂÃæÎÒ¾ÍÁгöÀ´ Java ÖÐÓÐÄÄЩÓï·¨ÌÇ
·ºÐÍ:·ºÐÍÊÇÒ»ÖÖÓï·¨ÌÇ¡£ÔÚ JDK1.5 ÖÐ,ÒýÈëÁË·ºÐÍ»úÖÆ,µ«ÊÇ·ºÐÍ»úÖƵı¾ÉíÊÇͨ¹ýÀàÐͲÁ³ý
À´ÊµÏÖµÄ,ÔÚ JVM ÖÐûÓзºÐÍ,Ö»ÓÐÆÕͨÀàÐͺÍÆÕͨ·½·¨,·ºÐÍÀàµÄÀàÐͲÎÊý,ÔÚ±àÒëʱ¶¼»á±»²Á³ý¡£
×Ô¶¯²ðÏäºÍ×Ô¶¯×°Ïä:×Ô¶¯²ðÏäºÍ×Ô¶¯×°ÏäÊÇÒ»ÖÖÓï·¨ÌÇ,Ëü˵µÄÊÇ°ËÖÖ»ù±¾Êý¾ÝÀàÐ͵İü×°ÀàºÍÆä»ù±¾Êý¾ÝÀàÐÍÖ®¼äµÄ×Ô¶¯×ª»»¡£¼òµ¥µÄ˵,×°Ïä¾ÍÊÇ×Ô¶¯½«»ù±¾Êý¾ÝÀàÐÍת»»Îª°ü×°Æ÷
ÀàÐÍ;²ðÏä¾ÍÊÇ×Ô¶¯½«°ü×°Æ÷ÀàÐÍת»»Îª»ù±¾Êý¾ÝÀàÐÍ¡£
ÄÚ²¿Àà:ÄÚ²¿ÀàÆäʵҲÊÇÒ»¸öÓï·¨ÌÇ,ÒòΪÆäÖ»ÊÇÒ»¸ö±àÒëʱµÄ¸ÅÄî,Ò»µ©±àÒëÍê³É,±àÒëÆ÷¾Í»áΪÄÚ²¿ÀàÉú³ÉÒ»¸öµ¥¶ÀµÄclass Îļþ,ÃûΪ outer$innter.class¡£
±ä³¤²ÎÊý:±ä³¤²ÎÊýÒ²ÊÇÒ»¸ö±È½ÏСÖÚµÄÓ÷¨,Ëùν±ä³¤²ÎÊý,¾ÍÊÇ·½·¨¿ÉÒÔ½ÓÊܳ¤¶È²»¶¨È·¶¨µÄ²ÎÊý¡£Ò»°ãÎÒÃÇ¿ª·¢²»»áʹÓõ½±ä³¤²ÎÊý,¶øÇұ䳤²ÎÊýÒ²²»ÍƼöʹÓÃ,Ëü»áʹÎÒÃǵijÌÐò±äµÄÄÑÒÔ´¦Àí¡£
ÔöÇ¿ for Ñ»·:ÔöÇ¿ for Ñ»·ÓëÆÕͨ for Ñ»·Ïà±È,¹¦ÄܸüÇ¿²¢ÇÒ´úÂë¸ü¼Ó¼ò½à,ÄãÎÞÐèÖªµÀ±éÀúµÄ´ÎÊýºÍÊý×éµÄË÷Òý¼´¿É½øÐбéÀú;ÔöÇ¿ for Ñ»·µÄ¶ÔÏóҪôÊÇÒ»¸öÊý×é,ҪôʵÏÖÁË Iterable ½Ó¿Ú¡£Õâ¸öÓï·¨ÌÇÖ÷ÒªÓÃÀ´¶ÔÊý×é»òÕß¼¯ºÏ½øÐбéÀú,ÆäÔÚÑ»·¹ý³ÌÖв»Äܸı伯ºÏµÄ´óС¡£
Switch Ö§³Ö×Ö·û´®ºÍö¾Ù:switch
¹Ø¼ü×ÖÔÉúÖ»ÄÜÖ§³ÖÕûÊý
ÀàÐÍ¡£Èç¹û switch ºóÃæÊÇ String ÀàÐ͵Ļ°,±àÒëÆ÷»á½«Æäת»»³É String µÄhashCode
µÄÖµ,ËùÒÔÆäʵ switch Óï·¨±È½ÏµÄÊÇ String µÄ hashCode ¡£
Ìõ¼þ±àÒë:Ò»°ãÇé¿öÏÂ,Ô´³ÌÐòÖÐËùÓеÄÐж¼²Î¼Ó±àÒë¡£µ«ÓÐʱϣÍû¶ÔÆäÖÐÒ»²¿·ÖÄÚÈÝÖ»ÔÚÂú×ãÒ»¶¨Ìõ¼þϲŽøÐбàÒë,¼´¶ÔÒ»²¿·ÖÄÚÈÝÖ¸¶¨±àÒëÌõ¼þ,Õâ¾ÍÊÇ Ìõ¼þ±àÒë(conditional compile)
¡£
¶ÏÑÔ:Ò²¾ÍÊÇËùνµÄ assert
¹Ø¼ü×Ö,ÊÇ jdk 1.4 ºó¼ÓÈëµÄй¦ÄÜ¡£ËüÖ÷ҪʹÓÃÔÚ´úÂ뿪·¢ºÍ²âÊÔʱÆÚ,ÓÃÓÚ¶ÔijЩ¹Ø¼üÊý¾ÝµÄÅжÏ,Èç¹ûÕâ¸ö¹Ø¼üÊý¾Ý²»ÊÇÄã³ÌÐòËùÔ¤ÆÚµÄÊý¾Ý,³ÌÐò¾ÍÌá³ö¾¯¸æ»òÍ˳ö¡£
try-with-resources :JDK 1.7 ¿ªÊ¼,javaÒýÈëÁË try-with-resources ÉùÃ÷,½« try-catch-finally ¼ò»¯Îª try-catch,ÕâÆäʵÊÇÒ»ÖÖÓï·¨ÌÇ
,ÔÚ±àÒëʱ»á½øÐÐת»¯Îª try-catch-finally Óï¾ä¡£ÐµÄÉùÃ÷°üº¬Èý²¿·Ö:try-with-resources ÉùÃ÷¡¢try ¿é¡¢catch ¿é¡£ËüÒªÇóÔÚ try-with-resources ÉùÃ÷Öж¨ÒåµÄ±äÁ¿ÊµÏÖÁË AutoCloseable ½Ó¿Ú,ÕâÑùÔÚϵͳ¿ÉÒÔ×Ô¶¯µ÷ÓÃËüÃÇµÄ close ·½·¨,´Ó¶øÌæ´úÁË finally ÖйرÕ×ÊÔ´µÄ¹¦ÄÜ¡£
×Ö·û´®Ïà¼Ó:Õâ¸öÏë±Ø´ó¼ÒÓ¦¸Ã¶¼ÖªµÀ,×Ö·û´®µÄÆ´½ÓÓÐÁ½ÖÖ,Èç¹ûÄܹ»ÔÚ±àÒëʱÆÚÈ·¶¨Æ´½ÓµÄ½á¹û,ÄÇôʹÓà +
ºÅÁ¬½ÓµÄ×Ö·û´®»á±»±àÒëÆ÷Ö±½ÓÓÅ»¯ÎªÏà¼ÓµÄ½á¹û,Èç¹û±àÒëÆÚ²»ÄÜÈ·¶¨Æ´½ÓµÄ½á¹û,µ×²ã»áÖ±½ÓʹÓà StringBuilder
µÄ append
½øÐÐÆ´½Ó
ÉîÈëÀí½â Java Óï·¨ÌÇ,¿ÉÒԲο¼ÕâƪÎÄÕ Java ÖеÄÓï·¨ÌÇ,ÕæÌð¡£
ÕâÒ²ÊÇÒ»µÀÀÏÉú³£Ì¸µÄÎÊÌâÁË¡£
Java ¼¯ºÏÖÐ×ܹ²ÓÐÈýÖÖÀàÐÍ,·Ö±ðÊÇ List¡¢Set ºÍ Map,ËüÃǶ¼Î»ÓÚ java.util °üÏÂ,¶øÇÒ¶¼ÊǽӿÚ,ËüÃÇÓи÷×ÔµÄʵÏÖÀà¡£
List µÄʵÏÖÀàÓÐArrayList¡¢LinkedList¡¢Vector¡¢CopyOnWriteArrayList µÈ
Set µÄʵÏÖÀàÓÐHashSet¡¢TreeSet¡¢LinkedHashSet¡¢SortedSet µÈ
ËüÃÇͬÑùÓÐ×Ô¼ºµÄ³éÏóÀà,List µÄ³éÏóÀàÊÇ AbstractList¡¢Set µÄ³éÏóÀàÊÇ AbstractSet¡£³éÏóÀàÖ÷ÒªÓÃ×÷¶¥¼¶½Ó¿ÚÒ²¾ÍÊÇ List¡¢Set ÕâÀà½Ó¿ÚµÄÍØÕ¹,ʵÏÖÁËһЩ¶¥¼¶½Ó¿Ú¹¦ÄܵÄͬʱҲ¶¨ÒåÁËһЩģ°æ·½·¨,ÕâÓõ½ÁËÄ£°æÉè¼Æģʽ¡£
List ºÍ Set ¶¼¼Ì³ÐÁË Collection
½Ó¿Ú,¶¼ÊôÓÚÒ»ÖÖ ¼¯ºÏ
¡£
ÏÂÃæÀ´ÁÄÒ»ÁÄ List ºÍ Set µÄ²»Í¬µã
ÓÐÐòÐÔ
List ±íʾµÄÊÇÒ»ÖÖ ÓÐÐò¼¯ºÏ
,Ò²¾ÍÊÇ˵,List ÖеÄÔªËض¼ÊÇÓÐÐòÅÅÁеÄ,List ½Ó¿ÚÄܹ»×¼È·µÄ¿ØÖÆÿ¸öÔªËصIJåÈë˳Ðò,¿ÉÒÔͨ¹ýË÷ÒýÀ´²éÕÒÔªËØ¡£
Set ¶Ô¼¯ºÏµÄ˳ÐòûÓÐÒªÇó,²»Í¬µÄʵÏÖÀà¿ÉÒÔ¶¨Òå¸÷×ÔµÄ˳Ðò,±ÈÈç HashSet ¾ÍÊÇÒ»ÖÖÎÞÐòµÄÊý¾Ý½á¹¹,HashSet ÖеÄÔªËØÊÇÂÒÐòµÄ;TreeSet Ôò»á°´ÕÕÔªËصÄ×ÔȻ˳Ðò½øÐÐÅÅÐò;LinkedHashSet »á°´ÕÕ²åÈë Set ÖеÄÔªËØ˳Ðò½øÐÐÅÅÐò;SortedSet »á¸ù¾Ý Comparable »òÕß Comparator µÄ±È½Ï˳Ðò½øÐÐÅÅÐò,Ò²¾ÍÊÇ˵Äã¿ÉÒÔ×Ô¶¨ÒåÅÅÐò¹æÔò¡£
ÔªËØÊÇ·ñÖظ´
List ÔÊÐíÖظ´ÔªËØ´æÔÚµÄ,²¢ÇÒ List Äܹ»ÔÊÐí²åÈë null ÔªËØ,¶ø Set ÊDz»ÔÊÐíÖظ´ÔªËصÄ,ËùÒÔ Set Ò²Ö»ÄÜÔÊÐíÒ»¸ö null ÔªËØ´æÔÚ¡£
Map ͬÑùÒ²ÊÇÎÒÃÇÈÕ³£¿ª·¢ÖÐʹÓÃƵÂʷdz£¸ßµÄ¼¯ºÏÀà¡£
Map ÊÇÒ»¸öÖ§³Ö key-value
Ò²¾ÍÊÇ ¼üÖµ¶Ô
´æ´¢µÄ¶ÔÏó¡£ÆäÖÐ,¼ü¶ÔÏó²»ÔÊÐíÖظ´,¶øÖµ¶ÔÏó¿ÉÒÔÖظ´,²¢ÇÒÖµ¶ÔÏ󻹿ÉÒÔÊÇ Map ÀàÐ͵Ä,¾ÍÏñÊý×éÖеÄÔªËØ»¹¿ÉÒÔÊÇÊý×éÒ»Ñù¡£
Map ½Ó¿ÚµÄʵÏÖÀàÓÐ:HashMap¡¢TreeMap¡¢LinkedHashMap Àà¡£
HashMap ÊÇÎÒÃÇ×î³£ÓÃµÄ Map ʵÏÖÁË,HashMap µÄµ×²ã¹¹Ôì¾ÍÊÇ Êý×é + Á´±í,Ëü»á¸ù¾Ý key µÄ hashCode Öµ´æ´¢Êý¾Ý,¿ÉÒÔʹÓà get(key)
À´»ñÈ¡¼ü¶ÔÓ¦µÄÖµ,HashMap ²»ÊÇḬ̈߳²È«µÄÈÝÆ÷,²¢ÇÒÖ»ÄÜÔÊÐíÒ»Ìõ null ¼üÖµ¶Ô¡£ÔÚ HashMap ÖÐÔªËرȽÏÉÙµÄʱºò,HashMap ÊÇÒÔÁ´±íµÄÐÎʽ´æ´¢ÔªËصÄ,µÈµ½Êý¾ÝÁ¿µ½´ïÒ»¶¨³Ì¶Èºó,Á´±í»áתΪºìºÚÊ÷½øÐд洢¡£
TreeMap ÊÇÒ»¸öºìºÚÊ÷µÄ Map,Ëü»á¶Ô¼ü°´ÕÕÖ¸¶¨µÄ˳Ðò½øÐÐÅÅÐò,TreeMap ²»ÊÇÒ»¸öḬ̈߳²È«µÄ Map,TreeMap Öв»ÄÜÔÊÐí null Öµ,·ñÔò»áÅ׳ö¿ÕÖ¸ÕëÒì³£¡£
LinkedHashMap ±£Ö¤ÁËÔªËصIJåÈë˳Ðò,ÔÚ²éѯ±éÀúʱ»á±È HashMap Âý,ͬÑùÒ²²»ÊÇḬ̈߳²È«µÄÈÝÆ÷¡£LinkedHashMap ¿ÉÒÔÔÊÐí¿ÕÔªËØ¡£
ÖµµÃ×¢ÒâµÄÊÇ,Map µÄʵÏÖ»¹ÓÐ Hashtable
ºÍ ConcurrentHashMap
,ÕâÁ½¸öÔªËض¼ÊÇḬ̈߳²È«µÄ Map¡£
Hashtable ÎÒÃÇÒ»°ã²»³£ÓÃ,ÒòΪËüµÄḬ̈߳²È«¶¼Ö»ÊÇʹÓÃÁ˼òµ¥±©Á¦µÄ synchronized
ͬ²½Ëø,ͬ²½ËøµÄ¿ªÏú±È½Ï´ó,²»ÍƼöʹÓá£
»¹ÓÐ×îºóÒ»¸ö¾ÍÊÇ ConcurrentHashMap ÁË,ConcurrentHashMap ÊÇÒ»¸ö»ùÓÚ¶àÏ̸߲߳¢·¢µÄ Map,Ëü¾³£ÓÃÓÚ¶àÏ̳߳¡¾°,ConcurrentHashMap µÄµ×²ãʹÓÃÁË·Ö¶ÎËø
,·Ö¶ÎËø¶Ôÿ¸ö¶Î½øÐмÓËø,ÔÚ±£Ö¤Ḭ̈߳²È«µÄͬʱ½µµÍÁËËøµÄÁ£¶È¡£
ArrayList ÊÇʵÏÖÁË»ùÓÚ¶¯Ì¬Êý×éµÄÊý¾Ý½á¹¹,LinkedList »ùÓÚÁ´±íµÄÊý¾Ý½á¹¹¡£
¶ÔÓÚËæ»ú·ÃÎÊ get ºÍ set ²Ù×÷,ArrayList ÒªÓÅÓÚ LinkedList,ÒòΪ LinkedList ÒªÒƶ¯Ö¸Õë¡£
¶ÔÓÚÐÂÔöºÍɾ³ý²Ù×÷ add ºÍ remove,LinedList ±È½ÏÕ¼ÓÅÊÆ,ÒòΪ ArrayList ÒªÒƶ¯Êý¾Ý¡£
ArrayList ºÍ LinkedList ¶¼²»ÊÇḬ̈߳²È«µÄÈÝÒ×,ËüÃǶ¼ÐèÒªÊÖ¶¯¼ÓËø,»òÕßʹÓà Collections ÖеÄḬ̈߳²È«µÄʵÏÖ Collections.synchronizedList À´¹¹Ôì¡£ËüÃǶ¼¾ßÓÐ fail-fast ¿ìËÙʧ°Ü»úÖƵġ£
Õâ¸öʱºò¿ÉÄÜ»¹»áÎÊÄãºÍ Vector
µÄÇø±ð
Ö÷ÒªÓÐÁ½µãÇø±ð:Ḭ̈߳²È«ÐÔºÍÀ©ÈÝ·½Ãæ
Vector Óë ArrayListÒ»Ñù,Ò²ÊÇͨ¹ýÊý×éʵÏÖµÄ,²»Í¬µÄÊÇËüÖ§³ÖÏ̵߳Äͬ²½
,¼´Ä³Ò»Ê±¿ÌÖ»ÓÐÒ»¸öÏß³ÌÄܹ»Ð´Vector,±ÜÃâ¶àÏß³Ìͬʱд¶øÒýÆðµÄ²»Ò»ÖÂÐÔ,µ«ÊµÏÖͬ²½ÐèÒªºÜ¸ßµÄ»¨·Ñ,Òò´Ë,·ÃÎÊËü±È·ÃÎÊ ArrayList Âý¡£
µ± Vector »ò ArrayList ÖеÄÔªËس¬¹ýËüµÄ³õʼ´óСʱ,Vector »á½«ËüµÄÈÝÁ¿·±¶,¶ø ArrayList Ö»Ôö¼Ó 50% µÄ´óС¡£ÕâÑù,ArrayList ¾ÍÓÐÀûÓÚ½ÚÔ¼ÄÚ´æ¿Õ¼ä¡£
ÏȳÊÏÖһϠCollections.sort ºÍ Arrays.sort µÄÔ´Âë
´ÓÕâÈý¶Î´úÂë¿ÉÖª,Collections.sort ×îÖÕµ÷ÓõÄÊÇ Arrays.sort Öеķ½·¨,ÄÇô Collections.sort ²»Óÿ´ÁË,Ö±½Ó¿´ Arrays.sort ¼´¿É¡£
Arrays.sort Ô´ÂëÖÐÓÐÈý¸ö·ÖÖ§ÅжÏ,Èç¹ûûÓÐÌṩÍⲿ Comparator ±È½ÏÆ÷µÄ»°,»áÖ±½Óµ÷Óà sort ·½·¨,µ÷ÓúóµÄ sort ·½·¨ÈçÏÂ
Ê×ÏÈ»á½øÐÐLegacyMergeSort.userRequested µÄÅжÏ,ÄÇôÕâ¸öÅжÏÊÇʲôÒâ˼ÄØ?
ÊÇÕâÑù,ÔÚ JDK1.6 ÖÐʹÓõÄÊÇ LegacyMergeSort
,ÔÚ JDK1.7 ÖÐʹÓõÄÊÇ TimeSort
,Èç¹ûÏëҪʹÓÃÔÀ´µÄ LegacyMergeSort µÄ»°,¾ÍÐèÒªÔÚϵͳ±äÁ¿ÖмÓÉÏ
-Djava.util.Arrays.useLegacyMergeSort=true
Õâ¸öÅäÖá£
Èç¹ûûÓÐʹÓÃÕâ¸öÅäÖõĻ°,ĬÈϵ÷ÓõÄÊÇ ComparableTimSort.sort ·½·¨,ÕâÆäʵÊÇÒ»ÖÖ TimSort
µÄÓÅ»¯,¶ø TimSort µÄÅÅÐòËã·¨¾ÍÊǹ鲢ÅÅÐò¡£
ÎÒÃÇ´Ó Arrays.sort Öеĵڶþ¸öÅжÏÒ²¿ÉÒÔ¿´µ½ÕâÒ»µã,ComparableTimSort ºÍ TimSort ×î´óµÄÇø±ð¾ÍÊÇ¿´ÄãÓÐûÓÐÌṩÍⲿµÄ±È½ÏÆ÷ÁË¡£
ÎÒÃÇÈÕ³£¿ª·¢¹ý³ÌÖÐʹÓà Iterator Óõķdz£¶à,ListIterator ºÜÉÙ½Ó´¥,ÕâµÀÌâÖ÷Òª¿¼²ìÄã¶Ô List Ô´ÂëµÄÊìϤ³Ì¶ÈÒÔ¼°¶Ô fail-fast »úÖÆÊÇ·ñÁ˽⡣
Ò»°ãÀ´½²,Iterator ºÍ ListIterator µÄÖ÷ÒªÇø±ðÓÐ
Iterator ÔÚ±éÀú¹ý³ÌÖÐ,²»ÄÜÐ޸ļ¯ºÏÖÐÔªËصÄÊýÁ¿²Ù×÷,·ñÔò»áÅ׳öÒì³£¡£
ʹÓ÷¶Î§²»Í¬,Iterator ¿ÉÒÔÔÚËùÓм¯ºÏÖÐʹÓÃ,¶ø ListIterator Ö»ÄÜÓÃÔÚ List ÀàÐÍÓë×ÓÀàÐÍ
listIterator ÓÐ add ·½·¨,¿ÉÒÔÏò¼¯ºÏÖÐÌí¼ÓÔªËØ,¶ø iterator ²»ÄÜ¡£
listiterator ºÍ iterator ¶¼ÓÐ hasnext ºÍ next ·½·¨¿ÉÒÔ˳Ðò±éÀúÔªËØ, µ«ÊÇ listiterator ÓÐ hasprevious ºÍ previous ·½·¨,¿ÉÒÔÄæÏò±éÀúÔªËØ
listiterator ¿ÉÒÔ¶¨Î»µ±Ç°µÄË÷ÒýλÖà nextIndex ºÍ previousIndex ¿ÉÒÔʵÏÖ,iterator ûÓд˹¦ÄÜ
listiterator ¿ÉÒÔʵÏÖ¶Ô¶ÔÏóµÄÐÞ¸Ä set() ·½·¨¿ÉÒÔʵÏÖ,iterator ½ö¿ÉÒÔ±éÀú,²»ÄÜÐ޸ġ£
½ñÌìÃæÊÔ¹ÙÓÖÎʵ½Äã ArrayList µÄÀ©ÈÝ»úÖÆÁË¡£¡£¡£¡£¡£¡£ÄǾÍÖ±½Ó¿´Ô´ÂëßÂ
»°ËµÊ²Ã´Ê±ºò»áÀ©ÈÝ°¡,¿Ï¶¨Êǵ÷Óà add ·½·¨Ìí¼ÓÔªËصÄʱºòѽ
ArrayList Ìí¼ÓÔªËØ»á½øÐÐÅжÏ,ÕâÒ²ÊÇensureCapacityInternal
·½·¨¸ÉµÄÊÂÇé,Ò²¾ÍÊÇÅжϲ¢È·¶¨ÈÝÁ¿´óСµÄÒ»¸ö·½·¨,ÎÒÃÇÖ±½Ó¸ú½øÈ¥
Õâ¸ö·½·¨»á½øÐÐÒ»¸öÅжÏ,ÎÒÃÇÉÏÃæ×¢ÊÍÒ²¸ø³öÀ´ÁË,¾ÍÊÇ˵ÄãÕâ¸ö ArrayList ÔÚ¹¹ÔìµÄʱºòÊÇ·ñÖ¸¶¨Á˳õʼÈÝÁ¿,Èç¹û List ÖÐûÓÐÔªËØ,¾Í»áÈ¡ÄãÉèÖóõʼÈÝÁ¿ºÍ ArrayList ÖÐ×î´óÈÝÁ¿ÅжÏ,È¡´óµÄΪ׼¡£
È»ºóµ÷Óà ensureExplicitCapacity
·½·¨,ÅжÏÊÇ·ñÐèÒªÀ©ÈÝ
¿ÉÒÔ¿´µ½,Èç¹û´Ëʱ ArrayList Êý×éÔªËØµÄ size Òª±È´æ´¢µÄÔªËØ´óµÄ»°,¾Í»áµ÷Óà grow
·½·¨,Õâ¸ö grow ·½·¨Æäʵ¾ÍÊÇÀ©ÈÝ·½·¨¡£
Õâ¶Î´úÂë¾ÍÊÇ ArrayList À©ÈÝ»úÖÆÁË¡£ÎÒÃÇÀ´·ÖÎöÒ»ÏÂ
Ê×ÏÈ»á»ñÈ¡ ArrayList ÔªËصÄÊýÁ¿,È»ºó°Ñ ArrayList µÄÈÝÁ¿À©ÈÝ 50%,°ÑÀ©ÈݺóµÄÈÝÁ¿ºÍ²ÎÊýÈÝÁ¿½øÐбȽÏ,Èç¹û±È²ÎÊýСµÄ»°,È¡Öµ¸ü´óµÄÈÝÁ¿½øÐÐÔªËØ¿½±´¡£Èç¹ûÀ©ÈݺóµÄÈÝÁ¿±È ArrayList µÄ×î´óÈÝÁ¿»¹Òª´ó,¾Í»á½øÐÐ×î´óÈÝÁ¿µÄÈ¡Öµ
hugeCapacity
·½·¨Ê×ÏÈÅжϲÎÊýÊÇ·ñСÓÚ 0 ,Èç¹ûÊǵĻ°ÄÇô¾Í»áÅ׳ö OutOfMemoryError Òì³£,Èç¹û²»ÊǵĻ°¾ÍÅжϲÎÊýºÍ ArrayList ×î´óÈÝÁ¿µ½µ×Ë´ó,Èç¹û²ÎÊý´óµÄ»°,¾Í»áȡֵΪ Integer.MAX_VALUE,Èç¹ûСµÄ»°¾Í»áÈ¡ MAX_ARRAY_SIZE¡£
¼òµ¥À´Ëµ,BIO(Blocking I/O)
,ËüÊÇÒ»ÖÖͬ²½×èÈûʽµÄ IO,Êý¾ÝµÄ¶Áд±ØÐëÔÚÒ»¸öÏß³ÌÖнøÐÐÍê³É,Ò²¾ÍÊÇ˵ËüÖ»ÓÐÒ»¸öÖ´ÐÐ˳ÐòÁ÷,Èç¹ûÓöµ½ IO Á÷µÄ¶ÁÈ¡²Ù×÷,Ëü±ØÐëµÈµ½ IO Á÷µÄ¶ÁÈ¡»òÕßдÈëÍê³Éºó,²ÅÄܽøÐнÓÏÂÀ´µÄ¹¤×÷¡£
NIO(non-blocking IO)
ÆäʵҲ±»³ÆΪ new io
,ËüÊÇ JDK 1.4 ¼°ÆäÒÔÉÏ°æ±¾ÖÐÐÂÔö¼ÓµÄÒ»ÖÖ IO Á÷,ËüÊÇÒ»ÖÖͬ²½·Ç×èÈûµÄ IO Ä£ÐÍ¡£ÔÚ NIO ÖÐ,Ï̷߳¢ÆðÇëÇóºó»áÁ¢¿Ì·µ»Ø,ͬ²½Ö¸µÄÊDZØÐëµÈ´ý IO »º³åÇøÄÚµÄÊý¾Ý¾ÍÐ÷,¶ø·Ç×èÈûÖ¸µÄÊÇ,Óû§Ï̲߳»ÔµØµÈ´ý IO »º³åÇø,¿ÉÒÔÏÈ×öһЩÆäËû²Ù×÷,µ«ÊÇÒª¶¨Ê±ÂÖѯ¼ì²é IO »º³åÇøÊý¾ÝÊÇ·ñ¾ÍÐ÷¡£Java ÖÐ µÄ NIO ÊÇ new IO µÄÒâ˼¡£ÆäʵÊÇ NIO ¼ÓÉÏ IO ¶à·¸´Óü¼Êõ¡£ÆÕͨµÄ NIO ÊÇÏß³ÌÂÖѯ²é¿´Ò»¸ö IO »º³åÇøÊÇ·ñ¾ÍÐ÷,¶ø Java ÖÐµÄ new IO Ö¸µÄÊÇÏß³ÌÂÖѯµØÈ¥²é¿´Ò»¶Ñ IO »º³åÇøÖÐÄÄЩ¾ÍÐ÷,ÕâÊÇÒ»ÖÖ IO ¶à·¸´ÓõÄ˼Ïë¡£IO ¶à·¸´ÓÃÄ£ÐÍÖÐ,½«¼ì²é IO Êý¾ÝÊÇ·ñ¾ÍÐ÷µÄÈÎÎñ,½»¸øϵͳ¼¶±ðµÄ select »ò epoll Ä£ÐÍ,ÓÉϵͳ½øÐмà¿Ø,¼õÇáÓû§Ï̸߳ºµ£¡£
AIO
ÊÇÕæÕýÒâÒåÉϵÄÒì²½·Ç×èÈû IO Ä£ÐÍ¡£ ÉÏÊö NIO ʵÏÖÖÐ,ÐèÒªÓû§Ï̶߳¨Ê±ÂÖѯ,È¥¼ì²é IO »º³åÇøÊý¾ÝÊÇ·ñ¾ÍÐ÷,Õ¼ÓÃÓ¦ÓóÌÐòÏß³Ì×ÊÔ´,ÆäʵÂÖѯÏ൱ÓÚ»¹ÊÇ×èÈûµÄ,²¢·ÇÕæÕý½â·Åµ±Ç°Ïß³Ì,ÒòΪËü»¹ÊÇÐèҪȥ²éѯÄÄЩ IO ¾ÍÐ÷¡£¶øÕæÕýµÄÀíÏëµÄÒì²½·Ç×èÈû IO Ó¦¸ÃÈÃÄÚºËϵͳÍê³É,Óû§Ïß³ÌÖ»ÐèÒª¸æËßÄÚºË,µ±»º³åÇø¾ÍÐ÷ºó,֪ͨÎÒ»òÕßÖ´ÐÐÎÒ½»¸øÄãµÄ»Øµ÷º¯Êý¡£
ÔÚ Java ÖÐ,¸ù¾Ý¶Ô¶ÔÏóÊôÐԵĿ½±´³Ì¶È(»ù±¾Êý¾ÝÀàºÍÒýÓÃÀàÐÍ),»á·ÖΪÁ½ÖÖ:
Shallow Copy
Deep Copy
dz¿½±´:dz¿½±´»áÖØд´½¨Ò»¸ö¶ÔÏó,Õâ¸ö¶ÔÏóÓÐ×ÅÔʼ¶ÔÏóÊôÐÔÖµµÄÒ»·Ý¿½±´¡£Èç¹ûÊôÐÔÊÇ»ù±¾ÀàÐÍ,¿½±´µÄ¾ÍÊÇ»ù±¾ÀàÐ͵ÄÖµ;Èç¹ûÊôÐÔÊÇÄÚ´æµØÖ·(ÒýÓÃÀàÐÍ),¿½±´µÄ¾ÍÊÇÄÚ´æµØÖ· ,Òò´ËÈç¹ûÆäÖÐÒ»¸ö¶ÔÏó¸Ä±äÁËÕâ¸öµØÖ·,¾Í»áÓ°Ïìµ½ÁíÒ»¸ö¶ÔÏó¡£¼´Ä¬ÈÏ¿½±´¹¹Ô캯ÊýÖ»ÊǶԶÔÏó½øÐÐdz¿½±´¸´ÖÆ,¼´Öð¸ö³ÉÔ±ÒÀ´Î¿½±´,Ò²¾ÍÊÇÖ»¸´ÖƶÔÏó¿Õ¼ä¶ø²»¸´ÖÆ×ÊÔ´¡£
ʵÏÖdz¿½±´,ÐèҪʵÏÖ Cloneable
½Ó¿Ú,²¢¸²Ð´ clone()
·½·¨¡£
É±´:¶ÔÓÚ»ù±¾Êý¾ÝÀàÐ͵ijÉÔ±¶ÔÏó,ÒòΪ»ù´¡Êý¾ÝÀàÐÍÊÇÖµ´«µÝµÄ,ËùÒÔÊÇÖ±½Ó½«ÊôÐÔÖµ¸³Öµ¸øеĶÔÏó¡£»ù´¡ÀàÐ͵Ŀ½±´,ÆäÖÐÒ»¸ö¶ÔÏóÐ޸ĸÃÖµ,²»»áÓ°ÏìÁíÍâÒ»¸ö(ºÍdz¿½±´Ò»Ñù)¡£¶ÔÓÚÒýÓÃÀàÐÍ,±ÈÈçÊý×é»òÕßÀà¶ÔÏó,É±´»áн¨Ò»¸ö¶ÔÏó¿Õ¼ä,È»ºó¿½±´ÀïÃæµÄÄÚÈÝ,ËùÒÔËüÃÇÖ¸ÏòÁ˲»Í¬µÄÄÚ´æ¿Õ¼ä¡£¸Ä±äÆäÖÐÒ»¸ö,²»»á¶ÔÁíÍâÒ»¸öÒ²²úÉúÓ°Ïì¡£¶ÔÓÚÓжà²ã¶ÔÏóµÄ,ÿ¸ö¶ÔÏó¶¼ÐèҪʵÏÖ Cloneable
²¢ÖØд clone()
·½·¨,½ø¶øʵÏÖÁ˶ÔÏóµÄ´®Ðвã²ã¿½±´¡£É±´Ïà±ÈÓÚdz¿½±´ËٶȽÏÂý²¢ÇÒ»¨Ïú½Ï´ó¡£
Java ´´½¨¶ÔÏóµÄ·½Ê½Ö÷ÒªÓÐÎåÖÖ
Object obj = new Object();
User user = (User)Class.forName("com.cxuan.test.User").newInstance();
// »òÕßʹÓÃ
User user = User.class.newInstance();
Constructor<User> constructor = User.class.getConstructor();
User user = constructor.newInstance();
Constructor<User> constructor = User.class.getConstructor();
User user = constructor.newInstance();
user.setName("cxuan");
User user2 = (User)user.clone();
System.out.println(user2.getName());
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("xxx"));
out.writeObject(user2);
out.close();
//Deserialization
ObjectInputStream in = new ObjectInputStream(new FileInputStream("xxx"));
User user3 = (User) in.readObject();
in.close();
user3.setName("cxuan003");
System.out.println(user3 + ", hashcode : " + user3.hashCode());
ÉîÈëÀí½âÕ⼸ÖÖ´´½¨¶ÔÏóµÄ·½Ê½,¿ÉÒԲο¼ Å̵ã Java ´´½¨¶ÔÏóµÄ n ÖÖ²Ù×÷
ÕâƪдÁ˺ܳ¤Ê±¼ä,΢ÐŹ«ÖںŵÄͳ¼ÆÊÇ 3w ×Ö,31 ÕÅͼ,ÔĶÁʱ¼ä´ó¸ÅÊÇ 77 ·ÖÖÓ¡£
ÎÒÖªµÀÕâ¸öÔĶÁʱ¼ä¿ÉÒÔ×øµØÌú 10 ºÅÏßÈƱ±¾©Ò»È¦ÁË,Ò²»áÓкܶàÈ˲úÉú·´¸Ð,ÎÄÕÂдÕâô³¤,ËÓÐʱ¼ä¿´Íê°¡?ÕâÖÖ¿ì²ÍʽµÄÒÉÎÊÎÒÒѾÌýµ½¹ýÎÞÊý±éÁË,µ«ÊÇÎÒÿ´Î¶¼»áµ±×÷¶úÅÔ·ç¡£ÊÇ°¡,ÎÒÃÇÿÌì,Ë¢¶¶Òô¿´ÃÀÅ®,ˢͷÌõ¿´ÃÀÅ®,Ë¢¹«Öںſ´Ò»Èº´óÀÐÃÇÌìÌ촵ţ±Æ,È»ºóÂîµÀ:¡°ÎÔ²Û,ÓÖÌØôÀË·ÑÀÏ×Ó 1 ¸öСʱ¡±,È»ºó¼Ù×°ÈÏÕæµÄ¿´ÁË 15 ·ÖÖÓ´úÂë,¼ÌÐøÀË·Ñ¡£
ÎÒÖªµÀÕâƪÎÄÕÂÈÔ¾Éû¶àÉÙÈË¿´,ÒòΪÂíÉϾÍÒª±»ÐÅÏ¢ºéÁ÷ÑÍûÁË,¿ÉÄÜÄã¿´ÍêÁ˾ͻá·ÅÔÚÊղؼÐÖÐ,ÉõÖÁÄã¾õµÃÎÒдµÄС¶ù¿Æ,Ò²¿ÉÄÜÕâƪÎÄÕÂÔÚÄãµÄ±à³ÌÉúÑÄÖзº²»ÆðÒ»µãÁ°äô,ÎÒ²»Ïë¹ý¶àµÄÃèÊöÒ»ÖÖÏÖÏó¡£ÎÒֻ˵һÏÂÎÒ×öÁËÄÄЩÊÂÇé°É¡£ÕâƪÎÄÕÂÖдó¸ÅÓв»µ½ 20 ÌõÁ´½Ó,ÆäÖÐÓÐ 14 Ìõ¶¼ÊÇÎÒ¹«ÖںŵÄÄÚÈÝ¡£
һƪÓëÖÚ²»Í¬µÄ String¡¢StringBuffer¡¢StringBuilder Ïê½â
Ò»¸öССµÄ static »¹ÄÜÄѵÃסÎÒ?
¿´ÍêÕâƪ HashMap ,ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË
¿´ÍêÕâƪ Exception ºÍ Error ,ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË
ÎÒÏòÃæÊÔ¹Ù½²½âÁ˵¥Àýģʽ,Ëû¶ÔÎÒÊúÆðÁË´óÄ´Ö¸
Comparable ºÍ ComparatorµÄÀí½â
¿´ÍêÕâƪ final¡¢finally ºÍ finalize ºÍÃæÊÔ¹Ù³¶Æ¤¾ÍûÎÊÌâÁË
ÎÒÏë,ÕâÄܹ»¶ÔµÄÆðÎÒÔÚ github https://github.com/crisxuan/bestJavaer ÉÏÃæ˵¹ýµÄ»°¡£
ºÃÁË,¾ÍÕâÑù,ÖÁÓÚµãÔÞÔÚ¿´Ê²Ã´µÄ,ËæÒâ¾ÍºÃ,Ï£ÍûÕâƪÎÄÕÂÄܹ»°ïµ½Äã¡£
ÎÒ×Ô¼º¸ÎÁËÁù±¾ PDF,΢ÐÅËÑË÷¡¸³ÌÐòÔ±cxuan¡¹¹Ø×¢¹«Öںźó,ÔÚºǫ́»Ø¸´ cxuan ,ÁìÈ¡È«²¿ PDF,ÕâЩ PDF ÈçÏÂ
Ç°ÑÔ ±¾ÎÄÊdzÈ×Ó³öÓÚÐËȤ°®ºÃ¶ÔJava¹Ù·½½Ì³ÌµÄ³¢ÊÔ·Ò뼸ºõÿÈÕ¸üиÐÐËȤµÄÅóÓÑ...
tmux ÊÇÒ»¸öÀàËÆÓÚ Screen Öն˸´ÓõŤ¾ß£¬ËüÄܹ»ÔÚÖն˳öÏÖÒâÍâµÄÇé¿öÏ£¬È·±£...
Ò». XSLÈëÃÅ 1.XSL---XMLµÄÑùʽ±í HTMLÍøҳʹÓÃÔ¤ÏÈÈ·¶¨µÄ±êʶ(tags)£¬Õâ¾ÍÊÇ˵...
Ò»¡¢ÎÊÌ⣺ ArrayCollectionÌí¼Ó¹ýÂËÆ÷ºó£¬²¿ÃÅÊý¾Ý²»»á±»Õ¹ÏÖ£¬µ±ÎÒɾ³ýδչÏÖ...
ÔÚÓÃflexµÄjpegencoder¶ÔͼƬ½øÐÐѹËõµÄʱºò£¬exifÐÅÏ¢»á¶ªÊ§£¬Ò²¾ÍÊÇͼƬµÄ×÷Õß...
3ÔÂ18ÈÕÏûÏ¢ Íâý Windows Latest ±¨µÀ£¬Î¢ÈíÔÚ 2020 Äê 1 ÔÂÕýʽ½áÊøÁË¶Ô Windo...
ÔÚ Linux ÖÐÓÐÁ½ÖÖÔËÐÐ shell ½Å±¾µÄ·½·¨¡£Äã¿ÉÒÔʹÓ㺠bash script . sh »òÕß...
¸Õ¿ªÊ¼½Ó´¥PHP¿ª·¢£¬´î½¨¿ª·¢»·¾³ÊǵÚÒ»²½£¬ÍøÉÏÏÂÔØPhpStormºÍPhpStudyÈí¼þ£¬Ôõ...
¸´ÖÆ´úÂë ´úÂëÈçÏÂ: '******************************************** 'º¯ÊýÃû£ºI...
Pre ºÜÔçÔÚ¿´ Jesse µÄ Asp.net Core¿ìËÙÈëÃÅ µÄ¿Î³ÌµÄʱºò¾ÍÁ˽⵽ÁËÔÚAsp .net...