·¢ÐÅÈË: mendy (ÃϵÏ), ÐÅÇø: Java
±ê Ìâ: JAVA ÓïÑԹ淶
·¢ÐÅÕ¾: ÄÏ´óС°ÙºÏÐÅÏ¢½»»»Õ¾ (Mon Apr 20 13:10:14 1998), תÐÅ
·¢ÐÅÈË: xyz (´óµÁÔô), ÐÅÇø: JAVA
±ê Ìâ: JAVA ÓïÑԹ淶
·¢ÐÅÕ¾: '3m×Ͻð·Éºèm' (Fri Feb 13 17:36:00 1998) , תÐÅ
¡¶×ª×ÔˮľÇ廪¡·
JavaÓïÑÔ¹æ¸ñ˵Ã÷(Òë×ÔJava language specification, ÂÔ¼ÓÏêÊö)
1.³ÌÐò½á¹¹
JavaÓïÑÔµÄÔ´³ÌÐò´úÂëÓÉÒ»¸ö»ò¶à¸ö±àÒëµ¥Ôª(compilation unit)×é
³É£¬Ã¿¸ö±àÒëµ¥ÔªÖ»Äܰüº¬ÏÂÁÐÄÚÈÝ(¿Õ¸ñºÍ×¢ÊͳýÍâ)£º
* Ò»¸ö³ÌÐò°üÓï¾ä(package statement )
* ÒýÈëÓï¾ä(import statements)
* ÀàµÄÉùÃ÷(class declarations)
* ½çÃæÉùÃ÷(interface declarations)
ÿ¸öJavaµÄ±àÒëµ¥Ôª¿É°üº¬¶à¸öÀà»ò½çÃæ£¬µ«ÊÇÿ¸ö±àÒ뵥ԪȴÖÁ
¶àÓÐÒ»¸öÀà»òÕß½çÃæÊǹ«¹²µÄ¡£
Java µÄÔ´³ÌÐò´úÂë±»±àÒëÖ®ºó£¬±ã²úÉúÁËJava×Ö½Ú´úÂë(bytecode)¡£
JavaµÄ×Ö½Ú´úÂëÓÉһЩ²»ÒÀÀµÓÚ»úÆ÷µÄÖ¸Áî×é³É£¬ÕâЩָÁîÄܱ»JavaµÄ
ÔËÐÐϵͳ(runtime system)ÓÐЧµØ½âÊÍ¡£JavaµÄÔËÐÐϵͳ¹¤×÷ÆðÀ´Èçͬһ
̨ÐéÄâ»ú¡£
ÔÚµ±Ç°µÄJavaʵÏÖÖУ¬Ã¿¸ö±àÒëµ¥Ôª¾ÍÊÇÒ»¸öÒÔ.javaΪºó׺µÄÎļþ¡£
ÿ¸ö±àÒëµ¥ÔªÓÐÈô¸É¸öÀ࣬±àÒëºó£¬Ã¿¸öÀàÉú³ÉÒ»¸ö.classÎļþ¡£.class
ÎļþÊÇJavaÐé»úÆ÷Âë¡£
2. ´Ê·¨ÎÊÌâ
ÔÚ±àÒëµÄ¹ý³ÌÖУ¬JavaÔ´³ÌÐò´úÂëÖеÄ×Ö·û±»»®·ÖΪһϵÁеıê¼Ç
(token)¡£Java±àÒëÆ÷¿ÉÒÔʶ±ðÎåÖÖ±ê¼Ç: ±êʶ·û¡¢¹Ø¼ü×Ö¡¢×ÖÃæÁ¿¡¢ÔË
Ëã·ûÒÔ¼°ÌØÊâ·Ö¸ô·û¡£×¢ÊÍÒÔ¼°ÖîÈç¿Õ¸ñ¡¢ÖƱí·û¡¢»»ÐзûµÈ×Ö·û £¬¶¼
²»ÊôÓÚ±êʶ֮ÁУ¬µ«ËûÃÇÈ´³£±»ÓÃÀ´·Ö¸ô±ê¼Ç¡£
Java³ÌÐòµÄ±àд²ÉÓ÷º´úÂëUnicode×Ö·û¼¯£¬Èô²ÉÓÃÆäËüµÄ×Ö·û¼¯£¬
ÔòÐèÔÚ±àÒëǰת»»³ÉUnicode¡£
2.1 ×¢ÊÍ
JavaÓïÑÔÌṩÁË3ÖÖÐÎʽµÄ×¢ÊÍ£º
//text ´Ó//µ½±¾ÐнáÊøµÄËùÓÐ×Ö·û¾ù×÷ΪעÊͶø±»±àÒëÆ÷ºöÂÔ¡£
/* text */ ´Ó/*µ½*/ ¼äµÄËùÓÐ×Ö·û»á±»±àÒëÆ÷ºöÂÔ¡£
/** text */
µ±ÕâÀà×¢ÊͳöÏÖÔÚÈκÎÉùÃ÷֮ǰʱ½«»á×÷ÌØÊâ´¦Àí£¬ËüÃDz»ÄÜÔÙÓÃ
ÔÚ´úÂëµÄÈκεط½¡£ÕâÀà×¢ÊÍÒâζ×ű»À¨ÆðÀ´µÄÕýÎIJ¿·Ö£¬Ó¦¸Ã×÷ΪÉù
Ã÷ÏîÄ¿µÄÃèÊö£¬¶ø±»°üº¬ÔÚ×Ô¶¯²úÉúµÄÎĵµÖС£
2.2 ±êʶ·û
±êʶ·ûµÄÊ××Ö·û±ØÐëÊÇÒ»¸ö×Öĸ£¬Ï»®Ïß("_")»òÃÀÔª·ûºÅ("$")¡£ ºó
ÃæµÄ×Ö·ûÒ²¿ÉÊÇÊý×Ö0-9¡£ JavaʹÓ÷º´úÂë×Ö·û¼¯£¬ÎªÁ˱ãÓÚʶ±ðºÃÒ»
ºÏ·¨±êʶ·û£¬ÏÂÃæÁгöËüµÄ¡°×Öĸ¡±£º
* ´óд×Öĸ¡°A¡±¡«¡°Z¡±
* Сд×Öĸ¡°a¡±¡«¡°z¡±
* ·º´úÂ루Unicode£©ÖÐËùÓÐ×Ö·û±àÂëÔÚÊ®Áù½øÖÆÊý00C0֮ǰµÄ×Ö
·û¡£±êʶ·ûÖУ¬Ê××ÖĸºóµÄ×Ö·û¿ÉÒÔÊÇÈÎÒâµÄ¡£µ±È»£¬UnicodeÇø¶ÎÖÐ
ÄÇЩ±»±£Áô×÷ÌØÊâ×Ö·ûµÄ³ýÍâ¡£
ÓÉ´Ë£¬¡°garton¡±¼°¡°Mj¦µlner¡±¶¼ÊǺϷ¨±êʶ·û£¬µ«ÊÇ£¬°üÀ¨
ÖîÈç¡°¦Ð¡±µÄ×Ö·û´®È´²»ÊǺϷ¨µÄ¡£
ΪÁËÈ¡µÃ¸ü¶àµÄÓйطº´úÂë±ê×¼µÄÐÅÏ¢£¬Çë²ÎÔÄ¡°The Unicode
Standard¡±£¬¡°World Wide Character Encoding version 1.0£¬volumes 1 £¦
2¡±£¬Unicode¹«Ë¾µÄFTPµØÖ·ÊÇunicode.org¡£
2.3 ¹Ø¼ü×Ö
ÏÂÃæµÄ±êʶ·û±»±£ÁôÓÃ×÷¹Ø¼ü×Ö£¬ËûÃDz»ÄÜ×÷ÈÎºÎÆäËüµÄÓÃ;¡£
abstract default goto* null synchronized
boolean do if package this
break double implements private threadsafe
byte else import protected throw
byvalve * extends instanceof public transient
case false int return true
catch final interface short try
char finally long static void
class float native super while
const * for new switch
continue
ÆäÖУ¬¼Ó*±ê¼ÇºóÊDZ»±£Áôµ«µ±Ç°È´Î´Ê¹Óõġ£
2.4 ×ÖÃæÁ¿
×ÖÃæÁ¿(literal)ÊÇijЩÀàÐÍÖµµÄ»ù±¾±íÊö£¬ÕâЩÀàÐͰüÀ¨ÕûÐÍ£¬¸¡µã
ÐÍ£¬²¼¶ûÁ¿£¬×Ö·û¼°×Ö·û´®¡£
2.4.1 ÕûÐÍ×ÖÃæÁ¿
ÕûÊý¿ÉÓÐÈýÖÖ±íʾÐÎʽ£º Ê®½øÖÆ£¬°Ë½øÖƺÍÊ®Áù½øÖÆ¡£Ò»¸öÊ®½øÖÆ
ÕûÐÍ×ÖÃæÁ¿ÓÉһϵÁеÄÊý×Ö×é³É£¬µ«ËüµÄµÚÒ»¸öÊý×Ö²»ÄÜÊÇ0(ÓÐʱʮ½ø
ÖÆÊý×ÖÒ²¿ÉÏóÏÂÃæ½²µÄÄÇÑù¼Óºó׺)¡£ÕûÊýÒ²¿É±í´ï³É°Ë½øÖÆ»òÊ®Áù½øÖÆ
ÐÎʽ¡£ÒÔ0¿ªÍ·µÄÕûÐÍ×ÖÃæÁ¿£¬Òâζ×ÅËüÊÇÒ»¸öÊ®Áù½øÖƵġ£Ê®Áù½øÖÆ
ÕûÊý¿ÉÒÔ°üÀ¨Êý×Ö0-9ÒÔ¼°×Öĸa-f¼°A-F¡£°Ë½øÖÆÕûÊýÖÐÔòÖ»ÄÜÊdzöÏÖ
Êý×Ö0-7¡£ÔÚ³¬¹ý32λËùÄܱíʾµÄ·¶Î§Ö®Ç°£¬ÕûÐÍ×ÖÃæÁ¿µÄÀàÐͼ´Îªint£¬
·ñÔòΪlongÐÍ¡£Ò»¸öÕûÐÍ×ÖÃæÁ¿¿Éͨ¹ý¼Óºó׺L»òl¶øÇ¿ÆÈ³ÉlongÐÍ¡£
ÏÂÃæµÄ¾ùΪºÏ·¨µÄÕûÐÍ×ÖÃæÁ¿¡£
2 2L 0777
2.4.2 ¸¡µã×ÖÃæÁ¿
Ò»¸ö¸¡µã×ÖÃæÁ¿¿É°üÀ¨ÒÔϲ¿·Ö: Ò»¸öÊ®½øÖÆÕûÊý£¬Ò»¸öСÊýµã¡°.¡±£¬
СÊý²¿·Ö(ÁíÍâÒ»¸öÊ®½øÖÆÕûÊý)£¬Ö¸Êý²¿·Ö£¬Ò»¸öÀàÐͺó׺¡£Ö¸Êý²¿·Ö
ÊÇÒ»¸öe»òEºó¸úÒ»¸öÕûÊý¡£¸¡µã×ÖÃæÁ¿ÖÁÉÙ°üº¬ÓÐÒ»¸öÊý×Ö£¬Íâ¼Ó»ò
ÕßÒ»¸öСÊýµã»òÕßÒ»¸öe(»òE)£¬ÏÂÃæ¾ÙһЩ¸¡µã×ÖÃæÁ¿µÄÀý×Ó£º
3.1415 3.1E12 .1e12 2E12
¾ÍÏóÔÚºóÃæÃèÊöµÄÄÇÑù£¬JavaÓïÑÔÓÐÁ½ÖÖ¸¡µãÀàÐÍ£º float ¼°
double£¬Óû§¿É°´ÒÔÏÂд·¨Çø·Ö£º
2.0d»ò2.0D double ÐÍ
2.0f»ò2.0F»ò2.0 floatÐÍ
2.4.3 ²¼¶û×ÖÃæÁ¿
²¼¶û(boolean)×ÖÃæÁ¿ÓÐÁ½¸öÖµ£º true¼°false¡£
2.4.4 ×Ö·û×ÖÃæÁ¿
×Ö·û×ÖÃæÁ¿ÊÇÒ»¸öÓɵ¥ÒýºÅÀ¨ÆðµÄ×Ö·û(»òÕßÊÇÓÉÒ»×é×Ö·ûÀ´±íÊö
Ò»¸ö×Ö·û)¡£×Ö·ûÊôÓÚcharÀàÐÍ£¬²¢ÇÒ¾ù´Ó·º´úÂë×Ö·û¼¯ÖеÃÀ´¡£¶øÏÂÃæ
ÁгöµÄתÒåÐòÁÐÔòÓÃÀ´ÃèÊöһЩ·ÇͼÐÎ×Ö·û£¬ËüÃÇÒÔ·´Ð±¸Ü¡°\¡±¿ªÊ¼ÒÔ
×÷תÒåÓá£
ÐøÐзûÍ· \
»»ÐÐ NL(LF) \n
´¹Ö±ÖƱí·û HT \t
Í˸ñ BS \b
»Ø³µ CR \r
×ßÖ½»»Ò³ FF \f
·´Ð±¸Ü \ \\
µ¥ÒýºÅ ' \'
Ë«ÒýºÅ " \"
°Ë½øÖÆÊý 0ddd \ddd
Ê®Áù½øÖÆÊý 0xdd \xdd
·º´úÂë×Ö·û 0xdddd \udddd
2.4.5 ´®×ÖÃæÁ¿
´®×ÖÃæÁ¿ÊÇË«ÒýºÅÒýÆðµÄÁã¸ö»ò¶à¸ö×Ö·ûµÄÐòÁС£Ã¿¸ö´®×ÖÃæÁ¿±»
¿´×÷ÊÇÒ»¸ö´®¶ÔÏ󣬶ø²¢·ÇÊÇÒ»¸ö×Ö·ûµÄÊý×飬ÀýÈç¡°abc¡±´´½¨ÁËÒ»
¸öеĴ®ÀàµÄʵÀý¡£ÏÂÃæµÄ¶¼ÊǺϷ¨µÄ´®×ÖÃæÁ¿£º
" " \\¿Õ´®
"\" " \\Ö»°üº¬Ò»¸öË«ÒýºÅµÄ´®
"This is a string"
"This is a \
two-line string"
2.5 ÔËËã·û¼°ÌØÊâ·Ö¸ô·û
ÏÂÃæÕâЩ×Ö·ûÔÚJavaÔ´³ÌÐòÖÐ×÷ÔËËã·û»ò·Ö¸ô·ûÓãº
+ ¡ª ! % ^ & * £ü ¡« / > <
( ) { } [ ] ; ? : £¬¡¤ =
ÁíÍ⣬ÏÂÃæÕâЩ¸´ºÏ×Ö·û±»ÓÃ×÷ÔËËã·û£º
++ -- == <= >= != << >>
>>> += -= *= /= &= /=
^= %= <<= >>= >>>= ¡¬ &&
ºóÃæ»¹ÒªÔÚÔËËã·ûÒ»½ÚÖÐ×÷Ïêϸ½éÉÜ¡£
3. ÀàÐÍ
ÈκÎÒ»¸ö±äÁ¿»ò±í´ïʽ¶¼ÓÐÒ»¸öÀàÐÍ£¬ÀàÐ;ö¶¨±äÁ¿¿ÉÄܵÄȡֵ·¶
Χ£¬¾ö¶¨¶ÔÕâЩֵÔÊÐíµÄ²Ù×÷£¬ÒÔ¼°ÕâЩ²Ù×÷µÄÒâÒåÊÇʲô¡£JavaÓïÑÔ
ÖÐÌṩÁËÄÚÖö¨ÒåÀàÐÍ£¬³ÌÐòÔ±Ò²¿ÉÒÔÀûÓÃÀ༰½çÃæ(interface)»úÖÆ¹¹Ôì
ÐÂÀàÐÍ¡£
JavaÓïÑÔÓÐÁ½ÖÖÀàÐÍ£º ¼òµ¥ÀàÐͺ͸´ºÏÀàÐÍ¡£¼òµ¥ÀàÐÍÖ¸ÄÇЩ²»ÄÜ
ÔÙ·Ö¸îµÄÔ×ÓÀàÐÍ¡£È磺ÕûÐÍ¡¢¸¡µãÐÍ¡¢²¼¶ûÐÍ¡¢×Ö·ûÐ;ùΪ¼òµ¥ÀàÐÍ¡£
¸´ºÏÀàÐͽ¨Á¢ÔÚ¼òµ¥ÀàÐ͵Ļù´¡ÉÏ¡£JavaÓïÑÔÓÐÈýÖÖ¸´ºÏÀàÐÍ£ºÊý×é¡¢
À༰½çÃæ¡£ÔÚ±¾½ÚÖУ¬ÎÒÃÇÖ÷ÒªÌÖÂÛ¼òµ¥ÀàÐͼ°Êý×é¡£
3.1 ÊýÖµÀàÐÍ
3.1.1 ÕûÊýÀàÐÍ
ÕûÊýÓëC¼°C++ÖÐÏàËÆ£¬µ«ÓÐÁ½µãÇø±ð£º ÆäÒ»£¬ËùÓеÄÕûÊýÀàÐÍ
¾ùÊǶÀÁ¢ÓÚ»úÆ÷µÄ£»Æä¶þ£¬¶ÔijЩ´«Í³µÄ¶¨Òå×÷³ö¸Ä±ä£¬ÒÔ·´Ó³×ÔCÎÊ
ÊÀÒÔÀ´Ëù´øÀ´µÄ±ä»¯£¬ËÄÖÖÕûÊýÀàÐÍ·Ö±ð¾ßÓÐ8λ¡¢16λ¡¢32λ¼°64
λµÄ¿í¶È£¬²¢ÇÒ¾ùÊÇÓзûºÅµÄ(signed)¡£ÈçÏÂËùʾ£º
¿í¶È
ÀàÐÍÃû
8
byte
16
short
32
int
64
long
Ò»¸ö±äÁ¿µÄÀàÐͲ»»áÖ±½ÓÓ°ÏìËüµÄ´æ´¢µÄ·ÖÅ䣬ÀàÐͽö½ö¾ö¶¨±äÁ¿
µÄËãÊõÐÔÖÊÒÔ¼°ºÏ·¨µÄȡֵ·¶Î§¡£Èç¹û°ÑÒ»¸ö³¬³öºÏ·¨·¶Î§µÄÖµ¸³¸øÒ»
±äÁ¿£¬ÄÇôÕâ¸öÖµ½«ÊǶԺϷ¨ÖµÓòȡģºóµÄÖµ¡£
3.1.2 ¸¡µãÀàÐÍ
¹Ø¼ü×Öfloat±íʾµ¥¾«¶È(32λ)£¬¶ødoubleÔò±íʾ˫¾«¶È(64λ)£¬Á½
¸öfloatÐÍÊýÔËËãµÄ½á¹ûÈÔÊÇfloatÐÍ£¬ÈôÓÐÆäÖÐ֮һΪdoubleÐÍ£¬Ôò½á
¹ûΪdoubleÐÍ¡£¸¡µãÔËËã¼°Êý¾Ý¸ñʽ°´IEEE754Öе͍Ò壬ϸ½ÚÎÊÌâÇë
²ÎÔÄ ¡°¸½Â¼A£º ¸¡µã¡±ÖÐÓйظ¡µãʵÏÖµÄϸ½Ú¡£
3.1.3 ×Ö·ûÀàÐÍ
JavaÈ«²¿Ê¹Ó÷º´úÂë×Ö·û¼¯£¬Òò´ËcharÀàÐÍÊý¾Ý±»¶¨Òå³ÉÒ»¸ö16
λµÄÎÞ·ûºÅÕûÊý¡£
3.2 ²¼¶ûÀàÐÍ
µ±Ò»¸ö±äÁ¿µÄȡֵ»òΪture»òΪfalse£¬»òÕßÊǵ±Ò»¸ö·½·¨µÄ·µ»ØÖµÎªture»òfalseʱ£¬Ëü?
Ƕ¼ÊDz¼¶ûÀàÐ͵ġ£ÁíÍ⣬¹ØÏµÔËËãµÄ½á¹ûÒàÊDz?
¶ûÐ͵ġ£
²¼¶ûÖµ²»ÊÇÊýÖµÐÍ£¬Òò´Ë²»ÄÜÓÃÇ¿ÖÆÀàÐÍת»»°ÑËüÃÇת»¯³ÉÊýÖµ¡£
3.3 Êý×é
Êý×éÔÚJavaÓïÑÔÖÐÊôµÚÒ»Àà¶ÔÏó¡£ÓÉËüÃÇ´úÌæÁËÖ¸ÕëÔËË㣬ËùÓеÄ
¶ÔÏó(°üÀ¨Êý×é)¶¼¿Éͨ¹ý±êʶÀ´ÒýÓ᣼´Ê¹±»µ±×÷ÊýÔËË㣬±êʶµÄÖµÒ²
²»Ó¦±»ÆÆ»µ¡£Í¨¹ýnewÔËËã·û¿É´´½¨Ò»¸öÊý×é¡£
char s[]=new char[30];
Êý×éµÚÒ»ÔªËØµÄϱêΪ0£¬ÔÚÉùÃ÷ÖÐÖ¸¶¨Î¬ÊýÊDz»ÔÊÐíµÄ¡£Ã¿´Î¶¼
±ØÐëÏÔʽµØÓÃnew·ÖÅäÊý×飺
int i [] =new int [3];
JavaÓïÑÔ²»Ö§³Ö¶àάÊý×飬µ«ÊÇ£¬³ÌÐòԱȴ¿ÉÒÔ´´½¨Êý×éµÄÊý×é¡£
int i [ ] [ ]=new int [3][4];
ÖÁÉÙÓÐһάҪÃ÷È·¸ø¶¨£¬¶øÆäËüάÔò¿ÉÔÚÒÔºóÔÙÈ·¶¨¡£ÀýÈ磺
int i[] []=new int [3] [ ]
ÊÇÒ»¸öºÏ·¨µÄÉùÃ÷¡£
³ýÁËÔÚ±äÁ¿Ãû¼°·½·¨Ãûºó¸ú·½À¨ºÅÕâÖÖC·ç¸ñµÄÉùÃ÷Ö®Í⣬JavaÓï
ÑÔÔÊÐí·½À¨ºÅ¸úÔÚÊý×éÀàÐÍÖ®ºó£¬ÏÂÃæÁ½ÐÐÊǵȼ۵ģº
int iarray[ ];
int [ ] iarray;
ͬÑùµØ£¬·½·¨ÉùÃ÷Ò²Ò»Ñù£º
byte f(int n)[ ];
byte [ ] f(int n);
ÔËÐÐʱ¼ì²éϱ걣֤ËüÃÇÊǺϷ¨µÄ£º
int a[ ]=new int [10];
a[5]=1;
a[1]=a[0]+a[2];
a[-1]=4; // ÔËÐÐʱÒý·¢Ò»¸öArrayIndexOutOfBoundsException(Êý×éÏÂ
±êÔ½½ç)Òì³£
a[10]=2; //ÔËÐÐʱÒý·¢Ò»¸öArrayIndexOutOfBoundsException(Êý×éÏÂ
±êÔ½½ç)Òì³£
Êý×éµÄ´óС±ØÐëʹÓÃÕûÊý±í´ïʽ£º
int n;
float arr[ ]=new float[n+1]
Êý×éµÄ³¤¶È¿Éͨ¹ý.length ²éÕÒ£º
int a[] []=new int [10][3];
println (a.length) //´òÓ¡³ö10
println (a[0].length) //´òÓ¡³ö3¡£
3.3.1 Êý×éϸ½Ú
ÎÒÃÇËù¶¨ÒåµÄÊý×é¶¼ÊÇObjectÀàµÄÒ»¸ö×ÓÀàµÄʵÀý£¬ÔÚÀàµÄ²ã´Î½á
¹¹ÖÐÓÐÒ»¸ö±»³ÆÎªArrayµÄ×ÓÀ࣬ËüÓÐÒ»¸öʵÀý±äÁ¿¡°length¡±¡£¶Ôÿ
Ò»¸ö»ù±¾ÀàÐÍ£¬¶¼ÓÐÒ»¸öÏàÓ¦µÄArrayµÄ×ÓÀࡣͬÀí£¬Ã¿Ò»¸öÀàÒ²¶¼ÓÐ
Ò»¸öÏàÓ¦µÄArray×ÓÀà´æÔÚ¡£ÀýÈ磺 new Thread[n] ´´½¨Ò»¸öThread[ ]
µÄʵÀý¡£Èç¹ûÀàAÊÇÀàBµÄ³¬À࣬ÄÇô£¬A[]ÊÇB[]µÄ³¬À࣬¼ûÏÂͼ£º
Object
Array A
int[] float[] A[] B
B[]
Òò´Ë£¬¿ÉÒÔ°ÑÊý×鸳¸øÒ»¸öObject±äÁ¿¡£
Object o;
int a[]=new int [10];
o=a;
²¢ÇÒ¿Éͨ¹ýÇ¿ÖÆÀàÐÍת»»°Ñobject±äÁ¿¸³¸øÒ»Êý×é±äÁ¿¡£
a=(int [])o;
ArrayÀà±¾Éí²»ÄÜÏÔʽµØ²úÉú×ÓÀà¡£
4. Àà
Àà(class)ÊÇ´«Í³ÃæÏò¶ÔÏó±à³ÌÄ£Ð͵ÄÏóÕ÷¡£ËüÃÇÖ§³ÖÊý¾Ý³éÏóÒÔ¼°Êµ
ÏÖ¶ÔÊý¾ÝµÄÔ¼Êø£¬ÔÚJavaÖУ¬Ã¿Ò»¸öеÄÀà´´½¨Ò»¸öÐÂÀàÐÍ¡£
ÒªÏëµÃµ½Ò»¸öеÄÀ࣬³ÌÐòÔ±±ØÐëÊ×ÏÈÕÒµ½Ò»¸öÒÑÓеÄÀ࣬ÐÂÀ༴
ÔÚÕâ¸öÒÑÓÐÀàµÄ»ù´¡ÉϹ¹Ô죬ÎÒÃdzÆÖ®ÎªÅÉÉú(derived)¡£ÅÉÉú³öµÄÀàÒà³Æ
ΪÔÀ´ÀàµÄ×ÓÀ࣬¶øÕâ¸öÀàÎÒÃdzÆÎª³¬Àà(super class)¡£
ÀàµÄÅÉÉú¾ßÓд«µÝÐÔ£º Èç¹ûBÊÇAµÄ×ÓÀ࣬CÊÇBµÄ×ÓÀ࣬ÔòC
ÊÇAµÄ×ÓÀà¡£
Ò»¸öÀàµÄÖ±½Ó³¬ÀàÒÔ¼°Ö¸Ê¾Õâ¸öÀàÈçºÎʵÏֵĽçÃæ(interface)£¬ÔÚÀà
µÄÉùÃ÷ÖУ¬Óɹؼü×Öextends¼°implements±ê³ö¡£ÈçÏÂʾ(ºÚÌå±íʾ¹Ø¼ü×Ö)£º£º
[doc_ comment] [modifer] class ClassName
extends Superclassname
implements interface {£¬interface } ] {
class body
}
¾ÙÀý£º
/** 2 dimension point */
public class Points {
float x£¬y;
......
}
/** printable point */
class PinttablePoint extends Points implements Printable {
......
public void Print ( ) {
}
}
ËùÓеÄÀà¾ù´ÓÒ»¸ö¸ùÀà ObjectÖÐÅÉÉú³öÀ´¡£³ýObjectÖ®ÍâµÄÈκÎÀà
¶¼ÓÐÒ»¸öÖ±½Ó³¬Àà¡£Èç¹ûÒ»¸öÀàÔÚÉùÃ÷ʱδָÃ÷ÆäÖ±½Ó³¬À࣬ÄÇôȱʡ
¼´ÎªObject¡£ÈçÏÂÊö£º
class Point {
float x£¬y
}
ÓëÏÂÃæÐ´·¨µÈ¼Û
class Point extends Object {
float x£¬ y£»
}
JavaÓïÑÔ½öÖ§³Öµ¥¼Ì³Ð£¬Í¨¹ýÒ»¸ö±»³Æ×÷¡°½çÃæ¡±µÄ»úÖÆ£¬À´Ö§³Ö
ijЩÔÚÆäËüÓïÑÔÖÐÓöà¼Ì³ÐʵÏֵĻúÖÆ(Ïê¼û¡°½çÃæ¡±Ò»½Ú)¡£JavaÖ®Ëù
ÒÔûÓвÉÓÃC++µÄ¶à¼Ì³Ð»úÖÆ£¬ÊÇΪÁ˱ÜÃâ¶à¼Ì³Ð´øÀ´µÄÖî¶à²»±ã£¬Àý
È磺¿ÉÄܲúÉúµÄ¶þÒåÐÔ£¬±àÒëÆ÷¸ü¼Ó¸´ÔÓ£¬³ÌÐòÄÑÒÔÓÅ»¯µÈÎÊÌâ¡£
4.1 ÀàÀàÐÍÖ®¼äµÄÇ¿ÖÆ×ª»»
JavaÓïÑÔÖ§³ÖÔÚÁ½¸öÀàÐÍÖ®¼äµÄÇ¿ÖÆ×ª»»£¬ÒòΪÿ¸öÀ༴ÊÇÒ»¸öÐÂ
µÄÀàÐÍ¡£JavaÖ§³ÖÀàÀàÐÍÖ®¼äµÄÇ¿ÖÆ×ª»»£¬Èç¹ûBÊÇAµÄ×ÓÀ࣬ÄÇôB
µÄÒ»¸öʵÀýÒà¿É×÷ΪAµÄʵÀýÀ´Ê¹Óã¬ËäÈ»²»ÐèÒªÏÔʽµÄת»»£¬µ«ÏÔʽ
ת»»ÒàÊǺϷ¨µÄ£¬Õâ±»³Æ×÷ÍØ¿í(widening)¡£Èç¹ûAµÄÒ»¸öʵÀý£¬Ïëµ±×÷
BµÄʵÀýʹÓ㬳ÌÐòÔ±¾ÍӦдһ¸öÀàÐÍת»»½Ð×÷Ï÷Õ£¨narrowing£©µÄÇ¿
ÖÆ¡£´ÓÒ»¸öÀൽÆä×ÓÀàµÄÇ¿ÖÆ×ª
»»ÔÚÔËÐÐʱҪ×÷ÀýÐеļì²éÒÔÈ·±£Õâ¸ö¶ÔÏó¾ÍÊÇÆä×ÓÀàµÄÒ»¸öʵÀý
(»òÆä×ÓÀàÖ®Ò»)¡£ÐÖµÜÀàÖ®¼äµÄÇ¿ÖÆÀàÐÍת»»ÊÇÒ»¸ö±àÒë´íÎó£¬ÀàµÄÇ¿ÖÆ×ª»»µÄÓï·¨ÈçÏÂ?
?
(classname) ref
ÆäÖУ¬(classname)ÊÇҪת»»µÄÄ¿µÄÀ࣬¶ørefÊDZ»×ª»»µÄ¶ÔÏó¡£
Ç¿ÖÆ×ª»»½ö½öÓ°Ïìµ½¶ÔÏóµÄÒýÓ㬶ø²»»áÓ°Ïì¶ÔÏó±¾Éí¡£È»¶ø£¬¶ÔʵÀý
±äÁ¿µÄ·ÃÎÊÈ´Êܵ½¶ÔÏó
ÒýÓõÄÀàÐ͵ÄÓ°Ïì¡£Ò»¸ö¶ÔÏó´ÓÒ»¸öÀàÐ͵½ÁíÒ»ÀàÐ͵ÄÇ¿ÖÆ×ª»»ºó£¬
¿ÉÒÔʹͬһ±äÁ¿Ãû¶Ô²»Í¬µÄʵÀý±äÁ¿·ÃÎÊ¡£
class ClassA{
String name = "ClassA"
}
class ClassB extends ClassA { //ClassBÊÇClassAµÄ×ÓÀà
String name="ClassB";
}
class AccessTest {
void test( ) {
ClassB b=new ClassB( );
println (b.name); //´òÓ¡£º ClassB
ClassA a
a=(ClassA)b;
println (a.name); //´òÓ¡£º ClassA
}
}
4.2 ·½·¨
·½·¨(method)ÊÇ¿ÉÊ©ÓÚ¶ÔÏó»òÀàÉϵIJÙ×÷£¬ËüÃǼȿÉÔÚÀàÖУ¬Ò²¿ÉÔÚ
½çÃæÖÐÉùÃ÷¡£µ«ÊÇËûÃÇÈ´Ö»ÄÜÔÚÀàÖÐʵÏÖ(JavaÖÐËùÓÐÓû§¶¨ÒåµÄ²Ù×÷¾ù
Ó÷½·¨À´ÊµÏÖ)¡£
ÀàÖеķ½·¨ÉùÃ÷°´ÒÔÏ·½Ê½£º
[Doc_ comment] [Access Specifiers] ReturnType methodName(parameterList)
{
method body(±¾µØµÄnative¼°³éÏóµÄ·½·¨Ã»ÓÐÌ岿·Ö)
}
³ý¹¹Ô캯Êý¿ÉÒÔÎÞ·µ»ØÀàÐÍÍ⣬ÆäÓàµÄ·½·¨¶¼ÓÐÒ»¸ö·µ»ØÀàÐÍ¡£Èç
¹ûÒ»¸ö²»Êǹ¹Ô캯ÊýµÄ·½·¨²»·µ»ØÈκÎÖµ£¬ÄÇôËü±ØÐëÓÐÒ»¸övoidµÄ·µ
»ØÀàÐÍ¡£
²ÎÊý±íÓɶººÅ·Ö¸ôµÄ³É¶ÔµÄÀàÐͼ°²ÎÊýÃû×é³É£¬Èç¹û·½·¨ÎÞ²ÎÊý£¬
Ôò²ÎÊý±íΪ¿Õ¡£·½·¨ÄÚ²¿¶¨ÒåµÄ±äÁ¿(¾Ö²¿±äÁ¿)²»ÄÜÒþ²ØÍ¬Ò»·½·¨µÄÆä
Ëü±äÁ¿»ò²ÎÊý¡£ÀýÈ磺 Èç¹ûÒ»¸ö·½·¨´øÒÔÃûΪiµÄ²ÎÊýʵÏÖ£¬ÇÒ·½·¨ÄÚ
ÓÖ¶¨ÒåÒ»¸öÃûΪiµÄ¾Ö²¿±äÁ¿£¬Ôò»á²úÉú±àÒë´íÎó£¬ÀýÈ磺
class Rectangle {
void vertex (int i£¬int j) {
for (int i=0; i<=100; i++) { //³ö´í
¡
}
}
}
·½·¨ÌåÄÚÑ»·Óï¾äÖÐÉùÃ÷µÄiÊÇÒ»¸ö±àÒë´íÎó¡£
JavaÓïÑÔÔÊÐí¶à̬·½·¨ÃüÃû£¬¼´ÓÃÒ»¸öÃû×ÖÉùÃ÷·½·¨£¬Õâ¸öÃû×ÖÒÑ
ÔÚÕâ¸öÀà»òÆä³¬ÀàÖÐʹÓùý£¬´Ó¶øÊµÏÖ·½·¨µÄ¸²¸Ç(overriding)¼°ÖØÔØ
(overloadding)¡£Ëùν¸²¸ÇÊǶԼ̳ÐÀ´µÄ·½·¨ÌṩÁíÒ»ÖÖ²»Í¬µÄʵÏÖ¡£¶ø
ÖØÔØÊÇÖ¸ÉùÃ÷Ò»¸ö·½·¨£¬ËüÓëÁíÍâÒ»¸ö·½·¨ÓÐÏàͬµÄÃû×Ö£¬µ«²ÎÊý±í²»Í¬¡£
×¢£º ·µ»ØÀàÐͲ»ÄÜÓÃÀ´Çø±ð·½·¨£¬¼´ÔÚÒ»¸öÀàµÄ·¶Î§ÄÚ£¬¾ßÓÐÏàͬ
µÄÃû×Ö£¬ÏàͬµÄ²ÎÊý±í(°üÀ¨¸öÊý¡¢Î»Öü°ÀàÐÍ)µÄ·½·¨£¬±ØÐë·µ»ØÏàͬ
µÄÀàÐÍ¡£ÈôÕâÑùµÄÁ½¸ö·½·¨Óв»Í¬µÄ·µ»ØÀàÐÍ£¬½«»á²úÉúÒ»¸ö±àÒë´íÎó¡£
4.2.1 ʵÀý±äÁ¿
ʵÀý±äÁ¿(instance variables)ÊÇÖ¸ÄÇЩÔÚÀàÄÚÉùÃ÷£¬µ«ÔÚ·½·¨µÄ×÷ÓÃ
ÓòÖ®ÍâÉÐδ±»static±ê¼ÇµÄ±ä( ²ÎÕÕ ¡°¾²Ì¬·½·¨£¬±äÁ¿¼°³õʼ»¯¡±¶Î)¡£
¶øÔÚÒ»¸ö·½·¨µÄ×÷ÓÃÓòÖ®ÄÚÉùÃ÷µÄ±äÁ¿ÊǾֲ¿±äÁ¿¡£ÊµÀý±äÁ¿¿ÉÒÔÓÐÐÞ
Êηû(¼ûÐÞÊηû)¡£
ʵÀý±äÁ¿¿ÉÒÔÊÇÈκεÄÀàÐÍ£¬²¢ÇÒ¿ÉÒÔÓгõʼֵ¡£Èç¹ûÒ»¸öʵÀý±ä
Á¿ÎÞ³õʼֵ£¬Ëü½«±»³õʼ»¯³É0¡£²¼¶ûÐͱäÁ¿±»³õʼ»¯³Éflase£¬¶ÔÏó±»
³õʼ»¯³Énull¡£ÏÂÃæÊÇÒ»¸öʵÀý±äÁ¿j¾ßÓгõʼ»¯ÖµµÄÀý×Ó£º
class A{
int j =23;
¡¡
}
4.2.2 this ºÍsuper±äÁ¿
ÔÚÒ»¸ö·Ç¾²Ì¬·½·¨µÄ×÷ÓÃÓòÄÚ£¬thisÕâ¸öÃû×Ö´ú±íÁ˵±Ç°¶ÔÏó¡£Àý
È磺 Ò»¸ö¶ÔÏó¿ÉÄÜÐèÒª°Ñ×Ô¼º×÷Ϊ²ÎÊý´«¸øÁíÒ»¸ö¶ÔÏóµÄ·½·¨£º
class MyClass {
void Method (OtherClass obj) {
¡
obj.Method (this)
¡
}
}
²»ÂÛºÎʱ£¬Ò»¸ö·½·¨ÒýÓÃËü×Ô¼ºµÄʵÀý±äÁ¿¼°·½·¨Ê±£¬ÔÚÿ¸öÒýÓÃ
µÄÇ°Ãæ¶¼Òþº¬×Å¡°this¡±¡£
È磺
class Foo {
int a£¬b£¬c;
......
void myPrint ( ) {
print (a+ "\n"); // a=="this.a"
}
......
}
super±äÁ¿ÀàËÆÓÚthis±äÁ¿¡£this±äÁ¿Êµ¼ÊÉÏÊǶԵ±Ç°¶ÔÏóµÄÒýÓã¬
ËüµÄÀàÐ;ÍÊǰüº¬µ±Ç°ÕýÔÚ´¦ÀíµÄ·½·¨µÄÀà¡£¶øsuper±äÁ¿ÔòÊÇ¶ÔÆä³¬Àà
ÀàÐͶÔÏóµÄÒýÓá£
4.2.3 ÉèÖþֲ¿±äÁ¿
·½·¨¶¼Òª¾¹ýÑϸñµÄ¼ì²é£¬ÒÔÈ·±£ËùÓеľֲ¿±äÁ¿(ÔÚ·½·¨ÄÚÉùÃ÷µÄ
±äÁ¿)ÔÚ±»ÒýÓÃ֮ǰÒÑÉè³õ£¬±»³õʼ»¯Ö®Ç°¾ÍʹÓþֲ¿±äÁ¿ÊÇÒ»¸ö±àÒë´í
Îó¡£
4.3 ¸²¸Ç·½·¨
ÒªÏ븲¸Ç(overiding)Ò»¸ö·½·¨£¬±ØÐëÔÚÉùÃ÷Õâ¸ö·½·¨µÄÀàµÄ×ÓÀàÖÐÉù
Ã÷Ò»¸öÓëËü¾ßÓÐÏàͬÃû×Ö£¬Ïàͬ·µ»ØÀàÐÍ£¬ÒÔ¼°Ïàͬ²ÎÊý±íµÄ·½·¨¡£µ±
×ÓÀàµÄʵÀýµ÷ÓÃÕâ¸ö·½·¨Ê±£¬±»µ÷ÓõÄÊÇж¨ÒåµÄ·½·¨¶ø²»ÊÇ×î³õµÄÄÇ
¸ö¡£±»¸²¸ÇÁ˵ķ½·¨¿Éͨ¹ýsuper±äÁ¿À´µ÷Óã¬ÈçÏ£º
setThermostat(¡) //Ö¸¸²¸ÇµÄ·½·¨
super. setThermostat(¡) //Ö¸±»¸²¸ÇµÄ·½·¨
4.4 ÖØÔØµÄÈ϶¨
ÖØÔØ(overload)µÄ·½·¨ÓëÒÑÓеÄij¸ö·½·¨Í¬Ãû£¬µ«ÊDZäÔªµÄ¸öÊý¼°/
»òÀàÐͲ»Í¬£¬ÖØÔصÄÈ϶¨ÊÇÒª¾ö¶¨µ÷ÓõÄÊÇÄÄÒ»¸ö·½·¨£¬ÔÚÈ϶¨ÖØÔصÄ
·½·¨Ê±£¬²»¿¼ÂÇ·µ»ØÀàÐÍ¡£·½·¨¿ÉÒÔÔÚͬһÀàµÄÄÚ²¿ÖØÔØ£¬ÀàÄÚ²¿·½·¨
ÉùÃ÷µÄ˳Ðò²¢²»ÖØÒª¡£
¿Éͬʱ¸Ä±ä±äÔª¸öÊýºÍÀàÐÍÀ´ÊµÏÖ·½·¨µÄÖØÔØ¡£ ±àÒëÆ÷È϶¨ÏàÆ¥Åä
µÄ·½·¨Ê±ÒÔ×îµÍµÄÀàÐÍת»»¿ªÏúΪ׼¡£Ö»ÓоßÓÐÏàͬÃû×Ö¼°Ïàͬ±äÔª¸ö
ÊýµÄ·½·¨²Å»áÓÅÏÈ¿¼ÂÇ¡£ËùÓбäÔª¶¼±ØÐëת»»£¬ÊÇÆ¥Åä·½·¨Ê±µÄ×î´ó¿ª
Ïú¡£ÓÐÁ½ÖÖ±äÔªÀàÐÍÊDZØÐ迼Âǵģº¶ÔÏóÀàÐͺͻù±¾ÀàÐÍ¡£
¶ÔÏóÀàÐͼäת»»µÄ¿ªÏúµÄ´óСָÀàÊ÷ÉÏʵÔÚ²ÎÊýµÄÀàÓëÔÐͲÎÊýµÄ
ÀàÖ®¼äÁ¬ÏߵĸöÊý¡£Ö»¿¼ÂÇÍØ¿íÐÍת»»(¶ÔÏóÀàÐÍת»»µÄÏêϸÐÅÏ¢£¬Çë²Î
ÔÄ¡°ÀàÖ®¼äµÄÇ¿ÖÆÀàÐÍת»»¡±)¡£¶ÔÓÚÀàÐÍÍêȫƥÅäµÄ±äÔª£¬ÎÞÐë½øÐÐת
»»£¬ËüÃǵĿªÏúΪÁã¡£
»ù±¾ÀàÐ͵Äת»»¿ªÏú°´ÏÂ±í¼ÆË㣬¿ªÏúΪÁãÊÇÑϸñÆ¥Åä¡£
to
byte short char int long float double
byte 0 1 2 3 4 6 7
short 10 0 10 1 2 4 5
from char 11 10 0 1 2 4 5
int 12 11 11 0 1 5 4
long 12 11 11 10 0 6 5
float 15 14 13 12 11 0 1
double 16 15 14 13 12 10 0
×¢£º¿ªÏú >=10 Ò×ÒýÆðÊý¾Ý¶ªÊ§¡£
Ò»¾È϶¨Ä³Ò»Æ¥Åä·½·¨ÊÇÄÄÖÖת»»¿ªÏú£¬±àÒëÆ÷ÔòÑ¡ÓÃת»»¿ªÏú×î
СµÄÆ¥Åä¡£Èç¹ûÓжàÓÚÒ»¸ö·½·¨£¬Æä×îС¿ªÏúÏàͬ£¬ÔòÆ¥ÅäÓжþÒåÐÔ£¬
Òª³ö±àÒëʱµÄ´íÎó¡£
ÀýÈ磺
class A{
int method (Object o, Thread t);
int method(Thread t,Object o);
void g(Object o,Thread t){
method(o,t); //µ÷ÓõÚÒ»¸ö·½·¨
method(t,o); //µ÷Óõڶþ¸ö·½·¨
method(t,t); //ÓжþÒåÐÔ£¬±àÒë³ö´í
£ý
£ý
4.5 ¹¹Ô캯Êý
¹¹Ô캯Êý(constructor)ÊÇÌṩ³õʼ»¯µÄרÓ÷½·¨¡£ËüºÍÀàµÄÃû×ÖÏàͬ£¬
µ«Ã»ÓÐÈκηµ»ØÀàÐÍ¡£¹¹Ô캯ÊýÔÚ¶ÔÏó´´½¨Ê±±»×Ô¶¯µØµ÷Óã¬Ëü²»Äܱ»
¶ÔÏóÏÔʽµ÷Óá£Èç¹ûÄãÏëÔÚ°ü(package)Ö®Íâµ÷Óù¹Ô캯Êý£¬¾Í½«¹¹Ô캯
ÊýÉèΪ¡°public¡±(²Î¼û¡°·ÃÎÊÖ¸Ã÷·û¡°Ò»½Ú)¡£
¹¹Ô캯ÊýÒ²¿ÉÒÔÓò»Í¬¸öÊýºÍÀàÐ͵IJÎÊýÖØÔØ£¬¾ÍÏóÆäËüµÄ·½·¨±»
ÖØÔØÒ»Ñù¡£
class Foo {
int x;
float y;
Foo() {
x=0;
y=0.0;
}
Foo (int a ) {
x=a;
y=0.0;
}
Foo (float a ) {
x=0;
y=a;
}
Foo (int a£¬float b ) {
x=a;
y=b;
}
static void myFoo( ) {
Foo obj1=new Foo( ); //µ÷ÓÃFoo( );
Foo obj2=new Foo(4 ); //µ÷ÓÃFoo( int a );
Foo obj3=new Foo(4.0 ); //µ÷ÓÃFoo( float a );
Foo obj4=new Foo(4,4.0 ); //µ÷ÓÃFoo(int a £¬ float b );
}
}
³¬ÀàµÄʵÀý±äÁ¿Óɵ÷Óó¬ÀàµÄ»òµ±Ç°ÀàµÄ¹¹Ô캯Êý³õʼ»¯¡£Èç¹ûÔÚ
´úÂëÖÐûÓÐÖ¸¶¨ÓÉ˳õʼ»¯£¬Ôòµ÷ÓõÄÊdz¬ÀàÖеÄÎÞ²ÎÊýµÄ¹¹Ô캯Êý¡£
Èç¹ûÒ»¸ö¹¹Ô캯Êýµ÷ÓÃÁËÕâ¸öÀà»òÆäÖ±½Ó³¬ÀàµÄÁíÒ»¸ö¹¹Ô캯Êý£¬Õâ¸ö
µ÷ÓñØÐëÊǹ¹Ô캯ÊýÌåµÄµÚÒ»ÌõÓï¾ä£¬ÔÚµ÷Óù¹Ô캯Êý֮ǰʵÀý±äÁ¿²»
ÒýÓá£
µ÷ÓÃÖ±½Ó³¬ÀàµÄ¹¹Ô캯ÊýÈçÏ£º
class MyClass extends OtherClass {
MyClass (someParamenters ) {
/* µ÷Óø¸À๹Ô캯Êý */
super(otherParameters);
} ¡
}¡
µ÷Óõ±Ç°ÀàµÄ¹¹Ô캯ÊýÈçÏÂʾ£º
class MyClass extends OtherClass {
MyClass (someParameters) {
¡
}
MyClass(otherParameters) {
/*µ÷Óõ±Ç°ÀàµÄ¹¹Ô캯Êý£¬¸Ãº¯ÊýÓÐÖ¸¶¨µÄ²ÎÊý±í*/
this (someParameters);
¡
}
¡
}
ÏÂÃæµÄFooºÍFooSubÀàµÄ·½·¨ÖÐʹÓù¹Ô캯ÊýµÄÀý×Ó£º
class Foo extends Bar {
int a;
Foo(int a) {
//Òþº¬µ÷ÓÃBar( )
this.a=a;
}
Foo( ) {
this (42); //µ÷ÓÃFoo(42)£¬´úÌæBar( )
}
}
class FooSub extends Foo {
int b;
FooSub (int b) {
super(13); //µ÷ÓÃFoo(13); È¥µô´ËÐн«µ÷ÓÃFoo( )
this.b=b;
}
}
4.6 ÓÃnewÔËËã·û´´½¨¶ÔÏó
ÀàÊÇÓÃÀ´¶¨Òå¶ÔÏóµÄ״̬ºÍÐÐΪµÄÄ£°å£¬¶ÔÏóÊÇÀàµÄʵÀý¡£ÀàµÄËù
ÓÐʵÀý¶¼·ÖÅäÔÚ¿É×÷ÎÞÓõ¥Ôª»ØÊյĶÑÖС£ÉùÃ÷Ò»¸ö¶ÔÏóÒýÓò¢²»»áΪ
¸Ã¶ÔÏó·ÖÅä´æ´¢£¬³ÌÐòÔ±±ØÐëÏÔʽµØÎª¶ÔÏó·ÖÅä´æ´¢£¬µ«²»±ØÏÔʽɾ³ý
´æ´¢£¬ÎÞÓõ¥Ôª»ØÊÕÆ÷»á×Ô¶¯»ØÊÕÎÞÓõÄÄÚ´æ¡£
·ÖÅä¶ÔÏó´æ´¢ÓÃnewÔËËã·û¡£³ýÁË·ÖÅä´æ´¢Ö®Í⣬new»¹³õʼ»¯Êµ
Àý±äÁ¿£¬µ÷ÓÃʵÀýµÄ¹¹Ô캯Êý¡£¹¹Ô캯ÊýÊdzõʼ»¯¶ÔÏóµÄÒ»ÖÖ·½·¨(¼û¡°¹¹
Ô캯Êý¡±)£¬ÏÂÃæµÄÀý×ÓÊÇ·ÖÅä²¢³õʼ»¯ClassAµÄÒ»¸öʵÀý£º
a = new ClassA( );
ÒÔϹ¹Ô캯ÊýÊÇ´øÓвÎÊýµÄÀý×Ó£º
b = new ClassA(3,2);
·ÖÅäµÄµÚÈýÖÖÐÎʽÔÊÐíÒÔ´®±í´ïʽÐÎʽÌṩÀàÃû×Ö£¬×Ö·û´®ÔÚÔËÐÐ
ʱ¿ÌÇóÖµ£¬new·µ»ØÒ»¸öObjectÀàÐ͵ĶÔÏó£¬ÔÙת»»³ÉËùÏ£ÍûµÄÀàÐÍ¡£
b = new ("class"+"A");
ÕâÖÖÇé¿öÏ£¬µ÷Óù¹Ô캯ÊýʱÎÞÐè²ÎÊý¡£
4.6.1 ÎÞÓõ¥ÔªÊÕ¼¯
ÎÞÓõ¥ÔªÊÕ¼¯Æ÷(Garbage Collector)ʹ´æ´¢¹ÜÀíµÄÐí¶à·½Ãæ±äµÃ¼ò
µ¥¡¢°²È«¡£³ÌÐò²»ÐèÒªÏÔʽÊÍ·ÅÄڴ棬ËüÊÇ×Ô¶¯´¦ÀíµÄ¡£ÎÞÓõ¥ÔªÊÕ¼¯
Æ÷²»»áÊÍ·ÅÕýÔÚ±»ÒýÓõÄÄڴ棬ֻÊÍ·ÅÄÇЩ²»ÔÙ±»ÒýÓõĿռ䡣Õâ¾Í·À
Ö¹ÁËÐü¹ÒÖ¸ÕëºÍ´æ´¢Â©¶´(leak)¡£ËüҲʹÉè¼ÆÈËÔ±´ÓϵͳµÄ´æ´¢¹ÜÀíÖнâ
ÍѳöÀ´¡£
4.6.2ÖÕÖ¹
JavaµÄ¹¹Ô캯ÊýÍê³ÉÒ»¸ö¶ÔÏó³õʼ»¯¹¤×÷£¬JavaµÄÖÕÖ¹
(finalization)·½·¨ÔòÍê³ÉºÍÎö¹¹º¯ÊýÀàËÆµÄ¹¦ÄÜ£¬µ«ÓëC++²»Í¬Ö®´¦£¬ÊÇ
Ëü¿ÉÏÔʽµ÷Óá£ËäÈ»JavaµÄÎÞÓõ¥ÔªµÄ»ØÊÕ¹¦ÄÜ¿ÉÒÔ×Ô¶¯µØÊͷŶÔÏóËù
Õ¼ÓеÄ×ÊÔ´£¬µ«ÊǶÔÏóÕ¼ÓеÄijЩ×ÊÔ´£¬ÀýÈ磺 ÎļþÃèÊö·û¡¢Ì×½Ó×Ö
(socket)£¬ÎÞÓõ¥Ôª»ØÊÕÊÇÎÞ·¨´¦ÀíµÄ¡£ËùÒÔ³ÌÐòÔ±±ØÐëÓÃÖÕÖ¹º¯ÊýÀ´´¦
Àí¡£ÖîÈ磺¹Ø±Õ´ò¿ªµÄÎļþ£¬ÖÕÖ¹ÍøÂçÁ¬½ÓµÈ³ÌÐòÉÆºó¹¤×÷¡£
ÏÂÃæµÄÀý×ÓÊÇÈ¡×ÔJava FileOutpntStreamÀàÖеÄÖÕÖ¹º¯Êý¡£Õâ¸öÖÕÖ¹
º¯ÊýÊÇÒ»¸öʵÀýµÄ·½·¨£¬Ã»ÓвÎÊý£¬Ò²ÎÞ·µ»ØÖµ£¬Ãû×Ö±ØÐëÈ¡finalize()¡£
ÕâÀïÎÒÃÇӦעÒâËüºÍC++Îö¹¹º¯ÊýµÄÇø±ð£º
/**
* closes the stream when garbage is collected
* checks the file descriptor first to make sure it
* is not already closed.
*/
protected void finalize( ) throws IOException {
if (fd!=null) close();
}
ÏÂÃæÊǹØÓÚÖÕÖ¹º¯ÊýµÄ¼¸µã×¢ÒâÊÂÏ
* Èç¹ûÒ»¸ö¶ÔÏóº¬ÓÐÖÕÖ¹º¯Êý£¬ÄÇôÕâ¸ö·½·¨£¬ÔÚϵͳÊÕ¼¯¸Ã¶ÔÏóËùÕ¼
ÄÚ´æÖ®Ç°±»µ÷Óá£
* Java½âÊÍÆ÷¿ÉÄÜÔÚûÓÐÍê³ÉÎÞÓõ¥ÔªÊÕ¼¯µÄÇé¿öÏÂÍ˳ö£¬ÄÇôijЩÖÕ
Ö¹º¯Êý²»¿ÉÄܱ»µ÷Óá£ÔÚÕâÖÖÇé¿öÏ£¬Î´ÊͷŵÄ×ÊԴͨ³£ÓɲÙ×÷ϵͳÀ´
´¦Àí¡£
* JavaµÄÎÞÓõ¥ÔªµÄÊÕ¼¯·¢ÉúµÄʱ¿ÌÊDz»È·¶¨µÄ£¬Òò´Ë£¬JavaÎÞ·¨±£Ö¤
ÔÚºÎʱµ÷ÓÃÖÕÖ¹º¯Êý¡¢ÖÕÖ¹º¯ÊýµÄµ÷ÓôÎÐò¡¢ÒÔ¼°ÓÉÄÄÒ»¸öÏß³ÌÖ´ÐÐÖÕ
Ö¹º¯Êý¡£
* ÔÚÖÕÖ¹º¯Êý±»µ÷ÓÃʱ£¬¶ÔÏó»á²»Á¢¿Ì±»»ØÊÕ¡£ÒòΪÖÕÖ¹º¯ÊýҪʹÓöÔ
ÏóµÄthisÖ¸Õë×öijЩ´¦Àí£¬Òâζ×ŶÔÏóÓÖ±»ÒýÓÃÁË¡£Ö»ÓÐÔÚfinalize()Ö´
ÐÐÖ®ºó£¬ÎÞÓõ¥ÔªÊÕ¼¯³ÌÐò²ÅÓпÉÄÜ´¦Àí¸Ã¶ÔÏó¡£
* ÉÏÃæÀý×ÓÖУ¬ÖÕÖ¹º¯Êý¿ÉÒÔÒý·¢Ò»¸öÒì³£¡£µ«ÊÇÈç¹ûÔÚÖÕÖ¹º¯ÊýÖз¢
ÉúÁËÆäËüÒì³££¬½«±»ÏµÍ³ºö¡£
4.6.3 nullÒýÓÃ
¹Ø¼ü×ÖnullÊÇÒ»¸öÔ¤¶¨ÒåµÄ³£Á¿£¬±íʾ¡°ÎÞʵÀý¡±¡£null¿ÉÒÔÓÃÔÚ
ʵÀýÄܹ»³öÏÖµÄÈκεط½£¬¿ÉÒÔ±»×ª»»³ÉÈκÎÀàÀàÐÍ¡£
4.7 ¾²Ì¬·½·¨£¬±äÁ¿ºÍ³õʼ»¯
±äÁ¿ºÍ·½·¨¶¼¿ÉÒÔÉùÃ÷Ϊ¾²Ì¬£¨static£©µÄ£¬ÕâÑùËüÃÇÖ»ÄÜÓÃÓÚÀà±¾
Éí£¬¶ø²»ÊÇÀàµÄʵÀý¡£´ËÍ⣬ÀඨÒåÖеÄÒ»¿é´úÂëÒ²¿ÉÒÔÉùÃ÷Ϊ¾²Ì¬µÄ¡£
ÕâÑùµÄ³ÌÐò¿é½Ð×ö¾²Ì¬³õʼ»¯¶Î¡£
¾²Ì¬±äÁ¿¿ÉÒÔÓгõÖµ£¬¾ÍÏóʵÀý±äÁ¿Ò»Ñù£¬£¨²Î¼ûµÄ¡°³õʼ»¯Ë³Ðò¡±£©¡£
¾²Ì¬±äÁ¿Ö»ÔÚÀàÖгöÏÖÒ»´Î£¬¶ø²»ÂÛÕâ¸öÀàÓжàÉÙ¸öʵÀý¡£¾²Ì¬±äÁ¿ºÍ
·½·¨¶¼ÊÇͨ¹ýÀàÃû×ÖÀ´·ÃÎʵġ£Îª·½±ãÆð¼û£¬Ò²¿ÉÒÔÓÃÀàʵÀýÀ´·ÃÎÊ¡£
class Ahem {
int i; //ʵÀý±äÁ¿
static int j; //¾²Ì¬±äÁ¿
static int arr[ ] = new int[12];
static { //¾²Ì¬³õʼ³ÉÔ±£¬³õʼ»¯Êý×é
for (int i =0; i ¡´arr. length; i++) {
arr[i] =i;
}
}
void seti(int i) { //ʵÀý·½·¨
this.i =i;
}
static void setj (int j) { //¾²Ì¬·½·¨
Ahem.j=j;
}
static void clearThroat( ) {
Ahem a = new Ahem ();
Ahem.j=2; //ÓÐЧ£º ͨ¹ýÀà·ÃÎʾ²Ì¬±äÁ¿
a.j =3; //ÓÐЧ£º ͨ¹ýʵÀý·ÃÎʾ²Ì¬±äÁ¿
Ahem.setj(2); //ÓÐЧ£º ͨ¹ýÀà·ÃÎʾ²Ì¬·½·¨
a.setj(3); //ÓÐЧ£º ͨ¹ýʵÀý·ÃÎʾ²Ì¬·½·¨
a.i=4; //ÓÐЧ£º ͨ¹ýʵÀý·ÃÎÊʵÀý±äÁ¿
Ahem.i=5; //´íÎó£º Í¨¹ýÀà·ÃÎÊʵÀý±äÁ¿
a.seti(a); //ÓÐЧ£º ͨ¹ýʵÀý·ÃÎÊʵÀý·½·¨
Ahem.seti(5); //´íÎó£º Í¨¹ýÀà·ÃÎÊʵÀý·½·¨
}
}
7.1 ÉùÃ÷µÄ˳Ðò
ÀàºÍËüµÄ·½·¨ÒÔ¼°ÊµÀý±äÁ¿ÉùÃ÷µÄ´ÎÐò²¢²»ÖØÒª£¬µ«Êdzõʼ»¯Ê±Ñ
»·ÒÀÀµÊÇ´æÔڵġ£Óйسõʼ»¯Ê±Ñ»·ÒÀÀµµÄÐÅÏ¢²Î¼û¡°³õʼ»¯Ë³Ðò¡±Ò»
½Ú¡£·½·¨¿ÉÒÔ×ÔÓÉÏòǰÒýÓÃÆäËüµÄ·½·¨ºÍʵÀý±äÁ¿¡£ÒÔÏÂÀý×ÓÊǺϷ¨µÄ£º
class A {
void a () {
f.set(42);
}
B f;
}
class B {
void set (long n) {
this .n=n;
}
long n;
}
4.7.2 ³õʼ»¯Ë³Ðò
¼ÓÔØÒ»¸öÀàʱ£¬ËüµÄ¾²Ì¬³õʼ»¯´úÂë±»Ö´ÐС£¾²Ì¬³õʼ»¯´úÂë¶ÎÓë
¾²Ì¬±äÁ¿³õʼ»¯Í¬Ê±½øÐÐ ¡£ËüÃǰ´´Ê·¨Ë³ÐòÖ´ÐС£ÀýÈ磬һ¸öÀàCÉù
Ã÷ÈçÏ£º
class C {
static int a=1;
static {
a++;
b=7;
}
static int b=2;
}
µ±C±»¼ÓÔØÊ±£¬°´ÒÔÏÂ˳ÐòÖ´ÐУº
* aÖÃΪ1¡£
* ¾²Ì¬³õʼ»¯¶ÎÖ´ÐУ¬aÖÃΪ2£¬bÖÃΪ7¡£
* bÖÃΪ2¡£
Èç¹û¾²Ì¬³õʼ»¯´úÂëÒýÓÃÁËÆäËüµÄδ¼ÓÔØµÄÀ࣬Õâ¸öÀཫ±»¼ÓÔØ£¬
ËüµÄ¾²Ì¬³õʼ»¯´úÂ뽫ÏÈÖ´ÐС£ÔÚ¾²Ì¬³õʼ»¯ÆÚ¼äÒýÓÃδ¼ÓÔØµÄÀ࣬¸Ã
ÀàÏȼÓÔØ²¢³õʼ»¯¡£ÔÚ³õʼ»¯ÐòÁÐÖУ¬ÈôÒýÓõ½ÔÚËü֮ǰµÄÒ»¸öδ³õʼ
»¯µÄÀàʱ£¬¾Í»á·¢ÉúÑ»·¡£Õ⽫µ¼ÖÂÒ»¸öNoClassDefFoundException´í
Îó¡£
ÀýÈ磬µ±ÀàA¼ÓÔØÊ±£¬ËüµÄ¾²Ì¬³õʼ»¯´úÂë±»Ö´ÐС£µ«AµÄ¾²Ì¬³õ
ʼ»¯´úÂëÒýÓÃÁËÁíÒ»¸öδ¼ÓÔØµÄÀàB¡£ÕâÑùB½«±»¼ÓÔØ£¬ËüµÄ¾²Ì¬³õʼ
»¯´úÂëÒªÔÚA֮ǰִÐС£AµÄ¾²Ì¬³õʼ»¯£¬ËæºóÖ´ÐС£µ«Èç¹ûBÖеľ²
̬³õʼ»¯´úÂëÒýÓÃA£¬¾Íµ¼ÖÂÁËÑ»·ÒýÓá£
ÈôʵÀý»ò¾²Ì¬±äÁ¿³õʼ»¯Ê±£¬´æÔÚǰÏòÒÀÀµ£¬Ôò³ö±àÒëʱ¿Ì´íÎó¡£
ÀýÈ磺
int i = j+2;
int j = 4;
½«²úÉú±àÒëʱ¿Ì´íÎó¡£
ʵÀý±äÁ¿³õʼ»¯Ê±¿ÉÒÔÓжԾ²Ì¬±äÁ¿µÄǰÏòÒÀÀµ¡£ÀýÈçÒÔÏ´úÂë¶Î£º
int i = j+2; //ʵÀý±äÁ¿
static int j = 4; //¾²Ì¬±äÁ¿
iǰÏòÒÀÀµÓÚj£¬i½«±»³õʼ»¯Îª6£¬jΪ4¡£ÒòΪjÊǾ²Ì¬±äÁ¿£¬Ëü
µÄ³õʼ»¯ÏÈÓÚʵÀý±äÁ¿¡£
¾²Ì¬µÄ·½·¨²»ÄÜÒýÓÃʵÀý±äÁ¿; Ö»ÄÜÒýÓþ²Ì¬±äÁ¿ºÍ·½·¨¡£
4.8 ·ÃÎÊÖ¸¶¨·û
·ÃÎÊÖ¸¶¨·û(access specifier)¾ÍÊdzÌÐòÔ±¿ØÖƶԷ½·¨ºÍ±äÁ¿·ÃÎʵÄÐÞ
Êηû¡£ÓÃÓÚ¿ØÖÆ·ÃÎʵĹؼü×ÖÊÇpublic£¬private£¬ºÍprotected¡£public
·½·¨¿ÉÒÔ±»ÈκÎÈË·ÃÎÊ¡£private·½·¨Ö»ÄÜÔÚÀඨÒåʱÔÚÀàµÄÄÚ²¿·ÃÎÊ¡£
ÒòΪprivate·½·¨ÔÚÀàÖ®ÍâÊDz»¿É¼ûµÄ£¬ËüÃÇÊÇfinal£¨¶¨Ö¹£©µÄ£¬²¢ÇÒ²»
Äܱ»¸²¸Ç(²Î¼ûµÚ2.4.10.3½Ú¡°¶¨Ö¹À࣬·½·¨£¬±äÁ¿¡±)¡£´ËÍâ²»Äܽ«Ò»¸ö
·Ç˽Óз½·¢¸²¸Ç³É˽Óз½·¨£¬protected·ÃÎÊÖ¸¶¨·ûʹ·½·¨ºÍ±äÁ¿Ö»ÐíÆä
×ÓÀà·ÃÎÊ£¬ÆäËüÀà¶¼²»ÐС£
public¿ÉÓÃÓÚÀ࣬·½·¨ºÍ±äÁ¿¡£±êÒÔpublic µÄÀà¡¢·½·¨ºÍ±äÁ¿£¬¿É
ΪÈκεط½µÄÈÎºÎÆäËûÀà¡¢·½·¨·ÃÎÊ¡£¸²¸Ç²»Äܸıäpublic·ÃÎÊȨÏÞ¡£
ûÓб»Ö¸¶¨public»òprivateµÄÀ࣬·½·¨ºÍ±äÁ¿£¬Ö»ÄÜÔÚÉùÃ÷ËüÃǵÄ
°ü(package)ÖзÃÎÊ(²Î¼ûµÚ2.6½Ú ¡°°ü¡±)¡£
4.9 ±äÁ¿×÷ÓÃÓò¹æÔò
ÔÚÒ»¸ö°üÄÚ£¬µ±Ò»¸öÀà±»¶¨Òå³ÉÁíÒ»¸öÀàµÄ×ÓÀàʱ£¬³¬ÀàÖÐËù×÷µÄ
ÉùÃ÷¶Ô×ÓÀà¾ù¿É¼û¡£µ±·½·¨¶¨ÒåÖÐÒýÓñäÁ¿Ê±£¬½«Óõ½ÏÂÃæµÄ×÷ÓÃÓò¹æ
Ôò£º
1. Ê×ÏÈËÑË÷µ±Ç°¿é£¬È»ºóÊÇËùÓÐÍâÌ׵Ŀ飬ֱµ½°üÈݸÿéµÄµ±Ç°·½
·¨£¬Õâ±»ÈÏΪÊǾֲ¿×÷ÓÃÓò¡£ÔÚ¾Ö²¿×÷ÓÃÓòºó£¬»¹¼ÌÐøÔÚÀàµÄ×÷ÓÃÓòÖÐ
ËÑË÷¡£
2. ËÑË÷µ±Ç°ÀàÖеıäÁ¿¡£
3. Èç¹ûûÓÐÕÒµ½±äÁ¿£¬ÔòËÑË÷ËùÓеij¬ÀàÖеıäÁ¿£¬Ê×ÏÈ´ÓÖ±½Ó³¬
À࿪ʼ£¬Ö±µ½ObjectÀà¡£Èç¹ûûÓÐÕÒµ½±äÁ¿£¬ËÑË÷ÒýÈëµÄÀàºÍ°üÃû¡£Èç
¹û»¹Ã»ÓÐÕÒµ½£¬¾Í³ÉΪ±àÒëʱ¿Ì´íÎó¡£
ÔÚÒ»¸öÀàÖжà¸ö±äÁ¿³öÏÖÏàͬµÄÃû×Ö£¬Ò²ÊDZàÒë´íÎó¡£
4.10 ÐÞÊηû
JavaÓÐÒÔϹؼü×ÖÓÃ×÷ÐÞÊηû(Modifier)¡£
4.10.1 Ḭ̈߳²È«±äÁ¿
±ê¼ÇÁËThreadsafe£¨Ḭ̈߳²È«£©µÄʵÀý»ò¾²Ì¬±äÁ¿ÊÇÖ¸µ±Ò»¸öÏß³Ì
ʹÓÃËüʱ²»Äܱ»ÆäËüÏ̸߳ü¸Ä£¬¼´±äÁ¿²»Äܱ»Òì²½¸Ä±ä¡£½«±äÁ¿±ê¼ÇΪ
ThreadsafeµÄÄ¿µÄÊÇÔÊÐí±àÒëÆ÷½øÐÐÓÅ»¯£¬À´ÆÁ±ÎÒì²½¸ü¸ÄµÄ·¢Éú¡£Ê¹ÓÃ
ThreadsafeµÄÓÅ»¯´ëÊ©Êǽ«¼Ä´æÆ÷ÖеÄʵÀý±äÁ¿·ÅÈë¸ßËÙ»º´æ¡£
4.10.2˲̬±äÁ¿
transient£¨Ë²Ì¬£©±êÖ¾±»½âÊÍÆ÷ÓÃÓÚ³Ö¾ÃÐÔ¶ÔÏó¡£µ±Ò»¸öÀàµÄʵÀýÒÔ
³Ö¾Ã¶ÔÏóд³öʱ£¬Èô±äÁ¿±ê¼ÇΪtransient£¬Ôò×÷ÌØÊâ´¦Àí¡£
4.10.3 ¶¨Ö¹À࣬·½·¨ºÍ±äÁ¿
final£¨¶¨Ö¹£©¹Ø¼ü×ÖÊÇÒ»¸öÐÞÊηû£¬±ê¼ÇÒ»¸öÀ಻ÄÜÓÐ×ÓÀ࣬һ¸ö
·½·¨²»Äܱ»¸²¸Ç£¬»òÕßÒ»¸ö±äÁ¿ÎªÒ»¸ö³£Öµ¡£Óɶ¨Ö¹ÀàÅÉÉú×ÓÀ࣬¸²¸Ç
¶¨Ö¹·½·¨£¬¸ü¸Ä¶¨Ö¹±äÁ¿µÄÖµ£¬¶¼½«²úÉú±àÒë´íÎó¡£final±äÁ¿µÄ×÷ÓÃÓë
×ÖÃæÁ¿Ïàͬ¡£
ʹÓÃfinalʹ±àÒëÆ÷Äܹ»×÷ºÜ¶àÓÅ»¯¡£ÆäÖеÄÒ»¸öÓÅ»¯ÊÇ·½·¨ÌåµÄÄÚ
ÁªÀ©Õ¹(inline expansion)£¬Õâ¸ö·½·¨Ì屨ÐëÊÇСµÄfinalº¯Êý¡£Ð¡µ½Ê²Ã´³Ì
¶ÈÒÀÀµÓÚ±àÒëÆ÷µÄʵÏÖ¡£
finalÉùÃ÷µÄÀý×ÓÈçÏ£º
class Foo {
final int value =3; //¶¨Ö¹±äÁ¿
final int foo (int a£¬int b) { //¶¨Ö¹·½·¨
}
}
4.10.4 ±¾µØ·½·¨
±êÓÐnative£¨±¾µØ£©µÄ·½·¨ÊÇÓÉÆ½Ì¨Ïà¹ØµÄÓïÑÔ(ÈçCÓïÑÔ)ʵÏֵģ¬
²»ÊÇJavaµÄ±¾Éí·½·¨£¬Ã»Óз½·¨Ì壬ÉùÃ÷ÒԷֺŽáÊø¡£¹¹Ô캯Êý²»ÄÜΪ
native¡£ËäÈ»±¾µØ·½·¨ÊÇÓÉÆ½Ì¨Ïà¹ØµÄÓïÑÔʵÏֵ쬵«ËüÃǵÄʹÓÃÓë²»ÊÇ
nativeµÄ·½·¨Ò»Ñù£¬ÀýÈ磺¿ÉÒÔ¸²¸Ç¡£±¾µØ·½·¨ÉùÃ÷µÄÀý×ÓÈçÏ£º
native long timeofDay();
4.10.5 ³éÏó·½·¨
³éÏó·½·¨(abstract method)Ϊ³¬Àà»ò½çÃæÌṩÁËÒ»ÖÖÊֶΣ¬Ëüʵ¼ÊÉÏ
ÊDZØÐëÓÉ×ÓÀàʵÏÖµÄÒ»×éÐÒé¡£±ê¼ÇΪabstractµÄ·½·¨±ØÐëÔÚÆä×ÓÀàÖж¨
Òå¡£³éÏó·½·¨Ã»Óз½·¨Ì壬 ¶øÉùÃ÷ÓɷֺŽáÊø¡£
ʹÓÃabstract¹Ø¼ü×ֵĹæÔòÈçÏ£º
* ¹¹Ô캯Êý£¬²»ÄÜΪabstract¡£
* ¾²Ì¬·½·¨²»ÄÜΪabstract¡£
* private ·½·¨²»ÄÜΪabstract¡£
* abstract·½·¨±ØÐëÔÚÉùÃ÷ËüµÄÀàµÄ×ÓÀàÖж¨Òå¡£
* ²»Äܸ²¸Ç³¬ÀàÖеÄabstract·½·¨¡£
* °üº¬abstract·½·¨µÄÀàºÍ¼Ì³Ðabstract·½·¨µÄÀà±»ÈÏΪÊdzéÏóÀà¡£
* ³õʼ»¯³éÏóÀà»òÖ±½Óµ÷ÓÃabstract·½·¨£¬½«µ¼Ö±àÒëʱ¿Ì´íÎó¡£
4.10.6 ·½·¨ºÍ¿éµÄͬ²½
synchronized£¨Í¬²½£©¹Ø¼ü×ÖÊÇÒ»¸öÐÞÊηû£¬±ê¼ÇÒ»¸ö·½·¨»ò´úÂë¿é
ÐèҪȡµÃËø(lock)¡£ÎªÁ˱£Ö¤µ±Ò»´úÂë·ÃÎÊijһ×ÊԴʱ£¬ÁíÒ»ÒªÇó·ÃÎʸÃ
×ÊÔ´µÄ´úÂ뽫²»ÄÜÖ´ÐУ¬ËøÊDZØÒªµÄ¡£Ã¿¸ö¶ÔÏó¶¼ÓÐÒ»¸öËøÓëÖ®ÁªÏµ£¬ ÿ
¸öÀàҲͬÑùÓÐÒ»¸öËø¡£Í¬²½·½·¨ÊÇ¿ÉÔÙÈëµÄ¡£
ÿµ±µ÷ÓÃÒ»¸ö±»Í¬²½µÄ·½·¨Ê±£¬Ëü½«µÈ´ýÖ±µ½ËüµÃµ½µ±Ç°ÊµÀý£¨Èç
¹ûÊǾ²Ì¬·½·¨ÔòΪÀࣩµÄËø£¬È»ºóÖ´ÐдúÂ룬ÊÍ·ÅËø¡£
ͬ²½¿éµÄÐÐΪÓëͬ²½·½·¨ÏàËÆ¡£Çø±ðÔÚÓÚËüËùÓõÄËøÊÇ¿éÄÚÓÉ
synchronized¹Ø¼ü×ÖËùÔÚÓï¾äÖ¸¶¨µÄ¶ÔÏó»òÀàµÄËø£¬¶ø²»Êǵ±Ç°ÀàµÄËø¡£
ͬ²½¿éµÄÉùÃ÷ÈçÏ£º
/* ±¾·½·¨Ç°ÎÄ´úÂë*/
synchronized (