BBSˮľÇ廪վ¡Ã¾«»ªÇø
·¢ÐÅÈË: java96@SMTH (³¯»¨Ï¦Ê°±ÖоÆ), ÐÅÇø: Java
±ê Ìâ: JavaÓïÑÔ¹æ¸ñ˵Ã÷
·¢ÐÅÕ¾: ˮľÇ廪 (Mon Aug 12 13:50:54 1996)
תÐÅÕ¾: SMTH
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ÀàÐÍ£¬²¢ÇÒ¾ù´Ó·º´úÂë×Ö·û¼¯ÖеÃÀ´¡£¶øÏÂÃæ
ÁгöµÄתÒåÐòÁÐÔòÓÃÀ´ÃèÊöһЩ·ÇͼÐÎ×Ö·û£¬ËüÃÇÒÔ·´Ð±¸Ü¡°\¡±¿ªÊ¼ÒÔ
×÷תÒåÓá£
ÐøÐзûÍ· <newline> \
»»ÐÐ 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 (<object or className>) {// ͬ²½Ä£¿é
/* ͬ²½·ÃÎÊ´úÂë */
}
/*±¾·½·¨ÆäÓà´úÂë*/
ÉùÃ÷ͬ²½·½·¨µÄÀý×ÓÈçÏ£º
class Point {
float x£¬y;
synchronized void scale (float f ) {
x*=f;
y*=f;
}
}
ͬ²½Ä£¿éµÄÀý×ÓÈçÏ£º
class Rectangle {
Point topLeft;
¡
void print ( ) {
synchronied (topLeft) {
println (¡°topLeft.x=¡±+ topLeft.x);
println (¡°topLeft.y=¡±+ topLeft.y);
}
¡
}
}
5. ½çÃæ
½çÃæ(interface)¶¨ÒåÁËÒ»×é·½·¨£¬¶øÃ»ÓÐʵÏÖÆäÌå¡£½çÃæÖ»Ìṩ·½·¨
ÐÒéµÄ·â×°£¬¶ø²»ÏÞÖÆÊµÏÖ±ØÐëÔÚʲô¼Ì³ÐÊ÷ÉÏ¡£µ±Ò»¸öÀàʵÏÖ½çÃæÊ±£¬
Ò»°ã±ØÐëʵÏÖ½çÃæÃèÊöµÄËùÓз½·¨µÄÌå¡£(Èç¹ûʵÏÖ½çÃæµÄÀàÊdzéÏóÀ࣬
Ëü¿ÉÒÔ°ÑʵÏÖ½çÃæ·½·¨µÄÈÎÎñ½»¸øËüµÄ×ÓÀà¡£)
½çÃæ½â¾öÁËÒò¶à¼Ì³ÐÔËÐÐʱ¹ý´ó¿ªÏúÕâÀàÎÊÌâ¡£ µ«ÓÉÓÚ½çÃæ²ÉÓö¯
̬·½·¨Êø¶¨£¬Ê¹ÓÃËüÃǵÄʱºòÔÚÐÔÄÜÉÏ»áÊܵ½Ò»µãÓ°Ïì¡£
½çÃæÔÊÐí¼¸¸öÀàͬʱÏíÓÐÒ»¸ö³ÌÐòÉè¼Æ½çÃæ£¬¶ø±Ë´Ë²»Íêȫ֪µÀ¶Ô
·½¾ßÌåµÄʵÏÖ¡£ÏÂÃæµÄÀý×ÓÊÇÒ»¸ö½çÃæµÄÉùÃ÷£¨¼´ÓÃÁËinterface ¹Ø¼ü×Ö£©£¬
²¢ÓÉÒ»¸öÀàʵÏÖ¡£
public interface Storing {
void freezeDry (Stream s);
void reconstitute (Stream s);
}
public class Image implement Storing£¬Painting {
¡
void freezeDry (Stream s) {
//ÅÅÐòǰ°´JPEG ѹËõͼÏó
}
void reconstitute (Stream s ) {
// ¶ÁÈëǰ°´JPEG ½âѹËõͼÏó
¡
}
}
ÏóÀàÒ»Ñù£¬½çÃæÒ²·Ö˽ÓУ¨È±Ê¡£©ºÍ¹«ÓС£×÷ÓÃÓòÓëÀàÏàͬ¡£½çÃæ
Äڵķ½·¨Í¨³£ÊÇpublic£¬±äÁ¿ÊÇpublic£¬static ºÍfinalµÄ¡£
5.1½çÃæ×÷ΪÀàÐÍ
°´ÉùÃ÷µÄÓï·¨£¬½çÃæÃû£¨interfaceName£©ºÍ±äÁ¿Ãû£¨ variableName£©
ÉùÃ÷µÄÊÇʵÏָýçÃæÃûµÄij¸öÀàµÄʵÀý±äÁ¿»ò²ÎÊý¡£µ±½çÃæ×÷ΪÀàÐÍʱ£¬
ÆäÐÐΪºÍÀà×÷ΪÀàÐÍÍêȫһÑù¡£Ëüʹ³ÌÐòÔ±¿ÉÖ¸¶¨ÊµÏÖ¸ø¶¨½çÃæµÄ¶ÔÏó£¬
¶ø²»±ØÖªµÀ¸Ã¶ÔÏóµÄ¾ßÌåÀàÐÍ»ò¼Ì³Ð¹ØÏµ¡£Ê¹ÓýçÃæ¿ÉÒÔ²»±Ø¹ØÐĹ²Ïí
¹«¹²³éÏó³¬ÀàµÄÆäËüÀ࣬»òÈçºÎÔÚObjectÖÐÔö¼Ó·½·¨¡£
ÏÂÃæÊÇ˵Ã÷½çÃæÃû¡¢·½·¨ÃûÓï·¨µÄÀý×Ó¡£
class StorageManager £û
Stream stream;
¡
// Storing ÊǽçÃæÃû
void pickle (Storing obj) {
obj. freezeDry (stream);
}
}
5.2 ½çÃæÖеķ½·¨
½çÃæÖеķ½·¨¶¨ÒåÈçÏ£º
returnType methodName (parameterList);
´ËÉùÃ÷ûÓÐÐÞÊηû(modifier)¡£½çÃæÖÐËùÓеķ½·¨¶¼Êǹ«ÓеÄ(public£©
ºÍ³éÏóµÄ£¨abstract£©¹ÊÎÞÆäËûÐÞÊηû£¬²Î¼û¡°³éÏó·½·¨¡±Ò»½Ú¡£
5.3 ½çÃæÖеıäÁ¿
½çÃæÖеıäÁ¿ÊÇfinal£¬public»òstaticµÄ£¬ÎÞÐÞÊηû£¬±äÁ¿±ØÐë³õ
ʼ»¯¡£
5.4 ×éºÏ½çÃæ
ÀûÓÃextends¹Ø¼ü×Ö¡£¿ÉÒ԰Ѷà¸ö½çÃæ×éºÏΪһ¸ö½çÃæ£¬È磺
interface DoesItAll extends String£¬Painting {
void doessomethingElse ( );
}
6. °ü
°ü(Package)ÓÉÒ»×éÀà(class)ºÍ½çÃæ(interface)×é³É¡£ËüÊǹÜÀí´óÐÍÃû
×ֿռ䣬±ÜÃâ³åÍ»µÄ¹¤¾ß¡£Ã¿Ò»¸öÀàºÍ½çÃæµÄÃû×Ö¶¼°üº¬ÔÚij¸ö°üÖС£
°´ÕÕÒ»°ãµÄϰ¹ß£¬ËüµÄÃû×ÖÊÇÓÉ¡°.¡±ºÅ·Ö¸ôµÄµ¥´Ê¹¹³É£¬µÚÒ»¸öµ¥´Êͨ
³£ÊÇ¿ª·¢Õâ¸ö°üµÄ×éÖ¯µÄÃû³Æ¡£
6.1 ¶¨ÒåÒ»¸ö±àÒëµ¥ÔªµÄ°ü
±àÒëµ¥ÔªµÄ°üÓÉpackageÓï¾ä¶¨Òå¡£Èç¹ûʹÓÃpackageÓï¾ä£¬±àÒëµ¥
ÔªµÄµÚÒ»ÐбØÐëÎÞ¿Õ¸ñ£¬Ò²ÎÞ×¢ÊÍ¡£Æä¸ñʽÈçÏ£º
package packageName;
Èô±àÒëµ¥ÔªÎÞpackageÓï¾ä£¬Ôò¸Ãµ¥Ôª±»ÖÃÓÚÒ»¸öȱʡµÄÎÞÃûµÄ°ü
ÖС£
6.2 ʹÓÃÆäËü°üÖеÄÀàºÍ½çÃæ
ÔÚJavaÓïÑÔÌṩһ¸ö°ü¿ÉÒÔʹÓÃÁíÒ»¸ö°üÖÐÀàºÍ½çÃæµÄ¶¨ÒåºÍʵÏÖ
µÄ»úÖÆ¡£ÓÃimport¹Ø¼ü´ÊÀ´±êÃ÷À´×ÔÆäËü°üÖеÄÀà¡£Ò»¸ö±àÒëµ¥Ôª¿ÉÒÔ
×Ô¶¯°ÑÖ¸¶¨µÄÀàºÍ½çÃæÊäÈëµ½Ëü×Ô¼ºµÄ°üÖС£
ÔÚÒ»¸ö°üÖеĴúÂë¿ÉÒÔÓÐÁ½ÖÖ·½Ê½À´¶¨ÒåÀ´×ÔÆäËü°üÖеÄÀàºÍ½ç
Ãæ£º
* ÔÚÿ¸öÒýÓõÄÀàºÍ½çÃæÇ°Ãæ¸ø³öËüÃÇËùÔڵİüµÄÃû×Ö;
//ǰ׺°üÃû·¨
acme. project. FooBar obj=new acme. project. FooBar( );
* ʹÓÃimportÓï¾ä£¬ÒýÈëÒ»¸öÀà»òÒ»¸ö½çÃæ£¬»ò°üº¬ËüÃǵİü¡£Òý
ÈëµÄÀàºÍ½çÃæµÄÃû×ÖÔÚµ±Ç°µÄÃû×Ö¿Õ¼ä¿ÉÓá£ÒýÈëÒ»¸ö°üʱ£¬Ôò¸Ã°üËù
ÓеĹ«ÓÐÀàºÍ½çÃæ¾ù¿ÉÓá£ÆäÐÎʽÈçÏ£º
// ´Ó acme.project ÒýÈëËùÓÐÀà
import acme.project.*;
Õâ¸öÓï¾ä±íʾacme.projectÖÐËùÓеĹ«ÓÐÀà±»ÒýÈ뵱ǰ°ü¡£
ÒÔÏÂÓï¾ä´Óacme. project°üÖнøÈëÒ»¸öÀàEmployec_List¡£
//´Ó acme. project¶øÒýÈë Employee_List
import acme.project.Employee_list;
Employee_List obj = new Employee_List( );
ÔÚʹÓÃÒ»¸öÍⲿÀà»ò½çÃæÊ±£¬±ØÐëÒªÉùÃ÷¸ÃÀà»ò½çÃæËùÔڵİü£¬·ñ
Ôò»á²úÉú±àÒë´íÎó¡£
7. ±í´ïʽ
JavaÓïÑԵıí´ïʽºÍCÓïÑԷdz£ÀàËÆ¡£
7.1 ÔËËã·û
ÔËËã·û(operator)ÓÅÏȼ¶´Ó¸ßµ½µ×ÅÅÁÐÈçÏ£º
. [ ] ()
++ -- ! ¡« instanceof
* / %
+ -
<< >> >>>
< > <= >\
== ! =
&
^
&&
||
? :
= op =
,
7.1.1 ÕûÊýÉϵÄÔËËã·û
ÔÚÕûÊýÔËËãʱ£¬Èç¹û²Ù×÷ÊýÊÇlongÀàÐÍ£¬ÔòÔËËã½á¹ûÊÇlongÀàÐÍ£¬
·ñÔòΪintÀàÐÍ£¬¾ø²»»áÊÇbyte£¬short»òcharÐÍ¡£ÕâÑù£¬Èç¹û±äÁ¿i±»
ÉùÃ÷Ϊshort»òbyte£¬i+1»áÊÇint¡£Èç¹û½á¹û³¬¹ý¸ÃÀàÐ͵Äȡֵ·¶Î§£¬
Ôò°´¸ÃÀàÐ͵Ä×î´óֵȡģ¡£µ¥Ä¿ÕûÊýÔËËã·ûÊÇ£º
ÔËËã·û ²Ù×÷
- µ¥Ä¿·Ç
¡« λ²¹Âë
++ ¼Ó1
-- ¼õ1
++ÔËËã·ûÓÃÓÚ±íʾֱ½Ó¼Ó1²Ù×÷¡£ÔöÁ¿²Ù×÷Ò²¿ÉÒÔÓüÓÔËËã·ûºÍ¸³
Öµ²Ù×÷¼ä½ÓÍê³É¡£++ lvalue£¨×óÖµ£©±íʾlvalue+=1, ++lvalue Ò²±íʾ
lvalue =lvalue +1 (Ö»ÒªlvalueûÓи±×÷ÓÃ)¡£--ÔËËã·ûÓÃÓÚ±íʾ¼õ1²Ù×÷¡£
++ºÍ--ÔËËã·û¼È¿ÉÒÔ×÷Ϊǰ׺ÔËËã·û£¬Ò²¿ÉÒÔ×öΪºó׺ÔËËã·û¡£Ë«Ä¿Õû
ÊýÔËËã·ûÊÇ£º
ÔËËã·û ²Ù×÷**
+ ¼Ó
- ¼õ
* ³Ë
/ ³ý
% ȡģ
& λÓë
£ü λ»ò
^ λÒì»ò
<< ×óÒÆ
>> ÓÒÒÆ(´ø·ûºÅ)
>>> ÌíÁãÓÒÒÆ
** integer op integer=>integer
ÕûÊý³ý·¨°´ÁãÉáÈë¡£³ý·¨ºÍȡģ×ñÊØÒÔϵÈʽ£º
( a/b ) * b + ( a%b ) == a
ÕûÊýËãÊõÔËËãµÄÒì³£ÊÇÓÉÓÚ³ýÁã»ò°´ÁãȡģÔì³ÉµÄ¡£Ëü½«Òý·¢Ò»¸ö
ArithmeticExceptionËãÊõÒì³£¡£ÏÂÒç²úÉúÁ㣬ÉÏÒçµ¼ÖÂÔ½½ç¡£ÀýÈ磺 ¼Ó1
³¬¹ýÕûÊý×î´óÖµ£¬È¡Ä£ºó£¬±ä³É×îСֵ¡£
Ò»¸öop=¸³ÖµÔËËã·û£¬ºÍÉϱíÖеĸ÷˫ĿÕûÊýÔËËã·ûÁªÓ㬹¹³ÉÒ»
¸ö±í´ïʽ¡£
ÕûÊý¹ØÏµÔËËã·û<£¬ >£¬<=£¬>=£¬==ºÍ!=²úÉúbooleanÀàÐ͵ÄÊý¾Ý¡£
7.1.2 ²¼¶ûÔËËã·û
²¼¶û(boolean)±äÁ¿»ò±í´ïʽµÄ×éºÏÔËËã¿ÉÒÔ²úÉúеÄbooleanÖµ¡£µ¥
Ä¿ÔËËã·û! ÊDz¼¶û·Ç¡£Ë«Ä¿ÔËËã·û£¦£¬£üºÍ^ÊÇÂß¼AND£¬ORºÍXOR
ÔËËã·û£¬ËüÃÇÇ¿ÖÆÁ½¸ö²Ù×÷ÊýÇó²¼¶ûÖµ¡£Îª±ÜÃâÓÒ²à²Ù×÷ÊýÈßÓàÇóÖµ£¬
Óû§¿ÉÒÔʹÓöÌ·ÇóÖµÔËËã·û£¦£¦ºÍ£ü£ü¡£Óû§¿ÉÒÔʹÓÃ==ºÍ!=£¬¸³Öµ
ÔËËã·ûÒ²¿ÉÒÔÓà &=¡¢|=¡¢^=¡£ÈýÔªÌõ¼þ²Ù×÷·û? : ºÍCÓïÑÔÖеÄÒ»Ñù¡£
7.1.3 ¸¡µãÔËËã·û
¸¡µãÔËËã·û¿ÉÒÔʹÓ󣹿ÔËËã·ûµÄ×éºÏ£º È絥ĿµÄÔËËã·û++¡¢--£¬
˫ĿµÄÔËËã·û+¡¢-¡¢* ºÍ/£¬ÒÔ¼°¸³ÖµÔËËã·û+=£¬-=£¬*=£¬ºÍ/=¡£´ËÍ⣬
»¹ÓÐȡģÔËË㣺 %ºÍ%=Ò²¿ÉÒÔ×÷ÓÃÓÚ¸¡µãÊý£¬ÀýÈ磺
a%b
ºÍa-((int) (a/b)*b)µÄÓïÒåÏàͬ¡£Õâ±íʾa%bµÄ½á¹ûÊdzýÍêºóʣϵÄ
¸¡µãÊý²¿·Ö¡£Ö»Óе¥¾«¶È²Ù×÷ÊýµÄ¸¡µã±í´ïʽ°´ÕÕµ¥¾«¶ÈÔËËãÇóÖµ£¬²ú
Éúµ¥¾«¶È½á¹û¡£Èç¹û¸¡µã±í´ïʽÖк¬ÓÐÒ»¸ö»òÒ»¸öÒÔÉϵÄË«¾«¶È²Ù×÷Êý£¬
Ôò°´Ë«¾«¶ÈÔËË㣬½á¹ûÊÇË«¾«¶È¸¡µãÊý¡£
JavaÏÖÔÚÉÐÎÞ¸¡µãËãÊõÔËËãµÄÒì³£´¦Àí¡£°´ÕÕIEEE754¸¡µã¹æ¸ñ˵
Ã÷£¬Á½¸öÌØÊâµÄÖµ InfºÍNa NÊÇ¿ÉÌæ»»Ê¹Óõģ¬ÉÏÒç²úÉúInf£¬ÏÂÒç²ú
Éú0£¬³ýÁã²úÉúInf¡£
¿ÉÒÔʹÓùØÏµÔËËã·û£¬²úÉúbooleanÖµ£º >£¬< , >=£¬<=£¬==£¬!=¡£
°´NaNµÄÐÔÖÊ£¬¸¡µãÖµ²»ÊÇÍêÈ«ÓÐÐòµÄ£¬ËùÒÔÔÚ¸¡µãÊý±È½ÏʱҪСÐÄ¡£
ÀýÈ磺 Èç¹ûa<b·ÇÕæ£¬Ôò²¢²»Òâζ×Åa>=b; ÔÙÀýÈ磬a!=b£¬²¢²»±íʾ
a>b | a<b¡£Êµ¼ÊÉÏ£¬¿ÉÄܾÍûÓдóС֮·Ö¡£
¸¡µãËãÊõÔËËãºÍÊý¾Ý¸ñʽ¶¨Òå°´IEEE754µÄ¡°¸¡µãËãÊõÔËËã±ê×¼¡±¡£
²Î¼û¸½Â¼ÖеĹØÓÚJava¸¡µãÔËËãʵÏÖµÄϸ½Ú¡£
7.1.4 Êý×éÔËËã·û
Êý×éÔËËã·ûÐÎʽÈçÏ£º
<expression> [ <expression>]
¿É¸ø³öÊý×éÖÐij¸öÔªËØµÄÖµ¡£ºÏ·¨µÄȡֵ·¶Î§ÊÇ´Ó0µ½Êý×éµÄ³¤¶È¼õ
1¡£È¡Öµ·¶Î§µÄ¼ì²éÖ»ÔÚÔËÐÐʱ¿Ìʵʩ¡£
7.1.5 ´®ÔËËã·û
´®ÒÔString¶ÔÏóʵÏÖ£¨¼û¡°´®×ÖÃæÁ¿¡±½Ú£©¡£ÔËËã·û"+"Íê³É²¢´®²Ù
×÷£¬Èç¹û±ØÒªÔò×Ô¶¯°Ñ²Ù×÷Êýת»»ÎªStringÐÍ¡£Èç¹û²Ù×÷ÊýÊÇÒ»¸ö¶ÔÏó£¬
Ëü¿É¶¨ÒåÒ»¸ö·½·¨toString ( ) ·µ»Ø¸Ã¶ÔÏóµÄString·½Ê½£¬ÀýÈç
float a = 1.0
print (¡°The value of a is¡±+ a +¡°\n¡±);
+ÔËËã·ûÓõ½´®ÉϵÄÀý×Ó
String s=¡°a=¡±+ a;
+=ÔËËã·ûÒ²¿ÉÒÔÓÃÓÚString¡£×¢Ò⣬×ó±ß(ÏÂÀýÖеÄs1)½öÇóÖµÒ»´Î¡£
s1+=a; //s1=s1+a
//Èôa·ÇStringÐÍ£¬×Ô¶¯×ª»»ÎªStringÐÍ¡£
7.1.6 ¶ÔÏóÔËËã·û
˫ĿÔËËã·ûistanceof ²âÊÔij¸ö¶ÔÏóÊÇ·ñÊÇÖ¸¶¨Àà»òÆä×ÓÀàµÄʵÀý¡£
ÀýÈ磺
if (thermostat instanceof MeasuringDevice) {
MeasuringDevice dev=(MeasuringDevice) thermostat;
¡
}
ÊÇÅж¨thermostatÊÇ·ñÊÇMeasuringDeviceµÄʵÀý»òÊÇÆä×ÓÀàµÄʵÀý¡£
7.2 Ç¿ÖÆºÍת»»
JavaÓïÑԺͽâÊÍÆ÷ÏÞÖÆÊ¹ÓÃÇ¿ÖÆºÍת»»£¬ÒÔ·ÀÖ¹³ö´íµ¼ÖÂϵͳ±ÀÀ£¡£
ÕûÊýºÍ¸¡µãÊýÖ®¼ä¿ÉÒÔÀ´»ØÇ¿ÖÆ×ª»»£¬µ«ÕûÊý²»ÄÜÇ¿ÖÆ³ÉÊý×é»ò¶ÔÏó¡£
Object²»Äܱ»Ç¿ÖÆÎª»ù±¾ÀàÐÍ¡£Ò»¸öʵÀý¿ÉÒÔ±»Ç¿ÖƳɳ¬ÀàµÄʵÀý£¬µ«
Ç¿ÖÆ³É×ÓÀàµÄʵÀý»áµ¼ÖÂÔËÐÐʱ¿ÌµÄ¼ì²é¡£Èç¹ûÒ»¸ö±»Ç¿ÖƳÉ×ÓÀàʵÀý
µÄ¶ÔÏó²»ÊǸÃ×ÓÀàµÄʵÀý(»ò¸Ã×ÓÀàµÄ×ÓÀà¶ÔÏó)£¬½âÊÍÆ÷»á²úÉú
ClassCastException¡£
8. Óï¾ä
8.1 ÉùÃ÷
ÉùÃ÷¿ÉÒÔ³öÏÖÔÚËùÓÐÓï¾ä¿ÉÄܳöÏֵĵط½¡£ÉùÃ÷µÄ×÷ÓÃÓò½áÊøÓÚ·â
±Õ¸Ã¿éµÄ½áβ´¦¡£´ËÍ⣬¿ÉÒÔÔÚforÓï¾äµÄÍ·²¿×÷±äÁ¿ÉùÃ÷£¬ÀýÈ磺
for (int i=0; i<10; i++) {
¡
}
µ«ÒÔÕâÖÖ·½Ê½ÉùÃ÷µÄ±äÁ¿£¬½öÔÚforÓï¾äÑ»·ÌåÄÚÓÐЧ¡£ÀýÈ磬ÏÂÃæ
µÄÒ»¶Î´úÂëºÍÉÏÊö´úÂëµÈ
¼Û¡£
{
int i=0;
for (; i<10; i++) {
¡
}
}
8.2 ±í´ïʽ
±í´ïʽÊÇÓï¾ä£º
a=3£»
print (23);
foo.bar( );
8.3 ¿ØÖÆÁ÷
ÏÂÃæÊǶԿØÖÆÁ÷µÄ×ܽ᣺
if (boolean) statement
else statement
switch(e1) {
case e2: statement
default: statement
}
break [label]
continue [label]
return e1;
for ([e1]; [e2]; [e3]) statement
while (boolean) statement
do statement while (boolean);
label: statement
JavaÖ§³ÖÓбêºÅµÄÑ»·ºÍÓбêºÅµÄ¶Ï¿ª£¬ÀýÈ磺
outer£º // ÊDZêºÅ
for (int i=0; i<10; i++) {
for (int j=0; <10; j++) {
if (¡) {
break outer;
}
if (¡) {
}
}
}
ÔÚÑ»·ºÍ¶Ï¿ªÖÐʹÓñêºÅÒª×ñÊØÒÔÏÂ×¼Ôò£º
* ÈκÎÓï¾ä¿ÉÒÔÓÐÒ»¸ö±êºÅ¡£
* Èç¹ûÒ»¸öbreakÓï¾äÓÐÒ»¸ö±êºÅ£¬Õâ¸ö±êºÅ±ØÐëÔÚÒ»¸ö·â±ÕÓï¾ä
µÄǰ¶Ë¡£
* Èç¹ûÒ»¸öcontinueÓï¾äÓÐÒ»¸ö±êºÅ£¬ÔòËü±ØÐëÊÇÒ»¸ö·â±ÕÑ»·µÄ
±êºÅ¡£
8.4 Òì³£
µ±ÔÚJava³ÌÐòÖз¢ÉúÒ»¸ö´íÎóʱ£¬ÀýÈ磺һ¸ö±äÔªµÄÖµ·Ç·¨£¬´úÂë
»á·¢ÏÖÕâ¸ö´íÎ󣬲¢Òý·¢Ò»¸öÒì³£(exception)¡£ÔÚȱʡµÄÇé¿öÏ£¬Òì³£»á
Êä³öÒ»¸ö´íÎóÏûÏ¢£¬È»ºóÖÐÖ¹Ï̵߳ÄÖ´ÐС£µ«ÊÇ£¬³ÌÐò×Ô¼º¿ÉÒÔ¶¨ÒåÒì
³£´¦Àí¶Î(exception handler)À´½Ø»ñ(catch)Òì³££¬²¢´Ó´íÎóÖлָ´¡£
ÓÐһЩÒì³£ÊÇÓÉJava½âÊÍÆ÷ÔÚÔËÐÐʱ¿ÌÒý·¢µÄ¡£Êµ¼ÊÉÏ£¬ÈκÎÀà¶¼
¿ÉÒÔ¶¨ÒåÊôÓÚ×Ô¼ºµÄÒì³££¬
²¢Ê¹ÓÃthrowÓï¾äÒý·¢ËüÃÇ¡£
Ò»¸öthrow£¨Òý·¢£©Óï¾äÊÇÓÉthrow¹Ø¼ü×ÖºÍÒ»¸ö¶ÔÏ󹹳ɡ£°´³£¹æ£¬
¸Ã¶ÔÏóÓ¦¸ÃÊÇExceptionÀàµÄʵÀý»òÆä×ÓÀàµÄʵÀý¡£throwÓï¾ä»áÒýÆðÖ´
ÐÐתÏòÏàÓ¦µÄÒì³£´¦Àí¶Î¡£µ±Ò»¸öthrowÓï¾äÖ´ÐÐʱ£¬ËüÏÂÃæµÄËùÓдú
Âë²»ÔÙÖ´ÐÐÁË£¬ËüËùÔڵķ½·¨Ò²²»ÔÙ·µ»ØÖµ¡£ÏÂÃæµÄÀý×Ó½«ÑÝʾÈçºÎ´´
½¨Ò»¸öExceptionµÄ×ÓÀ࣬ȻºóÒý·¢Ò»¸öÒì³£¡£
class MyException extends Exception {
}
class MyClass {
void oops() {
if ( /* ²»³öÏÖ´íÎó */) {
¡
} else { /* ³ö´í */
throw new MyException( );
}
}
}
ΪÁ˶¨ÒåÒ»¸öÒì³£´¦Àí¶Î£¬³ÌÐò±ØÐëÓÃtryÓï¾ä°Ñ¿ÉÄܲúÉúÒì³£µÄ´ú
Âë³É×é¡£ÔÚtryÓï¾äºóÃæ¸úÉÏÒ»¸ö»ò¶à¸öcatch(½Ø»ñ£©Óï¾ä£¬Ã¿¸öÒì³£¶Ô
Ó¦Ò»¸öcatchÓï¾ä¡£Ã¿¸öcatchÓï¾äÖаüº¬×ÅÒì³£´¦Àí
¶Î¡£ÀýÈ磺
try {
p.a=10;
} catch ( NullPointerException e) {
println(¡°p was null¡±);
} catch ( Exception e) {
println (¡°other errors occured¡±);
} catch ( Object obj) {
println(¡°Who threw that object?¡±);
}
catchÓï¾äºÍÒ»¸ö·½·¨¶¨ÒåÀàËÆ£¬Ö»²»¹ý¸Ã·½·¨Ö»ÓÐÒ»¸ö²ÎÊý£¬ÇÒÎÞ
·µ»ØÀàÐÍ¡£²ÎÊý¿ÉÒÔÊÇÒ»¸öÀà»òÒ»¸ö½çÃæ¡£µ±Ò»¸öÒì³£·¢Éúʱ£¬Ç¶Ì×µÄ
try/catchÓï¾ä»áѰÕÒ³öÓë¸ÃÒì³£ÀàÏàÆ¥ÅäµÄ²ÎÊý¡£Èç¹ûÒ»¸ö²ÎÊýºÍÖ¸¶¨
Ò쳣ƥÅäÔò£º
* ¸Ã²ÎÊýºÍÖ¸¶¨µÄÒì³£ÊÇͬһ¸öÀ࣬»ò
* ¸Ã²ÎÊýÊÇÖ¸¶¨Òì³£µÄ×ÓÀ࣬»ò
* Èç¹û²ÎÊýÊÇÒ»¸ö½çÃæ£¬Ö¸¶¨Òì³£ÀàʵÏÖÁËÕâ¸ö½çÃæ¡£
µÚÒ»¸ö²ÎÊýºÍÒ쳣ƥÅäµÄtry/catchÓï¾ä£¬ÔòÓëÆäÆ¥ÅäµÄcatchÓï¾äÖ´
ÐС£ÔÚcatchÓï¾äÖ´ÐÐÍêºó£¬³ÌÐòµÄÖ´Ðб»»Ö¸´¡£µ«ÒѲ»¿ÉÄָܻ´µ½Òì³£
·¢Éú´¦ÔÙ´ÎÖ´ÐС£ÀýÈ磺
print ( "now");
try {
print ("is");
throw new MyException( );
print ("a");
} catch (MyException e) {
print ("the ");
}
print ("time\n");
´òӡΪ¡°now is the time¡±¡£ÕýÈçÕâ¸öÀý×ÓËùʾ£¬Òì³£Ó¦¸ÃÖ÷ÒªÓÃÓÚ
´íÎó´¦Àí£¬ÈôÓÃÓÚÆäËü·½Ãæ»áʹ´úÂë»ÞɬÄѶ®¡£
Òì³£´¦Àí¶ÎÊÇ¿ÉÒÔǶÌ׵ģ¬ÔÊÐíÒì³£´¦Àí¿ÉÒÔ·¢ÉúÔÚ¶à¸öµØ·½¡£Ç¶
Ì×Òì³£´¦Àíͨ³£ÓÃÓÚµ±µÚÒ»¸ö´¦Àí³ÌÐòÎÞ·¨ÍêÈ«´Ó´íÎóÖлָ´¹ýÀ´µÄʱ
ºò£¬¶ø²»µÃ²»Ö´ÐÐһЩÇå³ý´úÂ롣ΪÁ˰ÑÒì³£´¦Àí¿ØÖÆ´«µÝ¸ø¸ü¸ß²ãµÄ
´¦Àí¶Î£¬¿ÉÒÔÔÙÒ»´Î¶Ô½Ø»ñ¶ÔÏóʵʩthrow²Ù×÷¡£×¢ÒªÔÙ´ÎʵʩthrowÒì
³£µÄ·½·¨£¬
throwÓï¾äÖ´ÐÐÍêºó£¬»áÖÕÖ¹Ö´ÐС£
try {
f. open ( );
} catch(Exception e) {
f. close( );
throw e;
}
8.4.1 ¶¨¾ÖÓï¾ä
finally£¨¶¨¾Ö£©Óï¾äÊÇÓÃÓÚ±£Ö¤ÎÞÂÛÔÚÒì³£ÊÇ·ñ·¢ÉúµÄÇé¿öÏ£¬Ä³
Щ´úÂë±»Ö´ÐС£ÏÂÀý˵Ã÷finallyÓï¾äµÄÓ÷¨£º
try {
//×öijЩ¶¯×÷£»
£ý finally {
//´ËºóÇå³ý£»
}
ºÍÒÔÏ´úÂëÀàËÆ
try {
//×öijЩ¶¯×÷
} catch (Object e) {
//´ËºóÇå³ý£»
throw e;
}
//´ËºóÇå³ý£»
¼´Ê¹try¿éÖаüº¬return£¬break£¬continue£¬throwÓï¾ä£¬finally
Óï¾äÒ²»á±»Ö´ÐС£ÀýÈ磺 ÏÂÃæµÄ´úÂë¡°finally¡±×ÜÊDZ»Êä³ö£¬¶ø¡°after
try¡±½öÔÚa!=10ʱ±»Êä³ö¡£
try {
if (a==10) {
return ;
}
} finally {
print ("finally\n");
£ý
print ("after try \n");
8.4.2 ÔËÐÐʱ¿ÌÒì³£
±¾½ÚÁгöµÄÇåµ¥ÊÇJava½âÊÍÆ÷Òý·¢µÄ¸÷ÖÖÒì³£¡£µ±ÔËÐÐʱ¿Ì·¢ÏÖ¸÷
ÖÖ´íÎó£¬ÓɽâÊÍÆ÷Òý·¢Òì³£¡£
ArithmeticException
Èç¹û³ÌÐòÊÔͼ³ý0£¬»òÓÃ0ȡ죬»á²úÉúArithmeticException£¨Ëã
ÊõÒì³££©£¬ÆäËüËãÊõ²Ù×÷²»»á²úÉúÒì³£¡£ÓйØJavaÈçºÎ´¦ÀíÆäËüËãÊõ´í
ÎóµÄÐÅÏ¢£¬¼û¡°ÕûÊýÔËËã·û¡±ºÍ¡°¸¡µãÔËËã·û¡±Á½½Ú¡£
ÀýÈ磺 ÏÂÃæµÄ´úÂ뽫»áÒý·¢ArithmeticExceptionÒì³££º
class Arith {
public static void main (String args [ ] ) {
int j = 0;
j = j/j;
}
}
NullPointerException
µ±³ÌÐòÊÔͼ·ÃÎÊÒ»¸ö¿Õ¶ÔÏóÖеıäÁ¿»ò·½·¨£¬»òÒ»¸ö¿ÕÊý×éÖеÄÔª
ËØÊ±ÔòÒý·¢NullPointerException£¨¿ÕÖ¸ÕëÒì³££©¡£ÀýÈ磬·ÃÎʳ¤¶ÈΪ0
µÄÊý×éa[0]¡£ÓÐÒÔÏÂÀàÉùÃ÷£¬ÔËÐÐʱ»áÒý·¢NullPointerExceptionÒì³££º
class Null {
public static void main(String args [ ]) {
String o = null;
int a [ ] = null;
o.length( );
a[0] = 0;
}
}
ÓÐȤµÄÊÇ£¬Èç¹ûÎÒÃÇÒý·¢Ò»¸ö¿Õ¶ÔÏó£¬Ò²»á²úÒ»
NullPointerExceptionÒì³£¡£
IncompatibleClassChangeException
µ±Ò»¸öÀàµÄ¶¨Òå±»¸Ä±ä£¬¶øÒýÓøÃÀàµÄÆäËüÀàûÓб»ÖØÐ±àÒëʱ£¬
»á²úÉúÕâÒ»Òì³£¡£ÓÐËÄÖÖÀà¸ü¸Ä»áµ¼ÖÂÔËÐÐʱ¿ÌÒý·¢
IncompatibleClassChangExceptionÒì³£¡£
* Ò»¸öÀàÖеıäÁ¿ÉùÃ÷ÓÉstatic±ä³É·Çstatic£¬¶øÆäËü·ÃÎʸÃÀàÕâÒ»
±äÁ¿µÄÀàûÓб»ÖØÐ±àÒë¡£
* Ò»¸öÀàÖеıäÁ¿ÉùÃ÷ÓÉ·Çstatic±ä³Éstatic£¬¶øÆäËü·ÃÎʸÃÀàÕâÒ»
±äÁ¿µÄÀàûÓб»ÖØÐ±àÒë¡£
* ÀàÖÐÉùÃ÷µÄij¸öÓò±»É¾³ý£¬¶øÆäËü·ÃÎʸÃÓòµÄÀàûÓб»ÖØÐ±àÒë¡£
* ÀàÖÐÉùÃ÷µÄij¸ö·½·¨±»É¾³ý£¬¶øÆäËü·ÃÎʸ÷½·¨µÄÀàûÓб»ÖØÐÂ
±àÒë¡£
ClassCastException
Èç¹ûÊÔͼ°Ñ¶ÔÏóoÇ¿ÖÆ³ÉClass C£¬¶øo¼È²»ÊÇClass CµÄʵÀý£¬Ò²
²»ÊÇClass C×ÓÀàµÄʵÀý£¬Õâʱ±ã»á²úÉúClassCastException¡£
class ClassCast {
public static void main (String args [ ] ) {
Object o = new Object( );
String s = (string) o;
s.length( );
}
}
NagativeArraySizeException
Èç¹ûÒ»¸öÊý×éµÄ³¤¶ÈÊǸºÊý£¬Ôò»áÒý·¢NagativeArraySizeException
£¨Êý×鸺ϱ꣩Òì³£¡£ÀýÈçÏÂÃæÀඨÒåµÄ´úÂëÔÚÔËÐÐʱÒý·¢ÕâÒ»Òì³££º
class NegArray {
public static void main(String args [ ]) {
int a [ ] = new int [-1];
a[0] = 0;
}
}
OutOfMemoryException
µ±ÏµÍ³ÎÞ·¨ÔÙÏòÓ¦ÓóÌÐòÌṩÄÚ´æÊ±£¬»áÒý·¢
OutOfMemoryException£¨ÄÚ´æÒç³ö£©Òì³£¡£ÕâÖÖÒì³£Ö»ÄܳöÏÖÔÚ´´½¨ÐÂ
¶ÔÏóµÄʱºò£¬¼´new±»µ÷ÓõÄʱºò¡£ÀýÈ磬ÏÂÃæÒ»¶Î´úÂëÔÚÔËÐÐʱ¿Ì»á
Òý·¢OutOfMemoryExceptionÒì³££º
class Link {
int a [ ] = new int [1000000];
Link l;
}
Class OutOfMem {
public static void main(String args [ ]) {
Link root = new link( );
Link cur = root;
while (true) {
cur.l = new Link( );
cur = cur.l;
}
}
}
NoClassDefFoundException
Èç¹ûÒ»¸öÀà±»ÒýÓ㬵«ÔÚÔËÐÐʱ¿Ì£¬ÏµÍ³Ã»ÓÐÕÒµ½±»ÒýÓõÄÀ࣬Õâ
ʱ»áÒý·¢NoClassDefFoundException£¨Î´ÕÒµ½ÀඨÒ壩Òì³£¡£ÀýÈ磬
NoClassÀàµÄÉùÃ÷ÈçÏ£º
class NoClass {
public static void main(String args [ ]) {
C c = new C ( );
}
}
µ±NoClassÔËÐÐʱ£¬Èç¹û½âÊÍÆ÷ÕÒ²»µ½CÀ࣬Ôò»á²úÉú
NoClassDefFoundException¡£
×¢Ò⣬ÔÚNoClass±»±àÒëʱCÀàÒ»¶¨Òª´æÔÚ¡£
IncompatibleType Exception
Èç¹ûÊÔͼΪһ½çÃæ×÷ʵÀý£¬Ôò»áÒý·¢IncompatibleTypeException£¨Àà
ÐͲ»¼æÈÝ£©Òì³£¡£ÀýÈ磬
ÏÂÃæµÄ´úÂë»áÒý·¢Ò»¸öIncompatibleTypeException¡£
Interface I {
}
class IncompType {
public static void main(String args [ ]) {
I r = (I) new ("I");
}
}
ArrayIndexOutOfBoundsException
ÊÔͼ·ÃÎÊÊý×éÖеÄÒ»¸ö·Ç·¨ÔªËØÊ±£¬»áÒý·¢
ArrayIndexOutOfBoundsException£¨Êý×éË÷ÒýÔ½½ç£©Òì³£¡£ÀýÈ磺
Class ArrayOut {
public static void main(String args [ ]) {
int a [ ]=new int[0];
a[0]=0;
}
}
UnsatisfiedLinkException
Èç¹ûÒ»¸ö·½·¨±»ÉùÃ÷Ϊ±¾»ú£¬µ«¸Ã·½·¨ÔÚÔËÐÐʱ¿ÌÈ´²»ÄÜÁ¬½Óµ½Ò»
¸öÀý³ÌÌåÉÏȥʱ£¬»á²úÉúUnsatisfiedLinkException£¨ÎÞ·¨Á¬½Ó£©Òì³£¡£
ÀýÈ磺
Class NoLink {
static native void foo( );
public static void main(String args [ ]) {
foo( );
}
}
InternalException
InternalException£¨ÄÚ²¿£©Òì³£ÊDz»Äܱ»Òý·¢µÄ¡£Ö»ÓÐÔÚÔËÐÐʧ°Ü×÷
Ò»ÖÂÐÔ¼ì²éʱ£¬²Å»áÒý·¢Õâ¸öÒì³£¡£
BBSˮľÇ廪վ¡Ã¾«»ªÇø