妿æ¨è§å¾markdownææ¡£çç¼æççä¸èæï¼å»ºè®®æ¨ä¸è½½pdfææ¡£ï¼è¿è¡æ¥çã
# JavaSEç¯
### Q&Såºç¡é¨å
**Q1.JDK å JRE æä»ä¹åºå«ï¼**
JDKæ¯åè½é½å
¨çJava软件å¼åå
ãJRE æ¯ Javaè¿è¡æ¶ç¯å¢ã
JDKæ¥æJREææ¥æçä¸åï¼è¿æç¼è¯å¨ï¼javacï¼åå·¥å
·ï¼å¦javadocåjdbï¼ï¼å®è½å¤å建åç¼è¯ç¨åºã
JRE æ¯ Javaç¨åºè¿è¡æéçå
容çéåï¼å®å
å«äº Javaèææºï¼JVMï¼ï¼Javaç±»åºï¼javaå½ä»¤åå
¶ä»çä¸äºåºç¡æä»¶ã使¯ï¼å®ä¸è½ç¨äºå建æ°ç¨åºï¼åªè¿è¡ç¨åºã
**Q2.Javaçåºæ¬ç±»åæåªäºï¼å®ä»¬åèªç¸å¯¹åºçå°è£
ç±»åæ¯ä»ä¹ï¼è¯·è¯´æintåå®çå°è£
ç±»ä¹é´çåºå«ã**
_Javaçåºæ¬ç±»åæ8ç§ï¼_
æ´æ°åï¼byteãshortãintãlongï¼å¯¹åºä½æ°ï¼8,16,32,64ï¼
æµ®ç¹åï¼floatãdoubleï¼å¯¹åºä½æ°ï¼32,64ï¼
å符åï¼charï¼å¯¹åºä½æ°ï¼16ï¼
å¸å°ç±»åï¼booleanï¼åç¬ä½¿ç¨çæ¶åæ¯ä¼è½¬æ¢æintç±»åï¼å¦ææ¯æ°ç»ï¼åä¼è½¬æ¢æbyteç±»åï¼å æ¤å¯¹åºä¸¤ç§ä½æ°ï¼32å8ä½ï¼
_对åºçå°è£
ç±»ï¼_
æ´æ°åå
è£
ç±»ï¼Byteï¼Shortï¼Integerï¼Long
æµ®ç¹åå
è£
ç±»ï¼Floatï¼Double
å符åå
è£
ç±»ï¼Character
å¸å°ç±»åå
è£
ç±»ï¼Boolean
_Integerä¸intçåºå«ï¼_
int çé»è®¤å¼ä¸º0ï¼è Integer çé»è®¤å¼ä¸º nullï¼å³ Integer å¯ä»¥åºååºæªèµå¼åå¼ä¸º0çåºå«ï¼int åæ æ³è¡¨è¾¾åºæªèµå¼çæ
åµãä¾å¦ï¼è¦æ³è¡¨è¾¾åºæ²¡æåå èè¯åèè¯æç»©ä¸º0çåºå«ï¼ååªè½ä½¿ç¨ Integerã
**Q3.请说åºä½ç¨å publicï¼privateï¼protectedï¼ä»¥ådefaultçåºå«**
æµä¼ çé¢è¯é¢ä¸defaultç»å¸¸è¢«åæfriendlyï¼è¿ä¸¤è
没æåºå«ï¼ä½æ¯Java䏿²¡æfriendlyå
³é®åã
publicï¼å
±æçï¼è¡¨æè¯¥æ°æ®å¯¹ææäººå¼æ¾ï¼å¯ä»¥ç´æ¥è°
privateï¼ç§æçï¼å¯ä»¥ç解为èªå·±çç§æè´¢äº§ï¼ä»
èªå·±å¯ä»¥ä½¿ç¨ã
protectedï¼åä¿æ¤çï¼å¯ä»¥ç解为æä¸ç¾¤äººç»æä¸ä¸ªç¤¾å¢ï¼è¿ä¸ªç¤¾å¢éç人å¯ä»¥ä½¿ç¨ï¼å代ä¹å¯ä»¥ä½¿ç¨ãè¿ä¸ªç¤¾å¢å°±ç¸å½äºä¸ä¸ªå
ï¼å¨åä¸ä¸ªå
ä¸ç类便å¯ä»¥è®¿é®ï¼åç±»ä¹å¯ä»¥è®¿é®ã
defaultï¼é»è®¤çï¼å¨åä¸ä¸ªå
ä¸çç±»å¯ä»¥è®¿é®ï¼åä¸ä¸ªå
ä¸çåç±»ä¹å¯ä»¥è®¿é®ï¼ä½æ¯å½åç±»å¨å
¶ä»å
ä¸ï¼å°±ä¸è½è®¿é®ã

**Q4.ä¸ä¸ª".java"æºæä»¶ä¸æ¯å¦å¯ä»¥å
æ¬å¤ä¸ªç±»ï¼ä¸æ¯å
é¨ç±»ï¼ï¼æä»ä¹éå¶ï¼**
å¯ä»¥å
å«å¤ä¸ªç±»ï¼ä½æ¯åªæä¸ä¸ªç±»å¯ä»¥ä½¿ç¨publicæ¥ä¿®é¥°ï¼å¹¶ä¸æä»¶åç§°å¿
é¡»ä¸public修饰çç±»åç§°ç¸åã
**Q5.switch è¯å¥è½å¦ä½ç¨å¨ byte ä¸ï¼è½å¦ä½ç¨å¨ long ä¸ï¼è½å¦ä½ç¨å¨ String ä¸?**
switch表达å¼ä¸ï¼åªè½æ¯intç±»åæè
Integeræè
æä¸¾ç±»åãbyteãshortãcharå¯ä»¥éå¼è½¬æ¢æintç±»åï¼å æ¤å¯ä»¥ä½¿ç¨è¿ä¸ç§ç±»åç表达å¼ï¼é£ä¹longãStringç±»åå°±ä¸è½åºç¨ã
**Q6.short s1 = 1; s1 = s1 + 1;æä»ä¹é? short s1 = 1; s1 += 1;æä»ä¹é?**
åè
ä¸s1+1ä¼èªå¨è¿è¡ç±»å转æ¢ï¼ç»ææ¯intåçï¼s1æ¯shortç±»åï¼å°æ´åèµå¼ç»shortåä¼åºéãèåè
ä¸+=è¯å¥Javaç¼è¯æ¶ä¼èªå¨è¯å«ç±»åï¼å¹¶è¿è¡ç¹æ®å¤çï¼å æ¤åè
没æé误ã
**Q7.ç¨æææççæ¹æ³ç®åº 2 ä¹ä»¥ 8 çäºå ?ç¨æææçæ¹æ³ç®åºå¥æ°åå¶æ° ï¼**
2\*8=16ï¼æä»¬å¯ä»¥å¾å°2çäºè¿å¶ä½10ï¼è16çäºè¿å¶æ°ä¸º10000ï¼åç°2çäºè¿å¶æ°ä¸ç1å左移å¨ä¸ä½å°±å¯ä»¥å¾å°16çäºè¿å¶æ°ãå æ¤æä»¬å¯ä»¥ä½¿ç¨ä½ç§»è¿ç®æ¥å¿«é计ç®2\<\<3ã
奿°çäºè¿å¶æ°æåä¸ä½æ»æ¯1ï¼èå¶æ°çäºè¿å¶æ°æ»æ¯0ï¼å æ¤æä»¬å¯ä»¥ä½¿ç¨ä¸è¿ç®æ¥è¿è¡å¥å¶æ°çè¯å«ãä¾å¦è¿ä¸ªæ°ä¸ºnï¼if((n&1)= =1)æ¶ï¼æ¤æ°å°±æ¯å¥æ°ï¼if((n&1)= =0)æ¶ï¼æ¤æ°ä¸ºå¶æ°ã
**Q8.ä»ä¹æ¯å¼ç¨ç±»åï¼**
å¨Javaä¸ç±»åå¯å为两大类ï¼å¼ç±»åä¸å¼ç¨ç±»åãå¼ç±»åå°±æ¯åºæ¬æ°æ®ç±»åï¼å¦int ,double çï¼ï¼èå¼ç¨ç±»åï¼æ¯æé¤äºåºæ¬çåéç±»åä¹å¤çææç±»åï¼å¦éè¿ class å®ä¹çç±»åï¼ã常ç¨å¼ç¨ç±»å为æ°ç»ï¼æ¥å£ï¼ç±»ï¼å°¤å
¶Stringç±»ï¼æå¸¸è§ï¼æé¿èï¼ãææçç±»åå¨å
åä¸é½ä¼åé
ä¸å®çåå¨ç©ºé´(å½¢åå¨ä½¿ç¨çæ¶åä¹ä¼åé
åå¨ç©ºé´,æ¹æ³è°ç¨å®æä¹å,è¿ååå¨ç©ºé´èªå¨æ¶å¤±)ï¼åºæ¬çåéç±»ååªæä¸ååå¨ç©ºé´(åé
å¨stackä¸), èå¼ç¨ç±»åæä¸¤ååå¨ç©ºé´(ä¸åå¨stackä¸,ä¸åå¨heapä¸)ã

1ï¼ å¼ç¨æ¯ä¸ç§æ°æ®ç±»åï¼ä¿åå¨stackä¸ï¼ï¼ä¿å对象å¨å
åï¼heapï¼å 空é´ï¼ä¸çå°åï¼è¿ç§ç±»åå³ä¸æ¯æä»¬å¹³æ¶æè¯´çç®åæ°æ®ç±»åä¹ä¸æ¯ç±»å®ä¾(对象)ï¼
2ï¼ ä¸åçå¼ç¨å¯è½æååä¸ä¸ªå¯¹è±¡ï¼æ¢å¥è¯è¯´ï¼ä¸ä¸ªå¯¹è±¡å¯ä»¥æå¤ä¸ªå¼ç¨ï¼å³è¯¥ç±»ç±»åçåéã
å¼ç¨å
¶å®å°±åæ¯ä¸ä¸ªå¯¹è±¡çååæè
å«å (alias)ï¼ä¸ä¸ªå¯¹è±¡å¨å
åä¸ä¼è¯·æ±ä¸åç©ºé´æ¥ä¿åæ°æ®ï¼æ ¹æ®å¯¹è±¡ç大å°ï¼å®å¯è½éè¦å ç¨ç空é´å¤§å°ä¹ä¸çã访é®å¯¹è±¡çæ¶åï¼æä»¬ä¸ä¼ç´æ¥æ¯è®¿é®å¯¹è±¡å¨å
åä¸çæ°æ®ï¼èæ¯éè¿å¼ç¨å»è®¿é®ãå¼ç¨ä¹æ¯ä¸ç§æ°æ®ç±»åï¼æä»¬å¯ä»¥æå®æ³è±¡ä¸ºç±»ä¼¼ C++ è¯è¨ä¸æéçä¸è¥¿ï¼å®æç¤ºäºå¯¹è±¡å¨å
åä¸çå°åââåªä¸è¿æä»¬ä¸è½å¤è§å¯å°è¿ä¸ªå°åç©¶ç«æ¯ä»ä¹ã
妿æä»¬å®ä¹äºä¸æ¢ä¸ä¸ªå¼ç¨æååä¸ä¸ªå¯¹è±¡ï¼é£ä¹è¿äºå¼ç¨æ¯ä¸ç¸åçï¼å 为å¼ç¨ä¹æ¯ä¸ç§æ°æ®ç±»åï¼éè¦ä¸å®çå
å空é´ï¼stackï¼æ 空é´ï¼æ¥ä¿åã使¯å®ä»¬ç弿¯ç¸åçï¼é½æç¤ºåä¸ä¸ªå¯¹è±¡å¨å
åï¼heapï¼å 空é´ï¼çä¸ä½ç½®ã
**Q9.== å equals çåºå«æ¯ä»ä¹ï¼**
对äºåºæ¬ç±»ååå¼ç¨ç±»å == çä½ç¨æææ¯ä¸åçï¼åºæ¬ç±»åï¼æ¯è¾çæ¯å¼æ¯å¦ç¸åï¼å¼ç¨ç±»åï¼æ¯è¾çæ¯å¼ç¨æ¯å¦ç¸åï¼
equals
equals æ¬è´¨ä¸å°±æ¯ ==ï¼åªä¸è¿ String å Integer çéåäº equals æ¹æ³ï¼æå®åæäºå¼æ¯è¾ãString éåäº Object ç equals æ¹æ³ï¼æå¼ç¨æ¯è¾æ¹æäºå¼æ¯è¾ã
**Q10.Java 䏿ä½åç¬¦ä¸²é½æåªäºç±»ï¼å®ä»¬ä¹é´æä»ä¹åºå«ï¼**
ä¸»è¦æ¯StringãStringBufferãStringBuildç±»ã
String ç±»æ¯ final ç±»åçï¼å æ¤ä¸å¯ä»¥ç»§æ¿è¿ä¸ªç±»ãä¸è½ä¿®æ¹è¿ä¸ªç±»ï¼åºå±æºç 䏿é对Stringæ°æ®çä¿®æ¹æ¹æ³ï¼é½æ¯éæ°å建äºä¸ä¸ªString对象ï¼è忥çStringå¯¹è±¡æªæ¾æ¹åã对äºå符串常éï¼å¦æå
容ç¸åï¼Java 认为å®ä»¬ä»£è¡¨å ä¸ä¸ª String 对象ãèç¨å
³é®ånewè°ç¨æé å¨ï¼æ»æ¯ä¼å建ä¸ä¸ªæ°çå¯¹è±¡ï¼æ 论å
容æ¯å¦ç¸åãåç¬¦ä¸²å¦ææ¯åéç¸å ï¼å
å¼ç©ºé´ï¼å¨æ¼æ¥ãåç¬¦ä¸²å¦ææ¯å¸¸éç¸å ï¼æ¯å
å ï¼ç¶åå¨å¸¸éæ± æ¾ï¼å¦ææå°±ç´æ¥è¿åï¼å¦åï¼å°±å建ã
使¯ä¸ºäºæé«æçèç空é´å¹¶ä¸å¯ä»¥æ´æ¹å¯¹Stringç±»åæ°æ®ç´æ¥æ´æ¹ï¼æä»¬å¯ä½¿ç¨ç¨StringBuffer ç±»ãStringBuffer线ç¨å®å
¨ï¼åæ¥ï¼æçä½ï¼å¼é大ï¼å æ¤å¯ä»¥æ¹ç¨StringBuilderãStringBuilder线ç¨ä¸å®å
¨ï¼å¼æ¥ï¼æçé«ã
**Q11.ä»ä¹æ¯åæ¥å弿¥ï¼ä»ä¹æ¯çº¿ç¨å®å
¨ï¼**
忥ï¼å¯ä»¥çè§£ä¸ºå¨æ§è¡å®ä¸ä¸ªå½æ°ææ¹æ³ä¹åï¼ä¸ç´çå¾
ç³»ç»è¿åå¼ææ¶æ¯ï¼è¿æ¶ç¨åºæ¯åºäºé»å¡çï¼åªææ¥æ¶å°è¿åçå¼ææ¶æ¯åæå¾ä¸æ§è¡å
¶ä»çå½ä»¤ã妿çµè¯ï¼éä¿¡åæ¹ä¸è½æï¼æä»¬æ¯åæ¶è¿è¡ï¼åæ¥ï¼ï¼ä½ ä¸å¥æä¸å¥ï¼è¿æ ·ç好夿¯ï¼å¯¹æ¹æ³è¡¨è¾¾çä¿¡æ¯æé©¬ä¸è½æ¶å°ï¼ä½æ¯ï¼æå¨æççµè¯ï¼ææ æ³åå«çäºæ
ã
弿¥ï¼æ§è¡å®å½æ°ææ¹æ³åï¼ä¸å¿
é»å¡æ§å°çå¾
è¿åå¼ææ¶æ¯ï¼åªéè¦åç³»ç»å§æä¸ä¸ªå¼æ¥è¿ç¨ï¼é£ä¹å½ç³»ç»æ¥æ¶å°è¿åå¼ææ¶æ¯æ¶ï¼ç³»ç»ä¼èªå¨è§¦åå§æç弿¥è¿ç¨ï¼ä»è宿ä¸ä¸ªå®æ´çæµç¨ã妿¶åæ¶çä¿¡ï¼å¯¹æ¹ä¸ç¨ä¿è¯æ¤å»æä¸å®å¨ææºæï¼åæ¶ï¼æä¹ä¸ç¨æ¶å»çæææºææ²¡ææ¥çä¿¡ãè¿æ ·çè¯ï¼æççè§é¢ï¼ç¶åæ¥äºçä¿¡ï¼æå°±å¤ççä¿¡ï¼ä¹å¯ä»¥ä¸å¤çï¼ï¼æ¥çåçè§é¢ã
线ç¨å®å
¨ï¼å¤ä¸ªçº¿ç¨è®¿é®åä¸ä¸ªå¯¹è±¡æ¶ï¼å¦æä¸ç¨èèè¿äºçº¿ç¨å¨è¿è¡æ¶ç¯å¢ä¸çè°åº¦åäº¤æ¿æ§è¡ï¼ä¹ä¸éè¦è¿è¡é¢å¤çåæ¥ï¼æè
å¨è°ç¨æ¹è¿è¡ä»»ä½å
¶ä»æä½ï¼è°ç¨è¿ä¸ªå¯¹è±¡çè¡ä¸ºé½å¯ä»¥è·å¾æ£ç¡®çç»æï¼é£ä¹è¿ä¸ªå¯¹è±¡å°±æ¯çº¿ç¨å®å
¨çãä¸ä¸ªç±»æè
ç¨åºææä¾çæ¥å£å¯¹äºçº¿ç¨æ¥è¯´æ¯[ååæä½](https://baike.baidu.com/item/%E5%8E%9F%E5%AD%90%E6%93%8D%E4%BD%9C)æè
å¤ä¸ªçº¿ç¨ä¹é´ç忢ä¸ä¼å¯¼è´è¯¥æ¥å£çæ§è¡ç»æåå¨äºä¹æ§,ä¹å°±æ¯è¯´æä»¬ä¸ç¨èè忥çé®é¢ã
线ç¨å®å
¨é®é¢å¤§å¤æ¯ç±[å
¨å±åé](https://baike.baidu.com/item/%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F)å[éæåé](https://baike.baidu.com/item/%E9%9D%99%E6%80%81%E5%8F%98%E9%87%8F)å¼èµ·çï¼å±é¨åééé¸ä¹å¯è½å¯¼è´çº¿ç¨å®å
¨é®é¢ã
è¥æ¯ä¸ªçº¿ç¨ä¸å¯¹å
¨å±åéãéæåéåªæè¯»æä½ï¼èæ åæä½ï¼ä¸è¬æ¥è¯´ï¼è¿ä¸ªå
¨å±åéæ¯çº¿ç¨å®å
¨çï¼è¥æå¤ä¸ªçº¿ç¨åæ¶æ§è¡åæä½ï¼ä¸è¬é½éè¦èè[线ç¨åæ¥](https://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5)ï¼å¦åçè¯å°±å¯è½å½±å线ç¨å®å
¨ã
**Q12.String str1="i"ä¸ String str2=new String(âiâ)䏿 ·åï¼**
String str2 = new String(âiâ)ä¼å建2ï¼1ï¼ä¸ªå¯¹è±¡ï¼String str1 = âiâå建1ï¼0ï¼ä¸ªå¯¹è±¡ã
==注==:å½åç¬¦ä¸²å¸¸éæ± ä¸æå¯¹è±¡helloæ¶æ¬å·å
æç«ï¼
str1 ==str2 çå¤æä¸ºfalse;
str1 .equals(str2 )为true
**Q13.String ç±»çå¸¸ç¨æ¹æ³é½æé£äºï¼**
1ãæ±å符串é¿åº¦
**public int length()**//è¿å该å符串çé¿åº¦
2ãæ±å符串æä¸ä½ç½®å符
**public char charAt(int index)**//è¿ååç¬¦ä¸²ä¸æå®ä½ç½®çåç¬¦ï¼æ³¨æå符串ä¸ç¬¬ä¸ä¸ªåç¬¦ç´¢å¼æ¯0ï¼æåä¸ä¸ªæ¯length()-1ã
3ãæåå串
ç¨Stringç±»çsubstringæ¹æ³å¯ä»¥æåå符串ä¸çå串ï¼è¯¥æ¹æ³æä¸¤ç§å¸¸ç¨åæ°:
1\)**public String substring(int beginIndex)**//è¯¥æ¹æ³ä»beginIndexä½ç½®èµ·ï¼ä»å½åå符串ä¸ååºå©ä½çå符ä½ä¸ºä¸ä¸ªæ°çå符串è¿åã
2\)**public String substring(int beginIndex, int endIndex)**//è¯¥æ¹æ³ä»beginIndexä½ç½®èµ·ï¼ä»å½åå符串ä¸ååºå°endIndex-1ä½ç½®çå符ä½ä¸ºä¸ä¸ªæ°çå符串è¿åã
4ãå符串æ¯è¾
1\)**public int compareTo(String anotherString)**//è¯¥æ¹æ³æ¯å¯¹å符串å
容æåå
¸é¡ºåºè¿è¡å¤§å°æ¯è¾ï¼éè¿è¿åçæ´æ°å¼ææå½åå符串ä¸åæ°å符串ç大å°å
³ç³»ãè¥å½å对象æ¯åæ°å¤§åè¿åæ£æ´æ°ï¼åä¹è¿åè´æ´æ°ï¼ç¸çè¿å0ã
2\)**public int compareToIgnore(String anotherString)**//ä¸compareToæ¹æ³ç¸ä¼¼ï¼ä½å¿½ç¥å¤§å°åã
3\)**public boolean equals(Object anotherObject)**//æ¯è¾å½åå符串ååæ°å符串ï¼å¨ä¸¤ä¸ªå符串ç¸ççæ¶åè¿åtrueï¼å¦åè¿åfalseã
4\)**public boolean equalsIgnoreCase(String anotherString)**//ä¸equalsæ¹æ³ç¸ä¼¼ï¼ä½å¿½ç¥å¤§å°åã
5ãåç¬¦ä¸²è¿æ¥
**public String concat(String str)**//å°åæ°ä¸çå符串strè¿æ¥å°å½åå符串çåé¢ï¼ææçä»·äº"+"ã
6ãå符串ä¸å个åç¬¦æ¥æ¾
1\)**public int indexOf(int ch/String str)**//ç¨äºæ¥æ¾å½åå符串ä¸å符æå串ï¼è¿åå符æå串å¨å½åå符串ä¸ä»å·¦è¾¹èµ·é¦æ¬¡åºç°çä½ç½®ï¼è¥æ²¡æåºç°åè¿å-1ã
2\)**public int indexOf(int ch/String str, int fromIndex)**//æ¹æ¹æ³ä¸ç¬¬ä¸ç§ç±»ä¼¼ï¼åºå«å¨äºè¯¥æ¹æ³ä»fromIndexä½ç½®å忥æ¾ã
3\)**public int lastIndexOf(int ch/String str)**//è¯¥æ¹æ³ä¸ç¬¬ä¸ç§ç±»ä¼¼ï¼åºå«å¨äºè¯¥æ¹æ³ä»åç¬¦ä¸²çæ«å°¾ä½ç½®å忥æ¾ã
4\)**public int lastIndexOf(int ch/String str, int fromIndex)**//è¯¥æ¹æ³ä¸ç¬¬äºç§æ¹æ³ç±»ä¼¼ï¼åºå«äºè¯¥æ¹æ³ä»fromIndexä½ç½®å忥æ¾ã
7ãå符串ä¸å符ç大å°å转æ¢
1\)**public String toLowerCase()**//è¿åå°å½ååç¬¦ä¸²ä¸ææåç¬¦è½¬æ¢æå°ååçæ°ä¸²
2\)**public String toUpperCase()**//è¿åå°å½ååç¬¦ä¸²ä¸ææåç¬¦è½¬æ¢æå¤§ååçæ°ä¸²
8ãå符串ä¸åç¬¦çæ¿æ¢
1\)**public String replace(char oldChar, char newChar)**//ç¨å符newCharæ¿æ¢å½ååç¬¦ä¸²ä¸ææçoldCharå符ï¼å¹¶è¿åä¸ä¸ªæ°çå符串ã
2\)**public String replaceFirst(String regex, String replacement)**//è¯¥æ¹æ³ç¨å符replacementçå
å®¹æ¿æ¢å½åå符串ä¸éå°ç第ä¸ä¸ªåå符串regexç¸å¹é
çå串ï¼åºå°æ°çå符串è¿åã
3\)**public String replaceAll(String regex, String replacement)**//è¯¥æ¹æ³ç¨å符replacementçå
å®¹æ¿æ¢å½åå符串ä¸éå°çææåå符串regexç¸å¹é
çå串ï¼åºå°æ°çå符串è¿åã
9ãå
¶ä»ç±»æ¹æ³
1\)**String trim()**//æªå»å符串两端çç©ºæ ¼ï¼ä½å¯¹äºä¸é´çç©ºæ ¼ä¸å¤çã
2\)**boolean statWith(String prefix)**æ**boolean endWith(String suffix)**//ç¨æ¥æ¯è¾å½åå符串çèµ·å§å符æåå符串prefixåç»æ¢å符æåå符串suffixæ¯å¦åå½åå符串ç¸åï¼éè½½æ¹æ³ä¸åæ¶è¿å¯ä»¥æå®æ¯è¾çå¼å§ä½ç½®offsetã
3\)**regionMatches(boolean b, int firstStart, String other, int otherStart, int length)**//ä»å½åå符串çfirstStartä½ç½®å¼å§æ¯è¾ï¼åé¿åº¦ä¸ºlengthçä¸ä¸ªåå符串ï¼otherå符串ä»otherStartä½ç½®å¼å§ï¼æå®å¦å¤ä¸ä¸ªé¿åº¦ä¸ºlengthçå符串ï¼ä¸¤å符串æ¯è¾ï¼å½b为trueæ¶å符串ä¸åºå大å°åã
4\)**contains(String** **str)**//夿忰sæ¯å¦è¢«å
å«å¨å符串ä¸ï¼å¹¶è¿åä¸ä¸ªå¸å°ç±»åçå¼ã
10ãå符串转æ¢ä¸ºåºæ¬ç±»å
java.langå
䏿ByteãShortãIntegerãFloatãDoubleç±»çè°ç¨æ¹æ³ï¼
1\)**public static byte parseByte(String s)**
2\)**public static short parseShort(String s)**
3\)**public static short parseInt(String s)**
4\)**public static long parseLong(String s)**
5\)**public static float parseFloat(String s)**
6\)**public static double parseDouble(String s)**
11ãåºæ¬ç±»å转æ¢ä¸ºå符串类å
Stringç±»ä¸æä¾äºString valueOf()æ¾æ³ï¼ç¨ä½åºæ¬ç±»å转æ¢ä¸ºå符串类åã
1\)**static String valueOf(char data\[])**
2\)**static String valueOf(char data\[], int offset, int count)**
3\)**static String valueOf(boolean b)**
4\)**static String valueOf(char c)**
5\)**static String valueOf(int i)**
6\)**static String valueOf(long l)**
7\)**static String valueOf(float f)**
8\)**static String valueOf(double d)**
12ãè¿å¶è½¬æ¢
使ç¨Longç±»ä¸çæ¹æ³å¾å°æ´æ°ä¹é´çåç§è¿å¶è½¬æ¢çæ¹æ³ï¼
Long.toBinaryString(long l)
Long.toOctalString(long l)
Long.toHexString(long l)
Long.toString(long l, int p)//pä½ä¸ºä»»æè¿å¶
**Q14.å¦ä½å°å符串å转ï¼**
```java
import java.util.Scanner;
/**
* 使ç¨Javaä¸çStringBuffer宿å符串ç翻转
* @author xuanxuan
*
*/
public class ReverseString {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//å¦æä½¿ç¨next()æ¹æ³è¯»åå符串æ¶ï¼è¯»å°ç©ºæ ¼å°±ä¼åæ¢ï¼è使ç¨nextLine()æ¹æ³ä¼è¯»åç©ºæ ¼
String s = in.nextLine();
System.out.println(ReverseString(s));
in.close();
}
public static String ReverseString(String str) {
StringBuffer bu = new StringBuffer();
bu.append(str);
String str1 = bu.reverse().toString();
return str1;
}
}
```
**Q15.final å¨ java 䏿ä»ä¹ä½ç¨ï¼**
final 修饰çç±»å«æç»ç±»ï¼è¯¥ç±»ä¸è½è¢«ç»§æ¿ã
final ä¿®é¥°çæ¹æ³ä¸è½è¢«éåã
final 修饰çåéå«å¸¸éï¼å¸¸éå¿
é¡»åå§åï¼åå§åä¹åå¼å°±ä¸è½è¢«ä¿®æ¹ã
ä½¿ç¨ final å
³é®å修饰ä¸ä¸ªåéæ¶ï¼æ¯æå¼ç¨åéä¸è½åï¼å¼ç¨åéææåç对象ä¸çå
容 è¿æ¯å¯ä»¥æ¹åçã
**Q16.java ä¸ç Math.round(-1.5) çäºå¤å°ï¼**
Ceilåä¸åæ´ï¼flooråä¸åæ´ãRoundå
对ä¸ä¸ªæ +0.5ï¼ç¶ååä¸åæ´ãå æ¤è¿ä¸ªè¡¨è¾¾å¼çå¼ä¸º-1
**Q17.æ¯å¦å¯ä»¥ä»ä¸ä¸ª static æ¹æ³å
é¨ååºå¯¹é static æ¹æ³çè°ç¨ï¼**
ä¸å¯ä»¥ãå 为é static æ¹æ³æ¯è¦ä¸å¯¹è±¡å
³èå¨ä¸èµ·çï¼å¿
é¡»å建ä¸ä¸ªå¯¹è±¡åï¼æå¯ä»¥å¨è¯¥å¯¹ 象ä¸è¿è¡æ¹æ³è°ç¨ï¼è static æ¹æ³è°ç¨æ¶ä¸éè¦å建对象ï¼å¯ä»¥ç´æ¥è°ç¨ãä¹å°±æ¯è¯´ï¼å½ä¸ 个 static æ¹æ³è¢«è°ç¨æ¶ï¼å¯è½è¿æ²¡æå建任ä½å®ä¾å¯¹è±¡ï¼å¦æä»ä¸ä¸ª static æ¹æ³ä¸ååºå¯¹é static æ¹æ³çè°ç¨ï¼é£ä¸ªé static æ¹æ³æ¯å
³èå°åªä¸ªå¯¹è±¡ä¸çå¢ï¼è¿ä¸ªé»è¾æ æ³æç«ï¼æä»¥ï¼ ä¸ä¸ª static æ¹æ³å
é¨ååºå¯¹é static æ¹æ³çè°ç¨ã
**Q18.Overload å Override çåºå«ãOverloaded çæ¹æ³æ¯å¦å¯ä»¥æ¹åè¿åå¼çç±»å?**
Overloadæ¯éè½½çææï¼Overrideæ¯è¦ççææï¼ä¹å°±æ¯éåã
éè½½ Overload表示åä¸ä¸ªç±»ä¸å¯ä»¥æå¤ä¸ªåç§°ç¸åçæ¹æ³ï¼ä½è¿äºæ¹æ³çåæ°å表åä¸ç¸åï¼å³åæ°ä¸ªæ°æç±»åä¸åï¼ã
éå Override 表示åç±»ä¸çæ¹æ³å¯ä»¥ä¸ç¶ç±»ä¸çæä¸ªæ¹æ³çåç§°ååæ°å®å
¨ç¸åï¼éè¿åç±»å建çå®ä¾å¯¹è±¡è°ç¨è¿ä¸ªæ¹æ³æ¶ï¼å°è°ç¨åç±»ä¸çå®ä¹æ¹æ³ï¼è¿ç¸å½äºæç¶ç±»ä¸å®ä¹çé£ä¸ªå®å
¨ç¸åçæ¹æ³ç»è¦çäºï¼è¿ä¹æ¯é¢å对象ç¼ç¨ç夿æ§çä¸ç§è¡¨ç°ã
åç±»è¦çç¶ç±»çæ¹æ³æ¶ï¼åªè½æ¯ç¶ç±»æåºæ´å°çå¼å¸¸ï¼æè
æ¯æåºç¶ç±»æåºçå¼å¸¸çåå¼å¸¸ï¼å 为åç±»å¯ä»¥è§£å³ç¶ç±»çä¸äºé®é¢ï¼ä¸è½æ¯ç¶ç±»ææ´å¤çé®é¢ã
åç±»æ¹æ³çè®¿é®æéåªè½æ¯ç¶ç±»çæ´å¤§ï¼ä¸è½æ´å°ã妿ç¶ç±»çæ¹æ³æ¯ private ç±»åï¼é£ä¹ï¼åç±»åä¸åå¨è¦ççéå¶ï¼ç¸å½äºåç±»ä¸å¢å äºä¸ä¸ªå
¨æ°çæ¹æ³ã
妿å 个 Overloaded çæ¹æ³çåæ°å表ä¸ä¸æ ·ï¼å®ä»¬çè¿åè
ç±»åå½ç¶ä¹å¯ä»¥ä¸ä¸æ ·ãå¦æä¸¤ä¸ªæ¹æ³çåæ°å表å®å
¨ä¸æ ·ï¼æ¯å¦å¯ä»¥è®©å®ä»¬çè¿åå¼ä¸åæ¥å®ç°éè½½ Overload?
è¿æ¯ä¸è¡çï¼æä»¬å¯ä»¥ç¨åè¯æ³æ¥è¯´æè¿ä¸ªé®é¢ï¼ å 为æä»¬ææ¶åè°ç¨ä¸ä¸ªæ¹æ³æ¶ä¹å¯ä»¥ä¸å®ä¹è¿åç»æåéï¼å³ä¸è¦å
³å¿å
¶è¿åç»æï¼ä¾å¦ï¼æä»¬è°ç¨ map.remove(key)æ¹æ³æ¶ï¼è½ç¶ remove æ¹æ³æè¿åå¼ï¼ä½æ¯æä»¬é常é½ä¸ä¼å®ä¹æ¥æ¶è¿åç»æçåéï¼è¿æ¶ååè®¾è¯¥ç±»ä¸æä¸¤ä¸ªåç§°ååæ°å表å®å
¨ç¸åçæ¹æ³ï¼ä»
ä»
æ¯è¿åç±»åä¸å,java å°±æ æ³ç¡®å®ç¼ç¨è
ååºæ¯æ³è°ç¨åªä¸ªæ¹æ³äºï¼å ä¸ºå®æ æ³éè¿è¿åç»æç±»åæ¥å¤æã override å¯ä»¥ç¿»è¯ä¸ºè¦çï¼ä»åé¢å°±å¯ä»¥ç¥éï¼å®æ¯è¦çäºä¸ä¸ªæ¹æ³å¹¶ä¸å¯¹å
¶éåï¼ä»¥æ±è¾¾å°ä¸åçä½ç¨ã对æä»¬æ¥è¯´æçæçè¦çå°±æ¯å¯¹æ¥å£æ¹æ³çå®ç°ï¼å¨æ¥å£ä¸ä¸è¬åªæ¯å¯¹æ¹æ³ è¿è¡äºå£°æï¼èæä»¬å¨å®ç°æ¶ï¼å°±éè¦å®ç°æ¥å£å£°æçæææ¹æ³ãé¤äºè¿ä¸ªå
¸åçç¨æ³ä»¥å¤ï¼ æä»¬å¨ç»§æ¿ä¸ä¹å¯è½ä¼å¨åç±»è¦çç¶ç±»ä¸çæ¹æ³ã
å¨è¦çè¦æ³¨æä»¥ä¸çå ç¹ï¼
1ãè¦ççæ¹æ³çæ å¿å¿
é¡»è¦å被è¦ççæ¹æ³çæ å¿å®å
¨å¹é
ï¼æè½è¾¾å°è¦ççææï¼
2ãè¦ççæ¹æ³çè¿åå¼å¿
é¡»å被è¦ççæ¹æ³çè¿åä¸è´ï¼
3ãè¦ççæ¹æ³ææåºçå¼å¸¸å¿
é¡»å被è¦çæ¹æ³çææåºçå¼å¸¸ä¸è´ï¼æè
æ¯å
¶åç±»ï¼
4ã被è¦ççæ¹æ³ä¸è½ä¸º privateï¼å¦åå¨å
¶åç±»ä¸åªæ¯æ°å®ä¹äºä¸ä¸ªæ¹æ³ï¼å¹¶æ²¡æå¯¹å
¶è¿è¡è¦çã
overload 对æä»¬æ¥è¯´å¯è½æ¯è¾çæï¼å¯ä»¥ç¿»è¯ä¸ºéè½½ï¼å®æ¯ææä»¬å¯ä»¥å®ä¹ä¸äºåç§°ç¸åçæ¹æ³ï¼éè¿å®ä¹ä¸åçè¾å
¥åæ°æ¥åºåè¿äºæ¹æ³ï¼ç¶ååè°ç¨æ¶ï¼VM 就伿 ¹æ®ä¸åçåæ°æ ·å¼ï¼æ¥éæ©åéçæ¹æ³æ§è¡ãå¨ä½¿ç¨éè½½è¦æ³¨æä»¥ä¸çå ç¹ï¼
1ãå¨ä½¿ç¨éè½½æ¶åªè½éè¿ä¸åçåæ°æ ·å¼ãä¾å¦ï¼ä¸åçåæ°ç±»åï¼ä¸åçåæ°ä¸ªæ°ï¼ä¸åçåæ°é¡ºåºï¼å½ç¶ï¼å䏿¹æ³å
çå ä¸ªåæ°ç±»åå¿
é¡»ä¸ä¸æ ·ï¼ä¾å¦å¯ä»¥æ¯ fun(int,float)ï¼ ä½æ¯ä¸è½ä¸º fun(int,int)ï¼ï¼
2ãä¸è½éè¿è®¿é®æéãè¿åç±»åãæåºçå¼å¸¸è¿è¡éè½½ï¼
3ãæ¹æ³çå¼å¸¸ç±»ååæ°ç®ä¸ä¼å¯¹éè½½é æå½±åï¼
4ã对äºç»§æ¿æ¥è¯´ï¼å¦ææä¸æ¹æ³å¨ç¶ç±»ä¸æ¯è®¿é®æéæ¯ priavteï¼é£ä¹å°±ä¸è½å¨å类对å
¶è¿ è¡éè½½ï¼å¦æå®ä¹çè¯ï¼ä¹åªæ¯å®ä¹äºä¸ä¸ªæ°æ¹æ³ï¼èä¸ä¼è¾¾å°éè½½çææã
**Q19.æé å¨ Constructor æ¯å¦å¯è¢« override?**
æé å¨ Constructor ä¸è½è¢«ç»§æ¿ï¼å æ¤ä¸è½éå Overrideï¼ä½å¯ä»¥è¢«éè½½ Overloadã
**Q20.abstract class å interface æä»ä¹åºå«?**
Abstractï¼
- 嫿 abstract 修饰符ç class å³ä¸ºæ½è±¡ç±»ï¼abstract ç±»ä¸è½å建çå®ä¾å¯¹è±¡ã
- 嫿 abstract æ¹æ³çç±»å¿
é¡»å®ä¹ä¸ºabstract classï¼abstract classç±»ä¸çæ¹æ³ä¸å¿
æ¯æ½è±¡çãabstract classç±»ä¸å®ä¹æ½è±¡æ¹æ³å¿
é¡»å¨å
·ä½(Concrete)åç±»ä¸å®ç°ï¼æä»¥ï¼ä¸è½ææ½è±¡æé æ¹æ³ææ½è±¡éææ¹æ³ã
- 妿çå类没æå®ç°æ½è±¡ç¶ç±»ä¸çæææ½è±¡æ¹æ³ï¼é£ä¹åç±»ä¹å¿
é¡»å®ä¹ä¸º abstract ç±»åã
æ¥å£ï¼interfaceï¼å¯ä»¥è¯´ææ¯æ½è±¡ç±»çä¸ç§ç¹ä¾ï¼æ¥å£ä¸çæææ¹æ³é½å¿
é¡»æ¯æ½è±¡çã
æ¥å£ä¸çæ¹æ³å®ä¹é»è®¤ä¸º public abstract ç±»åï¼æ¥å£ä¸çæååéç±»åé»è®¤ä¸ºpublic static finalã
两è
åºå«ï¼
1.æ½è±¡ç±»å¯ä»¥ææé æ¹æ³ï¼æ¥å£ä¸ä¸è½ææé æ¹æ³ã
2.æ½è±¡ç±»ä¸å¯ä»¥ææ®éæååéï¼æ¥å£ä¸æ²¡ææ®éæååé
3.æ½è±¡ç±»ä¸å¯ä»¥å
å«éæ½è±¡çæ®éæ¹æ³ï¼æ¥å£ä¸çæææ¹æ³å¿
须齿¯æ½è±¡çï¼ä¸è½æéæ½è±¡ çæ®éæ¹æ³ã
4.æ½è±¡ç±»ä¸çæ½è±¡æ¹æ³ç访é®ç±»åå¯ä»¥æ¯ publicï¼protected åï¼é»è®¤ç±»å,è½ç¶ eclipse ä¸ä¸æ¥éï¼ä½åºè¯¥ä¹ä¸è¡ï¼ï¼ä½æ¥å£ä¸çæ½è±¡æ¹æ³åªè½æ¯ public ç±»åçï¼å¹¶ä¸é»è®¤å³ 为 public abstract ç±»åã
5.æ½è±¡ç±»ä¸å¯ä»¥å
å«éææ¹æ³ï¼æ¥å£ä¸ä¸è½å
å«éææ¹æ³
6.æ½è±¡ç±»åæ¥å£ä¸é½å¯ä»¥å
å«éææååéï¼æ½è±¡ç±»ä¸çéææååéç访é®ç±»åå¯ä»¥ä»» æï¼ä½æ¥å£ä¸å®ä¹çåéåªè½æ¯ public static final ç±»åï¼å¹¶ä¸é»è®¤å³ä¸º public static final ç±» åã
7.ä¸ä¸ªç±»å¯ä»¥å®ç°å¤ä¸ªæ¥å£ï¼ä½åªè½ç»§æ¿ä¸ä¸ªæ½è±¡ç±»ã
**Q21.æ¥å£æ¯å¦å¯ç»§æ¿æ¥å£?æ½è±¡ç±»æ¯å¦å¯å®ç°(implements)æ¥å£?æ½è±¡ç±»æ¯å¦å¯ ç»§æ¿å
·ä½ç±»(concrete class)?æ½è±¡ç±»ä¸æ¯å¦å¯ä»¥æéæç main æ¹æ³ï¼**
æ¥å£å¯ä»¥ç»§æ¿æ¥å£ãæ½è±¡ç±»å¯ä»¥å®ç°(implements)æ¥å£ï¼æ½è±¡ç±»å¯ä»¥ç»§æ¿å
·ä½ç±»ãæ½è±¡ç±»ä¸ å¯ä»¥æéæç main æ¹æ³ãæ½è±¡ç±»ä¸æ®éç±»çå¯ä¸åºå«ï¼å°±æ¯ä¸è½å建å®ä¾å¯¹è±¡åå
许æ abstract æ¹æ³ã
**Q22.Java ä¸å®ç°å¤æçæºå¶æ¯ä»ä¹ï¼**
é çæ¯ç¶ç±»ææ¥å£å®ä¹çå¼ç¨åéå¯ä»¥æååç±»æå
·ä½å®ç°ç±»çå®ä¾å¯¹è±¡ï¼èç¨åºè°ç¨çæ¹ æ³å¨è¿è¡ææå¨æç»å®ï¼å°±æ¯å¼ç¨åéææåçå
·ä½å®ä¾å¯¹è±¡çæ¹æ³ï¼ä¹å°±æ¯å
å鿣å¨è¿ è¡çé£ä¸ªå¯¹è±¡çæ¹æ³ï¼è䏿¯å¼ç¨åéçç±»åä¸å®ä¹çæ¹æ³ã
**Q22.说åºä¸äºå¸¸ç¨çç±»ï¼å
ï¼æ¥å£ï¼è¯·å举 5 个ï¼**
常ç¨çç±»ï¼BufferedReader BufferedWriter FileReader FileWirter String Integer java.util.Dateï¼Systemï¼Classï¼List,HashMap
常ç¨çå
ï¼java.lang java.io java.util java.sql,javax.servlet,org.hibernate
常ç¨çæ¥å£ï¼Remote List Map Document NodeList,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)ã Session(Hibernate),HttpSession
**Q23.Javaç±»çåå§å顺åº**
_æ®éç±»ä¸ï¼_
- éæåé
- éæä»£ç å
- æ®éåé
- æ®é代ç å
- æé 彿°
_嫿åç±»çï¼_
- ç¶ç±»éæåé
- ç¶ç±»éæä»£ç å
- åç±»éæåé
- åç±»éæä»£ç å
- ç¶ç±»æ®éåé
- ç¶ç±»æ®é代ç å
- ç¶ç±»æé 彿°
- åç±»æ®éåé
- åç±»æ®é代ç å
- åç±»æé 彿°
_嫿æ¥å£ãæ½è±¡ç±»ãå®ç°ç±»ç_
- æ¥å£éæåé
- æ½è±¡ç±»éæåé
- æ½è±¡ç±»éæä»£ç å
- å®ç°ç±»éæåé
- å®ä¹ ç±»éæä»£ç å
- æ½è±¡ç±»æ®éåé
- æ½è±¡ç±»æ®é代ç å
- æ½è±¡ç±»æé 彿°
- å®ç°ç±»æ®éåé
- å®ç°ç±»æ®é代ç å
- å®ç°ç±»æé 彿°
**Q23.privateå¯ä»¥éè¿åå°è®¿é®ï¼é£ä¹privateçæä¹æ¯ä»ä¹**
privateå
¶å®åªæ¯ä¸ç§Javaç¼åè§èï¼å¹¶ä¸å
·å¤ç»å¯¹å®å
¨çç¹å¾ï¼å½å¤é¨ç±»å¯¹å¯¹è±¡è¿è¡è°ç¨æ¶ï¼å¯ä»¥çå°æ¸
æ°çç±»ç»æã
**Q24.å±é¨åé为ä½è¦æ¾ç¤ºèµå¼ï¼å¦åç¼è¯ä¸éè¿**
å±é¨åéçèµå¼åå弿¯ç±ç»å¯¹æ§çå
å顺åºï¼ç±ç¼è¯å¨æ¥å³å®ï¼è¿æ¯ä¸ç§çº¦æãç¼è¯ä¸éè¿æ¯å 为è¦é²æ¢å±é¨åéå¿è®°èµå¼ï¼èå¼èµ·ç失误ã
**Q25.éæåéä¸å®ä¾åéçåºå«**
éæåé使ç¨staticå£°ææ¶ï¼å±äºç±»ï¼ä¹ç§°ä¸ºç±»åéæè
å
¨å±åéï¼ç¨åºåªè¦å è½½ï¼éæåéå°±å¯ä»¥ä½¿ç¨ã
å®ä¾åéå±äºæä¸ªå¯¹è±¡å±æ§ï¼å¿
é¡»å建å®ä¾å¯¹è±¡ã
**Q26.è§£éä¸ä¸ä»ä¹æ¯æé å¨**
å¨åå»ºå¯¹è±¡æ¶æ§è¡åå§åï¼éè¿newå
³é®åæ¥è°ç¨æé å¨ï¼æé å¨è¿å该类对象ï¼ä½è¿ä¸ªå¯¹è±¡å¹¶ä¸å
¨ç±æé å¨è´è´£ãæé å¨ä¸è½è¢«ç»§æ¿ï¼å æ¤ä¸è½éåï¼ä½æ¯å¯ä»¥éè½½ãä¸ä¸ªåç±»å¨æ¾ç¤ºè°ç¨ç¶ç±»æé 卿¶ï¼å¿
é¡»ç¨super
**Q27.1/0å1.0/0.0æä»ä¹åºå«**
1/0ä¼çåºå¼å¸¸ï¼è1.0/0.0æ¯æ 穷大
**Q28.å°GBKåèæµè½¬æ¢ä¸ºUTF-8**
```java
byte[] str , dst;
dst = new String(src , "GBK").getBytes("UTF-8");
```
**Q28.äºç»´æ°ç»çå®ä¹**
```java
float f[][] = new float[6][6];
float []f[] = new float[6][6];
float [][]f = new float[6][6];
float [][]f = new float[6][];
```
**Q29.String str = new String(âabcâ)å¨å
åä¸å¦ä½åé
ï¼**
âabcâä¿åå¨å¸¸éæ± ä¸ï¼strä½ä¸ºå¯¹è±¡è¢«ä¿åå¨å ä¸ï¼ç¶èJava7åï¼å°å¸¸éæ± æ¾å¨äºå éã
**Q30.ä¸åç¨åºä¸æä»ä¹é误ï¼**
```java
ç¶ç±»{æ¹æ³1}
åç±»extendsç¶ç±»{éåæ¹æ³1ï¼æ¹æ³2}
ç¶ç±» 对象 = new åç±»();
```
æ¤ä»£ç ä¸è½éè¿ç¼è¯ï¼ç¼è¯å¨è®¤ä¸ºå¯¹è±¡æ¯ç¶ç±»ç±»åï¼ç¶ç±»ä¸æ²¡æåç±»ä¸çæ¹æ³2ï¼å¯¹è±¡åªè½è°ç¨ç¶ç±»ä¸çæ¹æ³1ã
**Q31.JDBCä¸è·åç»æéçæä½æåªäºï¼**
```java
1.Statement sta = con.createStatment();
ResultSet rs = sta.executeQuery("SQLè¯å¥");
2.PreparedStatement pst = con.prepareStatement("SQLè¯å¥");
ResultSet rs = pst.executeQuery();
```
**Q32.Javaä¸çIOæµåå ç§ï¼**
ææµååï¼ç«å¨ç¨åºè§åº¦èèï¼
è¾å
¥æµ(input)
è¾åºæµ(output)
æç±»åå:
åèæµ(InputStream/OutputStream)
任使件é½å¯ä»¥éè¿åèæµè¿è¡ä¼ è¾ã
å符æµ(Reader/Writer)
éçº¯ææ¬æä»¶ï¼ä¸è½ç¨å符æµï¼ä¼å¯¼è´æä»¶æ ¼å¼ç ´åï¼ä¸è½æ£å¸¸æ§è¡ã
æåè½å:
èç¹æµ(ä½çº§æµ:ç´æ¥è·è¾å
¥è¾åºæºå¯¹æ¥)
FileInputStream/FileOutputStream/FileReader/FileWriter/PrintStream/PrintWriter.
å¤çæµ(é«çº§æµ:建ç«å¨ä½çº§æµçåºç¡ä¸)
è½¬æ¢æµï¼InputStreamReader/OutputStreamWriterï¼åèæµè½¬å符æµ/å符æµè½¬åèæµ
ç¼å²æµï¼BufferedInputStream/BufferedOutputStream BufferedReader/BufferedReaderå¯å¯¹èç¹æµç»è¡å
è£
ï¼ä½¿è¯»åæ´å¿«
**Q33.BIO\\NIO\\AIOä¸çåºå«ï¼**
- Java BIO ï¼ åæ¥å¹¶é»å¡ï¼æå¡å¨å®ç°æ¨¡å¼ä¸ºä¸ä¸ªè¿æ¥ä¸ä¸ªçº¿ç¨ï¼å³å®¢æ·ç«¯æè¿æ¥è¯·æ±æ¶æå¡å¨ç«¯å°±éè¦å¯å¨ä¸ä¸ªçº¿ç¨è¿è¡å¤çï¼å¦æè¿ä¸ªè¿æ¥ä¸åä»»ä½äºæ
ä¼é æä¸å¿
è¦ç线ç¨å¼éï¼å½ç¶å¯ä»¥éè¿çº¿ç¨æ± æºå¶æ¹åã
- Java NIO ï¼ åæ¥éé»å¡ï¼æå¡å¨å®ç°æ¨¡å¼ä¸ºä¸ä¸ªè¯·æ±ä¸ä¸ªçº¿ç¨ï¼å³å®¢æ·ç«¯åéçè¿æ¥è¯·æ±é½ä¼æ³¨åå°å¤è·¯å¤ç¨å¨ä¸ï¼å¤è·¯å¤ç¨å¨è½®è¯¢å°è¿æ¥æI/Oè¯·æ±æ¶æå¯å¨ä¸ä¸ªçº¿ç¨è¿è¡å¤çã
- Java AIO(NIO.2) ï¼ å¼æ¥éé»å¡ï¼æå¡å¨å®ç°æ¨¡å¼ä¸ºä¸ä¸ªææè¯·æ±ä¸ä¸ªçº¿ç¨ï¼å®¢æ·ç«¯çI/O请æ±é½æ¯ç±OSå
宿äºåéç¥æå¡å¨åºç¨å»å¯å¨çº¿ç¨è¿è¡å¤çã
_BIOãNIOãAIOéç¨åºæ¯åæ:_
- BIOæ¹å¼éç¨äºè¿æ¥æ°ç®æ¯è¾å°ä¸åºå®çæ¶æï¼è¿ç§æ¹å¼å¯¹æå¡å¨èµæºè¦æ±æ¯è¾é«ï¼å¹¶åå±éäºåºç¨ä¸ï¼JDK1.4以åçå¯ä¸éæ©ï¼ä½ç¨åºç´è§ç®åæçè§£ã
- NIOæ¹å¼éç¨äºè¿æ¥æ°ç®å¤ä¸è¿æ¥æ¯è¾çï¼è½»æä½ï¼çæ¶æï¼æ¯å¦è天æå¡å¨ï¼å¹¶åå±éäºåºç¨ä¸ï¼ç¼ç¨æ¯è¾å¤æï¼JDK1.4å¼å§æ¯æã
- AIOæ¹å¼ä½¿ç¨äºè¿æ¥æ°ç®å¤ä¸è¿æ¥æ¯è¾é¿ï¼éæä½ï¼çæ¶æï¼æ¯å¦ç¸åæå¡å¨ï¼å
åè°ç¨OSåä¸å¹¶åæä½ï¼ç¼ç¨æ¯è¾å¤æï¼JDK7å¼å§æ¯æã
**Q34.Filesçå¸¸ç¨æ¹æ³ï¼**
ï¼ä¸ï¼è®¿é®æä»¶åæè·¯å¾
1ï¼String getName() è¿åFile对象æè¡¨ç¤ºçæä»¶åææä»¶è·¯å¾
2ï¼String getPath() è¿åFile对象æå¯¹åºçç¸å¯¹è·¯å¾åã
3ï¼File getAbsoluteFile() è¿åFile对象çç»å¯¹è·¯å¾æä»¶
4ï¼String getAbsolutePath() è¿åFile对象æå¯¹åºçç»å¯¹è·¯å¾å
5ï¼String getParentï¼ï¼ è¿åFile对象æå¯¹åºç®å½çç¶ç®å½
6. boolean renameTo(File dest) éå½åFile对象çæä»¶æç®å½
ï¼äºï¼æä»¶æ£æµ
1boolean exists() 夿File对象çæä»¶æç®å½æ¯å¦åå¨
2)bool canWrite() 夿File对象æ¯å¦å¯å
3)boolean canRead()夿File对象æ¯å¦å¯è¯»
4)boolean isDirectory() 夿File对象æ¯å¦æ¯ç®å½
5)boolean isFile() 夿File对象æ¯å¦æ¯æä»¶
6)boolean isAbsolute() 夿File对象æ¯å¦éç¨ç»å¯¹è·¯å¾
(ä¸ï¼æä»¶ä¿¡æ¯
1)long length() ; Fileå¯¹è±¡å¯¹åºæä»¶çé¿åº¦
2)long lastNodified() File对象æåä¿®æ¹çæ¶é´
(åï¼æä»¶æä½
1ï¼boolean createNewFile() ; æ£æ¥æä»¶æ¯å¦åå¨ï¼å½æä»¶ä¸å卿¶å建ä¸ä¸ªæ°çæä»¶
2. boolean delete() å é¤File对象æå¯¹åºçæä»¶æç®å½
(äºï¼ç®å½æä½
1)boolean mkdir() å建ä¸ä¸ªFile对象æå¯¹åºçè·¯å¾
2)String\[] list() ååºFile对象ææçåæä»¶ååè·¯å¾å
3)File\[] listFile() ååºFileå¯¹è±¡çææåæä»¶æè·¯å¾
4)static File\[] listRoots() ååºç³»ç»ææçæ ¹è·¯å¾
### Q&Séåé¨å
**Q1.Javaä¸ç容卿åªäºï¼**
æ°ç»ãStringï¼åºå±æ¯charç±»åæ°ç»ï¼ãListï¼çº¿æ§è¡¨ï¼ãSetï¼æ åºåå¨ï¼å
ç´ ä¸è½éå¤ï¼ãMapï¼æ åºåå¨ï¼å
ç´ å¯ä»¥éå¤ï¼
**Q2.Collection å Collections æä»ä¹åºå«ï¼**
1ãjava.util.Collection æ¯ä¸ä¸ª**é忥å£ï¼éåç±»çä¸ä¸ªé¡¶çº§æ¥å£ï¼**ã宿ä¾äºå¯¹éå对象è¿è¡åºæ¬æä½çéç¨æ¥å£æ¹æ³ãCollectionæ¥å£å¨Java ç±»åºä¸æå¾å¤å
·ä½çå®ç°ãCollectionæ¥å£çæä¹æ¯ä¸ºåç§å
·ä½çéåæä¾äºæå¤§åçç»ä¸æä½æ¹å¼ï¼å
¶ç´æ¥ç»§æ¿æ¥å£æListä¸Setã
Collection\
âList\
ââLinkedList\
ââArrayList\
ââVector\
âãâStack\
âSet
2ãCollections忝éåç±»çä¸ä¸ªå·¥å
·ç±»/帮å©ç±»ï¼å
¶ä¸æä¾äºä¸ç³»åéææ¹æ³ï¼ç¨äºå¯¹éåä¸å
ç´ è¿è¡æåºãæç´¢ä»¥å线ç¨å®å
¨çåç§æä½ã
1. æåº(Sort)
使ç¨sortæ¹æ³å¯ä»¥æ ¹æ®å
ç´ çèªç¶é¡ºåº 对æå®å表æååºè¿è¡æåºãå表ä¸çææå
ç´ é½å¿
é¡»å®ç° Comparable æ¥å£ãæ¤å表å
çææå
ç´ é½å¿
é¡»æ¯ä½¿ç¨æå®æ¯è¾å¨å¯ç¸äºæ¯è¾ç
2. æ··æï¼Shufflingï¼
æ··æç®æ³æåçæ£å¥½ä¸ sort ç¸å: 宿乱å¨ä¸ä¸ª List ä¸å¯è½æç任使åç踪迹ãä¹å°±æ¯è¯´ï¼åºäºéæºæºçè¾å
¥éæè¯¥ List, è¿æ ·çæåå
·æç¸åçå¯è½æ§ï¼åè®¾éæºæºæ¯å
¬æ£çï¼ãè¿ä¸ªç®æ³å¨å®ç°ä¸ä¸ªç¢°è¿æ°ç游æä¸æ¯é常æç¨çãCollections.Shuffling(list)
3. å转(Reverse)
使ç¨Reverseæ¹æ³å¯ä»¥æ ¹æ®å
ç´ çèªç¶é¡ºåº 对æå®å表æéåºè¿è¡æåºãCollections.reverse(list)
4. æ¿æ¢æä»¥çå
ç´ (Fill)
ä½¿ç¨æå®å
ç´ æ¿æ¢æå®å表ä¸çææå
ç´ ãCollections.fill(li,"aaa");
5. æ·è´(Copy)
ç¨ä¸¤ä¸ªåæ°ï¼ä¸ä¸ªç®æ List åä¸ä¸ªæº List, å°æºçå
ç´ æ·è´å°ç®æ ï¼å¹¶è¦çå®çå
容ãç®æ List è³å°ä¸æºä¸æ ·é¿ã妿宿´é¿ï¼åå¨ç®æ List ä¸çå©ä½å
ç´ ä¸åå½±åãCollections.copy(list,li): åé¢ä¸ä¸ªåæ°æ¯ç®æ å表 ,åä¸ä¸ªæ¯æºå表ã
6. è¿åCollections䏿å°å
ç´ (min)
æ ¹æ®æå®æ¯è¾å¨äº§çç顺åºï¼è¿åç»å® collection çæå°å
ç´ ãcollection ä¸çææå
ç´ é½å¿
é¡»æ¯éè¿æå®æ¯è¾å¨å¯ç¸äºæ¯è¾çã
Collections.min(list)
7. è¿åCollections䏿å°å
ç´ (max)
æ ¹æ®æå®æ¯è¾å¨äº§çç顺åºï¼è¿åç»å® collection çæå¤§å
ç´ ãcollection ä¸çææå
ç´ é½å¿
é¡»æ¯éè¿æå®æ¯è¾å¨å¯ç¸äºæ¯è¾çã
Collections.max(list)
8. lastIndexOfSubList
è¿åæå®æºåè¡¨ä¸æå䏿¬¡åºç°æå®ç®æ å表çèµ·å§ä½ç½®
int count = Collections.lastIndexOfSubList(list,li);
9. IndexOfSubList
è¿åæå®æºå表ä¸ç¬¬ä¸æ¬¡åºç°æå®ç®æ å表çèµ·å§ä½ç½®
int count = Collections.indexOfSubList(list,li);
10. Rotate
æ ¹æ®æå®çè·ç¦»å¾ªç¯ç§»å¨æå®å表ä¸çå
ç´
Collections.rotate(list,-1);妿æ¯è´æ°ï¼åæ£åç§»å¨ï¼æ£æ°åæ¹åç§»å¨ã
**Q3.ListãSetãMap æä»ä¹åºå«ï¼**
_**Listï¼**_
- å¯ä»¥å
许éå¤ç对象ã
- å¯ä»¥æå
¥å¤ä¸ªnullå
ç´ ã
- æ¯ä¸ä¸ªæåºå®¹å¨ï¼ä¿æäºæ¯ä¸ªå
ç´ çæå
¥é¡ºåºï¼è¾åºç顺åºå°±æ¯æå
¥ç顺åºã
- 常ç¨çå®ç°ç±»æ ArrayListãLinkedList å VectorãArrayList æä¸ºæµè¡ï¼å®æä¾äºä½¿ç¨ç´¢å¼çéæè®¿é®ï¼è LinkedList å对äºç»å¸¸éè¦ä» List 䏿·»å æå é¤å
ç´ çåºåæ´ä¸ºåéã
_**Setï¼**_
- ä¸å
许éå¤å¯¹è±¡
- æ åºå®¹å¨ï¼ä½ æ æ³ä¿è¯æ¯ä¸ªå
ç´ çåå¨é¡ºåºï¼TreeSetéè¿ Comparator æè
Comparable ç»´æ¤äºä¸ä¸ªæåºé¡ºåºã
- åªå
许ä¸ä¸ª null å
ç´
- Set æ¥å£ææµè¡çå 个å®ç°ç±»æ¯ HashSetãLinkedHashSet 以å TreeSetãææµè¡çæ¯åºäº HashMap å®ç°ç HashSetï¼TreeSet è¿å®ç°äº SortedSet æ¥å£ï¼å æ¤ TreeSet æ¯ä¸ä¸ªæ ¹æ®å
¶ compare() å compareTo() çå®ä¹è¿è¡æåºçæåºå®¹å¨ã
_**Map:**_
- Map䏿¯collectionç忥壿è
å®ç°ç±»ãMapæ¯ä¸ä¸ªæ¥å£ã
- Map ç æ¯ä¸ª Entry 齿æä¸¤ä¸ªå¯¹è±¡ï¼ä¹å°±æ¯ä¸ä¸ªé®ä¸ä¸ªå¼ï¼Map å¯è½ä¼ææç¸åçå¼å¯¹è±¡ä½é®å¯¹è±¡å¿
é¡»æ¯å¯ä¸çã
- TreeMap ä¹éè¿ Comparator æè
Comparable ç»´æ¤äºä¸ä¸ªæåºé¡ºåºã
- Map éä½ å¯ä»¥æ¥æéæä¸ª null å¼ä½æå¤åªè½æä¸ä¸ª null é®ã
- Map æ¥å£ææµè¡çå 个å®ç°ç±»æ¯ HashMapãLinkedHashMapãHashtable å TreeMapãï¼HashMapãTreeMapæå¸¸ç¨ï¼
**Q4.ä»ä¹åºæ¯ä¸ä½¿ç¨listãsetãmapï¼**
1. å¦æä½ ç»å¸¸ä¼ä½¿ç¨ç´¢å¼æ¥å¯¹å®¹å¨ä¸çå
ç´ è¿è¡è®¿é®ï¼é£ä¹ List æ¯ä½ çæ£ç¡®çéæ©ãå¦æä½ å·²ç»ç¥éç´¢å¼äºçè¯ï¼é£ä¹ List çå®ç°ç±»æ¯å¦ ArrayList å¯ä»¥æä¾æ´å¿«éç访é®,妿ç»å¸¸æ·»å å é¤å
ç´ çï¼é£ä¹è¯å®è¦éæ©LinkedListã
2. å¦æä½ æ³å®¹å¨ä¸çå
ç´ è½å¤æç
§å®ä»¬æå
¥ç次åºè¿è¡æåºåå¨ï¼é£ä¹è¿æ¯ Listï¼å 为 List æ¯ä¸ä¸ªæåºå®¹å¨ï¼å®æç
§æå
¥é¡ºåºè¿è¡åå¨ã
3. å¦æä½ æ³ä¿è¯æå
¥å
ç´ çå¯ä¸æ§ï¼ä¹å°±æ¯ä½ 䏿³æéå¤å¼çåºç°ï¼é£ä¹å¯ä»¥éæ©ä¸ä¸ª Set çå®ç°ç±»ï¼æ¯å¦ HashSetãLinkedHashSet æè
TreeSetãææ Set çå®ç°ç±»é½éµå¾ªäºç»ä¸çº¦ææ¯å¦å¯ä¸æ§ï¼èä¸è¿æä¾äºé¢å¤çç¹æ§æ¯å¦ TreeSet è¿æ¯ä¸ä¸ª SortedSetï¼ææåå¨äº TreeSet ä¸çå
ç´ å¯ä»¥ä½¿ç¨ Java éç Comparator æè
Comparable è¿è¡æåºãLinkedHashSet 乿ç
§å
ç´ çæå
¥é¡ºåºå¯¹å®ä»¬è¿è¡åå¨ã
4. å¦æä½ ä»¥é®åå¼çå½¢å¼è¿è¡æ°æ®åå¨é£ä¹ Map æ¯ä½ æ£ç¡®çéæ©ãä½ å¯ä»¥æ ¹æ®ä½ çåç»éè¦ä» HashtableãHashMapãTreeMap ä¸è¿è¡éæ©ã
**Q5.HashMap å Hashtable æä»ä¹åºå«ï¼**
å
±åç¹ï¼é½å®æäºMapæ¥å£çå®ç°
åºå«ï¼
- HashMapå
许空é®å¼ï¼å¼æ¥å¤çï¼é线ç¨å®å
¨ï¼åªæä¸ä¸ªçº¿ç¨çæ
åµä¸æçé«äºHashTableãHashTable忥ï¼çº¿ç¨å®å
¨ã
- HashMapå°HashTableä¸çcontainsæ¹æ³æ´æ¹ä¸ºcontainsvalueåcontainskeyã
- HashMapæ¯Mapæ¥å£çä¸ä¸ªå®ç°ï¼HashTableåºäºéæ§çDictionaryæ½è±¡ç±»ã
**Q6.HashMap å Hashtableçå®ç°åçï¼ä¸»è¦è®²è®²HashMapçåçï¼ï¼HashMapç1.7å1.8çåºå«ï¼**
å
±åç¹ï¼å®ç°åçåºæ¬ç¸åï¼é½æ¯ä½¿ç¨åå¸è¡¨çâæé¾æ³âï¼åºäºæ°ç»ï¼Entryç±»åï¼åé¾è¡¨å®ç°ã两è
æé æ¹æ³çæææ¯ç¸åçã
```java
HashMap(){}
é»è®¤å®¹é为16ï¼è£
å¡«å å为0.75ãHashTableé»è®¤å®¹é为11ã
HashMap(int initialCapacity){}
æå®åå§å®¹éï¼è£
å¡«å åé»è®¤ä¸º0.75
HashMap(int initialCapacityï¼float loadFactor){}
æå®å®¹éåè£
å¡«å å
HashMap(Map m)
æé æ°çHashMap
```
èå¯HashMapçåçï¼å°±æ¯èå¯putågetåçã
putåçæ ¹æ®keyå¼è·åç¸åºçhashå¼ï¼
```java
int hash = hash(key.has.hascode())
```
å
¶å®å°±æ¯ä½¿ç¨åå¸è¡¨åçä¸çé¤ç使°æ³æ¥ç¡®å®keyå¼åºè¯¥å¨æ°ç»ä¸çä½ç½®ï¼æ°ç»çä½ç¨æ¯å
å½ç´¢å¼ï¼keyå¼ç¸åæ å°å°æ°ç»ä¸çåä¸ä½ç½®ï¼ä½¿ç¨å¤´ææ³æ¾å¨è¡¨å¤´ã
getåçå©ç¨hashå¼å
è¿è¡æ°ç»ä¸å®ä½ï¼åéåé¾è¡¨ä½¿ç¨equals()æ¹æ³å¹é
ã
å½HashMapè¾¾å°é»è®¤å å0.75ï¼ä¼èªå¨ååæ©å®¹ï¼æ©å®¹åéæ°è®¡ç®æ¯ä¸ªkeyå¼çhashå¼ãæ°ç»é¿åº¦å¿
须为16æè
2ç广¬¡ï¼è¿æ ·åçç®çæ¯ä½¿ä½è¿ç®çç»æè½å¤åååå¸ã
HashMap没æå éï¼å æ¤é æäºé线ç¨å®å
¨ï¼è¥HashMapæ¥è¿ä¸´çç¹ï¼ä¸æä¸¤ä¸ªæå¤ä¸ªçº¿ç¨å¹¶åputæä½ï¼ä¼è¿è¡æ©å®¹ä¸hashå¼éæ°ç»ç®ï¼èrehashå¨å¹¶åæ
åµä¸ä¼å½¢æé¾è¡¨ç¯ã
é¾è¡¨ç¯ç夿ï¼ä¸¤ä¸ªæéAåBï¼åæ¶æå头ç»ç¹ï¼ç¶åå¼å§å¾ªç¯éåï¼è®©Aæ¯æ¬¡ä¸ç§»ä¸ä¸ªèç¹ï¼è®©Bæ¯æ¬¡ä¸ç§»ä¸¤ä¸ªèç¹ï¼ç¶åæ¯è¾ä¸¤ä¸ªæéæçèç¹æ¯å¦ç¸åï¼ç¸ååæç¯ã
JDK8ä¸HashMapå¼å
¥äºçº¢é»æ ï¼èªå¹³è¡¡äºåæ ï¼ï¼æåäºæ¥è¯¢ï¼æå
¥åå é¤
**Q7.ConcurrentHashMapçåçï¼ï¼ç1.7å1.8çåºå«ï¼**
concurrenthashmapæ¢å¯ä»¥ä¿è¯å®å
¨ï¼åè½ä¿è¯æ§è½ãå
¶åçå°±æ¯ä¸ä¸ªäºçº§åå¸è¡¨ï¼ä¸ä¸ªæ»çåå¸è¡¨ä¸é¢æè¥å¹²ååå¸è¡¨ï¼ç±segementæ°ç»ç»æï¼ä½¿ç¨å段éï¼å¹¶è¡æå
¥æ¶æçé«ã
concurrenthashmapçputåçï¼
- å
为keyå¼åhashè¿ç®ï¼éè¿hashå¼å®ä½å°segement对象
- è·åå¯éå
¥éï¼å¯¹å段è¿è¡å é
- 忬¡è®¡ç®hashå¼ï¼å®ä½å°segemenéçå
·ä½ä½ç½®
- æå
¥æè
è¦çHashEntry对象
- éæ¾é
getåçï¼
- 为è¾å
¥çkeyåhashè¿ç®ï¼å¾å°hashå¼
- éè¿hashå¼ï¼å®ä½å°å¯¹åºçsegement对象
- 忬¡éè¿hashå¼ï¼å®ä½å°segementå½ä¸æ°ç»çå
·ä½ä½ç½®
JDK8ä¸ï¼concurrenthashmapæ¾å¼äºsegementåæ®µæºå¶ï¼å©ç¨Nodeæ°ç»+CAS+Synchronizedæ¥ä¿è¯å¹¶åæ´æ°å®å
¨ï¼åºå±ä¸ºæ°ç»+é¾è¡¨+çº¢é»æ ã
**Q8.说ä¸ä¸ HashSet çå®ç°åçï¼**
å®ç°äºSetæ¥å£ï¼ä½åºå±ç±HashMapæ¯æï¼ä¸å
å«éå¤å
ç´ ï¼ä¸ç»´æèªå·±çå
鍿åºï¼å¯ä½¿ç¨nullã
```java
iterator()è¿åsetå
ç´
public Iterator
1.ArrayListçå®ç°æ¯åºäºæ°ç»ï¼LinkedListçå®ç°æ¯åºäºååé¾è¡¨ã
2. 对äºéæºè®¿é®ï¼ArrayListä¼äºLinkedListï¼ä»¥O(1)æ¶é´å¤æåº¦å¯¹å
ç´ è¿è¡éæºè®¿é®ãLinkedListçæ¯ä¸ä¸ªå
ç´ é½ä¾é å°åæéåå®åä¸ä¸ªå
ç´ è¿æ¥å¨ä¸èµ·ï¼å¨è¿ç§æ
åµä¸ï¼æ¥æ¾æä¸ªå
ç´ çæ¶é´å¤æåº¦æ¯O(n)ã
3. å¯¹äºæå
¥åå 餿ä½ï¼LinkedListä¼äºArrayListãå½å
ç´ è¢«æ·»å å°LinkedListä»»æä½ç½®çæ¶åï¼ä¸éè¦åArrayList飿 ·éæ°è®¡ç®å¤§å°æè
æ¯æ´æ°ç´¢å¼ã
4. LinkedListæ¯ArrayListæ´å å
åï¼å 为LinkedListçèç¹é¤äºå卿°æ®ï¼è¿åå¨äºä¸¤ä¸ªå¼ç¨ï¼ä¸ä¸ªæååä¸ä¸ªå
ç´ ï¼ä¸ä¸ªæååä¸ä¸ªå
ç´ ã
**Q10.å¦ä½å®ç°æ°ç»å List ä¹é´ç转æ¢ï¼**
List转æ°ç»ï¼toArray(arraylist.size()æ¹æ³
```java
ArrayList
b. ArrayListæ¯ç»§æ¿èªListçå¯å¨ææ¹å大å°çæ°ç»ï¼åArray䏿 ·è¦æ±è¿ç»åé
ï¼å
é¨å°éäºä¸ä¸ªObjectæ°ç»ï¼è®¸å¤æ¹æ³ç´æ¥è°ç¨Arrayså®ç°ï¼
c. VectoråArrayListåè½åºæ¬ä¸è´ï¼ä½Vectoræ¯çº¿ç¨å®å
¨çã
æçç±é«å°ä½ä¾æ¬¡ä¸ºï¼ArrayãArrayListãVectorã
**Q12.å¨ Queue ä¸ add()åoffer()ãpoll()å remove()ãelement()åpeek()æä»ä¹åºå«ï¼**
1.queueçå¢å å
ç´ æ¹æ³addåofferçåºå«å¨äºï¼addæ¹æ³å¨éåæ»¡çæ
åµä¸å°éæ©æå¼å¸¸çæ¹æ³æ¥è¡¨ç¤ºéåå·²ç»æ»¡äºï¼èofferæ¹æ³éè¿è¿åfalse表示éåå·²ç»æ»¡äºï¼å¨æééåçæ
åµï¼ä½¿ç¨offeræ¹æ³ä¼äºaddæ¹æ³ï¼
2.removeæ¹æ³åpollæ¹æ³é½æ¯å é¤éåç头å
ç´ ï¼removeæ¹æ³å¨éå为空çæ
åµä¸å°æå¼å¸¸ï¼èpollæ¹æ³å°è¿ånullï¼
3.elementåpeekæ¹æ³é½æ¯è¿åéåç头å
ç´ ï¼ä½æ¯ä¸å é¤å¤´å
ç´ ï¼åºå«å¨ä¸elementæ¹æ³å¨éå为空çæ
åµä¸ï¼å°æå¼å¸¸ï¼èpeekæ¹æ³å°è¿ånull.
**Q13.åªäºéåç±»æ¯çº¿ç¨å®å
¨çï¼**
- vectorï¼å°±æ¯arraylistå¤äºä¸ªåæ¥åæºå¶ï¼çº¿ç¨å®å
¨ï¼ï¼æçè¾ä½ã
- statckï¼å æ ç±»ï¼å
è¿ååº
- hashtableï¼å°±æ¯hashmapå¤äºä¸ªçº¿ç¨å®å
¨
- enumerationï¼æä¸¾ï¼ç¸å½äºè¿ä»£å¨
**Q14.è¿ä»£å¨ Iterator æ¯ä»ä¹ï¼Iterator æä¹ä½¿ç¨ï¼æä»ä¹ç¹ç¹ï¼**
å¨Javaä¸ï¼æå¾å¤çæ°æ®å®¹å¨ï¼å¯¹äºè¿äºçæä½æå¾å¤çå
±æ§ãJavaéç¨äºè¿ä»£å¨æ¥ä¸ºåç§å®¹å¨æä¾äºå
Œ
±çæä½æ¥å£ãè¿æ ·ä½¿å¾å¯¹å®¹å¨çéåæä½ä¸å
¶å
·ä½çåºå±å®ç°ç¸é离ï¼è¾¾å°è§£è¦çææã
_**Iteratoréåéåå
ç´ æä»¥ä¸å 个ç¹ç¹:**_
- Iteratoréåéåå
ç´ çè¿ç¨ä¸ä¸å
许线ç¨å¯¹éåå
ç´ è¿è¡ä¿®æ¹ï¼å¦å伿åºConcurrentModificationEceptionçå¼å¸¸ã
- Iteratoréåéåå
ç´ çè¿ç¨ä¸å¯ä»¥éè¿removeæ¹æ³æ¥ç§»é¤éåä¸çå
ç´ ã
- Iteratorå¿
é¡»ä¾éæä¸ªCollection对象èåå¨ï¼Iteratoræ¬èº«ä¸å
·æè£
è½½æ°æ®å¯¹è±¡çåè½ã
- Iterator.removeæ¹æ³å é¤çæ¯ä¸ä¸æ¬¡Iterator.next()æ¹æ³è¿åç对象ã
- 强è°ä»¥ä¸nextï¼ï¼æ¹æ³ï¼è¯¥æ¹æ³éè¿æ¸¸æ æåçå½¢å¼è¿åIteratorä¸ä¸ä¸ªå
ç´ ã
**_itertoræ¥å£ä¸å¸¸ç¨çæ¹æ³ï¼_**
- booleanåçhasNext()ï¼å¦æä»æå
ç´ å¯ä»¥è¿ä»£è¿åtrue
- Eåçnext()ï¼è¿åè¿ä»£çä¸ä¸ä¸ªå
ç´
- voidåçremove()ï¼ä»è¿ä»£å¨æåçcollectionä¸ç§»é¤è¿ä»£å¨è¿åçæåä¸ä¸ªå
ç´ ã
- void forEachRemaining(Consumer action) ;使ç¨Lambdda表达å¼çå½¢å¼è¾åºIterator䏿以çå
ç´ ãæ³¨æè¯¥æ¹æ³å
¶å®æ¯é´æ¥è°ç¨next()æ¹æ³è¿è¡éåï¼æä»¥åæ¬¡æ¯nextï¼ï¼æ¹æ³çæ¶åIteratorä¸ç对象已ç»è¢«éåå®äºã
**Q15.Iterator å ListIterator æä»ä¹åºå«ï¼**
1. ListIteratoræadd()æ¹æ³ï¼å¯ä»¥åList䏿·»å 对象ï¼èIteratorä¸è½
2. ListIteratoråIterator齿hasNext()ånext()æ¹æ³ï¼å¯ä»¥å®ç°é¡ºåºååéåï¼ä½æ¯ListIteratoræhasPrevious()åprevious()æ¹æ³ï¼å¯ä»¥å®ç°éåï¼é¡ºåºååï¼éåãIteratorå°±ä¸å¯ä»¥ã
3. ListIteratorå¯ä»¥å®ä½å½åçç´¢å¼ä½ç½®ï¼nextIndex()åpreviousIndex()å¯ä»¥å®ç°ãIteratoræ²¡ææ¤åè½ã
4. é½å¯å®ç°å é¤å¯¹è±¡ï¼ä½æ¯ListIteratorå¯ä»¥å®ç°å¯¹è±¡çä¿®æ¹ï¼set()æ¹æ³å¯ä»¥å®ç°ãIieratorä»
è½éåï¼ä¸è½ä¿®æ¹ã
**Q16.æä¹ç¡®ä¿ä¸ä¸ªéåä¸è½è¢«ä¿®æ¹ï¼**
```java
Collections.unmodifiableList(List)
Collections.unmodifiableMap(Map)
Collections.unmodifiableSet(Set)
```
以ä¸è¿åçéåå¯¹è±¡é½æ¯ä¸å¯ä¿®æ¹çï¼è°ç¨ä¿®æ¹æ¹æ³ä¼æåºå¼å¸¸UnsupportedOperationExceptionï¼ä½¿ç¨è¿ç§æ¹æ³è¿åéåçä¸ä¸ªåªè¯»è§å¾ã
### Q&S线ç¨é¨å
**Q1.å¹¶è¡åå¹¶åæä»ä¹åºå«ï¼**
å设ä¸ä¸ªæä¸ä¸ªå¦çéè¦è¾
导ä½ä¸ï¼å¸®æ¯ä¸ªå¦çè¾
导å®ä½ä¸æ¯ä¸ä¸ªä»»å¡
- é¡ºåºæ§è¡ï¼èå¸ç²å
帮å¦çAè¾
导ï¼è¾
导å®ä¹åååç»Bè¾
å¯¼ï¼æååå»ç»Cè¾
å¯¼ï¼æçä½ä¸ ï¼å¾ä¹
æå®æä¸ä¸ªä»»å¡
- å¹¶åï¼èå¸ç²å
ç»å¦çAå»è®²æè·¯ï¼A嬿äºèªå·±ä¹¦åè¿ç¨å¹¶ä¸æ£æ¥ï¼èç²èå¸å¨è¿æé´ç´æ¥å»ç»B讲æè·¯ï¼è®²å®æè·¯åå»ç»C讲æè·¯ï¼è®©Bèªå·±æ´çæ¥éª¤ãè¿æ ·èå¸å°±æ²¡æç©ºçï¼ä¸ç´å¨åäºæ
ï¼å¾å¿«å°±å®æäºä¸ä¸ªä»»å¡ãä¸é¡ºåºæ§è¡ä¸åçæ¯ï¼é¡ºåºæ§è¡ï¼èå¸è®²å®æè·¯ä¹åå¦çå¨åæ¥éª¤ï¼è¿å¨è¿æé´ï¼è叿¯å®å
¨ç©ºççï¼æ²¡åäºçï¼æä»¥æçä½ä¸ã
- å¹¶è¡ï¼ç´æ¥è®©ä¸ä¸ªèå¸ç²ãä¹ãä¸ä¸ä¸ªèå¸âåæ¶âç»ä¸ä¸ªå¦çè¾
导ä½ä¸ï¼ä¹å®æçå¾å¿«ã
çè§£ï¼
1ï¼å¹¶è¡æ¯æä¸¤ä¸ªæè
å¤ä¸ªäºä»¶å¨**å䏿¶å»**åçï¼è并忝æä¸¤ä¸ªæå¤ä¸ªäºä»¶å¨å䏿¶é´é´éåçãä¹å°±æ¯è¯´å¹¶åï¼äº¤æ¿åä¸åäºæ
çè½åãå¹¶è¡ï¼åæ¶åä¸åäºæ
çè½åã
2ï¼å¹¶è¡æ¯å¨ä¸åå®ä½ä¸çå¤ä¸ªäºä»¶ï¼å¹¶åæ¯å¨åä¸å®ä½ä¸çå¤ä¸ªäºä»¶ã
**Q2.线ç¨åè¿ç¨çåºå«ï¼**
- è¿ç¨æ¯èµæºåé
çæå°åä½ï¼çº¿ç¨æ¯ç¨åºæ§è¡çæå°åä½ã
- è¿ç¨æèªå·±çç¬ç«å°å空é´ï¼æ¯å¯å¨ä¸ä¸ªè¿ç¨ï¼ç³»ç»å°±ä¼ä¸ºå®åé
å°å空é´ï¼å»ºç«æ°æ®è¡¨æ¥ç»´æ¤ä»£ç 段ãå æ æ®µåæ°æ®æ®µï¼è¿ç§æä½é常æè´µãèçº¿ç¨æ¯å
±äº«è¿ç¨ä¸çæ°æ®çï¼ä½¿ç¨ç¸åçå°å空é´ï¼å æ¤CPU忢ä¸ä¸ªçº¿ç¨çè±è´¹è¿æ¯è¿ç¨è¦å°å¾å¤ï¼åæ¶å建ä¸ä¸ªçº¿ç¨çå¼é乿¯è¿ç¨è¦å°å¾å¤ã
- 线ç¨ä¹é´çéä¿¡æ´æ¹ä¾¿ï¼åä¸è¿ç¨ä¸ç线ç¨å
±äº«å
¨å±åéãéæåéçæ°æ®ï¼èè¿ç¨ä¹é´çéä¿¡éè¦ä»¥éä¿¡çæ¹å¼ï¼IPC)è¿è¡ãä¸è¿å¦ä½å¤ç好忥ä¸äºæ¥æ¯ç¼åå¤çº¿ç¨ç¨åºçé¾ç¹ã
- 使¯å¤è¿ç¨ç¨åºæ´å¥å£®ï¼å¤çº¿ç¨ç¨åºåªè¦æä¸ä¸ªçº¿ç¨æ»æï¼æ´ä¸ªè¿ç¨ä¹æ»æäºï¼èä¸ä¸ªè¿ç¨æ»æå¹¶ä¸ä¼å¯¹å¦å¤ä¸ä¸ªè¿ç¨é æå½±åï¼å 为è¿ç¨æèªå·±ç¬ç«çå°å空é´ã
**Q3.宿¤çº¿ç¨æ¯ä»ä¹ï¼**
宿¤çº¿ç¨ï¼æ¯ä¸ªæå¡çº¿ç¨ï¼åç¡®å°æ¥è¯´å°±æ¯æå¡å
¶ä»ç线ç¨ãJavaé线ç¨å2ç§ï¼
1ã宿¤çº¿ç¨ï¼æ¯å¦åå¾åæ¶çº¿ç¨ï¼å°±æ¯æå
¸åç宿¤çº¿ç¨ã
2ãç¨æ·çº¿ç¨ï¼å°±æ¯åºç¨ç¨åºéçèªå®ä¹çº¿ç¨ã
妿å
¶ä»ç线ç¨ï¼å³ç¨æ·èªå®ä¹çº¿ç¨ï¼é½æ§è¡å®æ¯ï¼è¿main线ç¨ä¹æ§è¡å®æ¯ï¼é£ä¹jvmå°±ä¼éåºï¼å³åæ¢è¿è¡ï¼ââæ¤æ¶ï¼è¿jvmé½åæ¢è¿è¡äºï¼å®æ¤çº¿ç¨å½ç¶ä¹å°±åæ¢æ§è¡äºã
**Q4.åå»ºçº¿ç¨æåªå ç§æ¹å¼ï¼**
_å建线ç¨ç第ä¸ç§æ¹å¼ï¼_
- å建ä¸ä¸ªç±»ç»§æ¿Thread
- éåThreadä¸çrunæ¹æ³ ï¼åå»ºçº¿ç¨æ¯ä¸ºäºæ§è¡ä»»å¡ ä»»å¡ä»£ç å¿
é¡»æåå¨ä½ç½®ï¼runæ¹æ³å°±æ¯ä»»å¡ä»£ç çåå¨ä½ç½®ãï¼
- å建å类对象ï¼å
¶å®å°±æ¯å¨å建线ç¨
- å¯å¨çº¿ç¨startï¼ï¼
è¿ç§æ¹å¼çç¹ç¹ï¼ç¼ºé·ï¼ï¼çº¿ç¨ä»»å¡åçº¿ç¨æ¯ç»å®å¨ä¸èµ·çã
_å建线ç¨ç第äºç§æ¹å¼ï¼_
- å建å®ç°äºRunnableæ¥å£çåç±»
- éåRunnableæ¥å£ä¸çrunæ¹æ³
- å建å®ç°äºRunnableæ¥å£çåç±»ç对象
- å建Threadç±»ç对象ï¼ä¹å°±æ¯å¨å建线ç¨
- æå®ç°äºRunnableæ¥å£çå类对象ä½ä¸ºåæ°ä¼ éç»Threadç±»çæé æ¹æ³
è¿ç§æ¹å¼çç¹ç¹æ¯ï¼æçº¿ç¨ä»»å¡è¿è¡äºæè¿°ï¼ä¹å°±æ¯é¢å对象ï¼ä»èå®ç°äºçº¿ç¨ä»»å¡å线ç¨å¯¹è±¡çå离ãçº¿ç¨æ§è¡ä»ä¹ä»»å¡ä¸åéè¦ï¼åªè¦æ¯å®ç°äºRunnableæ¥å£çå类对象é½å¯ä»¥ä½ä¸ºåæ°ä¼ éç»Threadçæé æ¹æ³ï¼æ¤æ¹å¼è¾ä¸ºçµæ´»ã第äºç§æ¹å¼è¿æä¸ä¸ªå¥½å¤æ¯å®ç°æ¥å£äºï¼è¿ä¸å½±åç»§æ¿å
¶ä»ç¶ç±»ã
_使ç¨CallableåFutureå建线ç¨ï¼_
- å建Callableæ¥å£çå®ç°ç±»ï¼å¹¶å®ç°call()æ¹æ³ï¼ç¶åå建该å®ç°ç±»çå®ä¾ï¼ä»java8å¼å§å¯ä»¥ç´æ¥ä½¿ç¨Lambda表达å¼å建Callable对象ï¼ã
- 使ç¨FutureTaskç±»æ¥å
è£
Callable对象ï¼è¯¥FutureTask对象å°è£
äºCallable对象çcall()æ¹æ³çè¿åå¼
- 使ç¨FutureTask对象ä½ä¸ºThread对象çtargetå建并å¯å¨çº¿ç¨ï¼å 为FutureTaskå®ç°äºRunnableæ¥å£ï¼
- è°ç¨FutureTask对象çget()æ¹æ³æ¥è·å¾åçº¿ç¨æ§è¡ç»æåçè¿åå¼
**Q5.说ä¸ä¸ runnable å callable æä»ä¹åºå«ï¼**
ç¸åç¹ï¼
1. 两è
齿¯æ¥å£ï¼
2. 两è
é½å¯ç¨æ¥ç¼åå¤çº¿ç¨ç¨åºï¼
3. 两è
é½éè¦è°ç¨Thread.start()å¯å¨çº¿ç¨ï¼
ä¸åç¹ï¼
1. 两è
æå¤§çä¸åç¹æ¯ï¼å®ç°Callableæ¥å£çä»»å¡çº¿ç¨è½è¿åæ§è¡ç»æï¼èå®ç°Runnableæ¥å£çä»»å¡çº¿ç¨ä¸è½è¿åç»æï¼
2. Callableæ¥å£çcall()æ¹æ³å
许æåºå¼å¸¸ï¼èRunnableæ¥å£çrun()æ¹æ³çå¼å¸¸åªè½å¨å
鍿¶åï¼ä¸è½ç»§ç»ä¸æï¼
**Q6.çº¿ç¨æåªäºç¶æï¼**

**Q7.sleep() å wait() æä»ä¹åºå«ï¼**
1. åçä¸åãsleep()æ¹æ³æ¯Threadç±»çéææ¹æ³ï¼æ¯çº¿ç¨ç¨æ¥æ§å¶èªèº«æµç¨çï¼ä»ä¼ä½¿æ¤çº¿ç¨æåæ§è¡ä¸æ®µæ¶é´ï¼èææ§è¡æºä¼è®©ç»å
¶ä»çº¿ç¨ï¼çå°è®¡æ¶æ¶é´ä¸å°ï¼æ¤çº¿ç¨ä¼èªå¨èéãä¾å¦ï¼å½çº¿ç¨æ§è¡æ¥æ¶åè½æ¶ï¼æ¯ä¸ç§éæå°åºä¸ä¸ªæ¶é´ï¼é£ä¹æ¤æ¶å°±éè¦å¨æå°æ¹æ³åé¢å ä¸ä¸ªsleep()æ¹æ³ï¼ä»¥ä¾¿è®©èªå·±æ¯éä¸ç§æ§è¡ä¸æ¬¡ï¼è¯¥è¿ç¨å¦åé¹é䏿 ·ãèwait()æ¹æ³æ¯objectç±»çæ¹æ³ï¼ç¨äºçº¿ç¨é´éä¿¡ï¼è¿ä¸ªæ¹æ³ä¼ä½¿å½åæ¥æè¯¥å¯¹è±¡éçè¿ç¨çå¾
ï¼ç´å°å
¶ä»çº¿ç¨è°ç¨notifyï¼ï¼æ¹æ³æè
notifyAllï¼ï¼æ¶æéæ¥ï¼ä¸è¿å¼å人åä¹å¯ä»¥ç»ä»æå®ä¸ä¸ªæ¶é´ï¼èªå¨éæ¥ã
2. 对éç å¤çæºå¶ä¸åãç±äºsleep()æ¹æ³ç主è¦ä½ç¨æ¯è®©çº¿ç¨æåæ§è¡ä¸æ®µæ¶é´ï¼æ¶é´ä¸å°åèªå¨æ¢å¤ï¼ä¸æ¶å线ç¨é´çéä¿¡ï¼å æ¤ï¼è°ç¨sleep()æ¹æ³å¹¶ä¸ä¼éæ¾éãèwait()æ¹æ³åä¸åï¼å½è°ç¨wait()æ¹æ³åï¼çº¿ç¨ä¼éæ¾æä»æå ç¨çéï¼ä»èä½¿çº¿ç¨æå¨å¯¹è±¡ä¸çå
¶ä»synchronizedæ°æ®å¯ä»¥è¢«å
¶ä»çº¿ç¨ä½¿ç¨ã
3. 使ç¨åºåä¸åãwait()æ¹æ³å¿
é¡»æ¾å¨åæ¥æ§å¶æ¹æ³å忥代ç åä¸ä½¿ç¨ï¼sleep()æ¹æ³åå¯ä»¥æ¾å¨ä»»ä½å°æ¹ä½¿ç¨ãsleep()æ¹æ³å¿
é¡»æè·å¼å¸¸ï¼èwait()ãnotifyï¼ï¼ãnotifyAllï¼ï¼ä¸éè¦æè·å¼å¸¸ãå¨sleepçè¿ç¨ä¸ï¼æå¯è½è¢«å
¶ä»å¯¹è±¡è°ç¨ä»çinterruptï¼ï¼ï¼äº§çInterruptedExceptionãç±äºsleepä¸ä¼éæ¾éæ å¿ï¼å®¹æå¯¼è´æ»éé®é¢çåçï¼å æ¤ä¸è¬æ
åµä¸ï¼æ¨è使ç¨waitï¼ï¼æ¹æ³ã
**Q8.notify()å notifyAll()æä»ä¹åºå«ï¼**
å
说两个æ¦å¿µï¼éæ± åçå¾
æ±
- éæ± :å设线ç¨Aå·²ç»æ¥æäºæä¸ªå¯¹è±¡(注æ:䏿¯ç±»)çéï¼èå
¶å®ççº¿ç¨æ³è¦è°ç¨è¿ä¸ªå¯¹è±¡çæä¸ªsynchronizedæ¹æ³(æè
synchronizedå)ï¼ç±äºè¿äºçº¿ç¨å¨è¿å
¥å¯¹è±¡çsynchronizedæ¹æ³ä¹åå¿
é¡»å
è·å¾è¯¥å¯¹è±¡çéçæ¥ææï¼ä½æ¯è¯¥å¯¹è±¡çéç®åæ£è¢«çº¿ç¨Aæ¥æï¼æä»¥è¿äºçº¿ç¨å°±è¿å
¥äºè¯¥å¯¹è±¡çéæ± ä¸ã
- çå¾
æ± :å设ä¸ä¸ªçº¿ç¨Aè°ç¨äºæä¸ªå¯¹è±¡çwait()æ¹æ³ï¼çº¿ç¨Aå°±ä¼éæ¾è¯¥å¯¹è±¡çéåï¼è¿å
¥å°äºè¯¥å¯¹è±¡ççå¾
æ± ä¸
ç¶ååæ¥è¯´notifyånotifyAllçåºå«
- å¦æçº¿ç¨è°ç¨äºå¯¹è±¡ç wait()æ¹æ³ï¼é£ä¹çº¿ç¨ä¾¿ä¼å¤äºè¯¥å¯¹è±¡ççå¾
æ± ä¸ï¼çå¾
æ± ä¸ç线ç¨ä¸ä¼å»ç«äºè¯¥å¯¹è±¡çéã
- å½æçº¿ç¨è°ç¨äºå¯¹è±¡ç notifyAll()æ¹æ³ï¼å¤éææ wait 线ç¨ï¼æ notify()æ¹æ³ï¼åªéæºå¤éä¸ä¸ª wait 线ç¨ï¼ï¼è¢«å¤éçç线ç¨ä¾¿ä¼è¿å
¥è¯¥å¯¹è±¡çéæ± ä¸ï¼éæ± ä¸ç线ç¨ä¼å»ç«äºè¯¥å¯¹è±¡éãä¹å°±æ¯è¯´ï¼è°ç¨äºnotifyååªè¦ä¸ä¸ªçº¿ç¨ä¼ç±çå¾
æ± è¿å
¥éæ± ï¼ènotifyAllä¼å°è¯¥å¯¹è±¡çå¾
æ± å
çææçº¿ç¨ç§»å¨å°éæ± ä¸ï¼çå¾
éç«äºã
- ä¼å
级é«ç线ç¨ç«äºå°å¯¹è±¡éçæ¦ç大ï¼åè¥æçº¿ç¨æ²¡æç«äºå°è¯¥å¯¹è±¡éï¼å®è¿ä¼çå¨éæ± ä¸ï¼å¯æçº¿ç¨å次è°ç¨ wait()æ¹æ³ï¼å®æä¼éæ°åå°çå¾
æ± ä¸ãèç«äºå°å¯¹è±¡éç线ç¨åç»§ç»å¾ä¸æ§è¡ï¼ç´å°æ§è¡å®äº synchronized 代ç åï¼å®ä¼éæ¾æè¯¥å¯¹è±¡éï¼è¿æ¶éæ± ä¸ç线ç¨ä¼ç»§ç»ç«äºè¯¥å¯¹è±¡éã
**Q9.线ç¨ç run()å start()æä»ä¹åºå«ï¼**
æ¯ä¸ªçº¿ç¨é½æè¦æ§è¡çä»»å¡ã线ç¨çä»»å¡å¤çé»è¾å¯ä»¥å¨Treadç±»çrunå®ä¾æ¹æ³ä¸ç´æ¥å®ç°æéè¿è¯¥æ¹æ³è¿è¡è°ç¨ï¼å æ¤run()ç¸å½äºçº¿ç¨çä»»å¡å¤çé»è¾çå
¥å£æ¹æ³ï¼å®ç±Javaèææºå¨è¿è¡ç¸åºçº¿ç¨æ¶ç´æ¥è°ç¨ï¼è䏿¯ç±åºç¨ä»£ç è¿è¡è°ç¨ã
èstart()çä½ç¨æ¯å¯å¨ç¸åºç线ç¨ãå¯å¨ä¸ä¸ªçº¿ç¨å®é
æ¯è¯·æ±Javaèææºè¿è¡ç¸åºç线ç¨ï¼èè¿ä¸ªçº¿ç¨ä½æ¶è½å¤è¿è¡æ¯ç±çº¿ç¨è°åº¦å¨å³å®çãstart()è°ç¨ç»æå¹¶ä¸è¡¨ç¤ºç¸åºçº¿ç¨å·²ç»å¼å§è¿è¡ï¼è¿ä¸ªçº¿ç¨å¯è½ç¨åè¿è¡ï¼ä¹å¯è½æ°¸è¿ä¹ä¸ä¼è¿è¡ã
**Q10.åå»ºçº¿ç¨æ± æåªå ç§æ¹å¼ï¼**
**_newSingleThreadExecutor_**
å建ä¸ä¸ªå线ç¨ççº¿ç¨æ± ãè¿ä¸ªçº¿ç¨æ± åªæä¸ä¸ªçº¿ç¨å¨å·¥ä½ï¼ä¹å°±æ¯ç¸å½äºå线ç¨ä¸²è¡æ§è¡ææä»»å¡ã妿è¿ä¸ªå¯ä¸ç线ç¨å 为å¼å¸¸ç»æï¼é£ä¹ä¼æä¸ä¸ªæ°ççº¿ç¨æ¥æ¿ä»£å®ãæ¤çº¿ç¨æ± ä¿è¯ææä»»å¡çæ§è¡é¡ºåºæç
§ä»»å¡çæäº¤é¡ºåºæ§è¡ã
**_newFixedThreadPool_**
å建åºå®å¤§å°ççº¿ç¨æ± ãæ¯æ¬¡æäº¤ä¸ä¸ªä»»å¡å°±å建ä¸ä¸ªçº¿ç¨ï¼ç´å°çº¿ç¨è¾¾å°çº¿ç¨æ± çæå¤§å¤§å°ãçº¿ç¨æ± ç大å°ä¸æ¦è¾¾å°æå¤§å¼å°±ä¼ä¿æä¸åï¼å¦ææä¸ªçº¿ç¨å 为æ§è¡å¼å¸¸èç»æï¼é£ä¹çº¿ç¨æ± ä¼è¡¥å
ä¸ä¸ªæ°çº¿ç¨ã
**_newCachedThreadPool_**
å建ä¸ä¸ªå¯ç¼åççº¿ç¨æ± ãå¦æçº¿ç¨æ± ç大å°è¶
è¿äºå¤ç任塿éè¦ç线ç¨ï¼
é£ä¹å°±ä¼åæ¶é¨å空é²ï¼60ç§ä¸æ§è¡ä»»å¡ï¼ç线ç¨ï¼å½ä»»å¡æ°å¢å æ¶ï¼æ¤çº¿ç¨æ± åå¯ä»¥æºè½çæ·»å æ°çº¿ç¨æ¥å¤çä»»å¡ãæ¤çº¿ç¨æ± ä¸ä¼å¯¹çº¿ç¨æ± 大å°åéå¶ï¼çº¿ç¨æ± 大å°å®å
¨ä¾èµäºæä½ç³»ç»ï¼æè
说JVMï¼è½å¤å建çæå¤§çº¿ç¨å¤§å°ã
**_newScheduledThreadPool_**
å建ä¸ä¸ªå¤§å°æ éççº¿ç¨æ± ãæ¤çº¿ç¨æ± æ¯æå®æ¶ä»¥åå¨ææ§æ§è¡ä»»å¡çéæ±ã
**Q11.çº¿ç¨æ± 齿åªäºç¶æï¼**

1ãRUNNING
(1) ç¶æè¯´æï¼çº¿ç¨æ± å¤å¨RUNNINGç¶ææ¶ï¼è½å¤æ¥æ¶æ°ä»»å¡ï¼ä»¥å对已添å çä»»å¡(å µå¡éåä¸çä»»å¡)è¿è¡å¤çã
(02) ç¶æåæ¢ï¼çº¿ç¨æ± çåå§åç¶ææ¯RUNNINGãæ¢å¥è¯è¯´ï¼çº¿ç¨æ± è¢«ä¸æ¦è¢«å建ï¼å°±å¤äºRUNNINGç¶æï¼å¹¶ä¸çº¿ç¨æ± ä¸ç任塿°ä¸º0ï¼
2ã SHUTDOWN
(1) ç¶æè¯´æï¼çº¿ç¨æ± å¤å¨SHUTDOWNç¶ææ¶ï¼ä¸æ¥æ¶æ°ä»»å¡ï¼ä½è½å¤ç已添å çä»»å¡ã
(2) ç¶æåæ¢ï¼è°ç¨çº¿ç¨æ± çshutdown()æ¥å£æ¶ï¼çº¿ç¨æ± ç±RUNNING -> SHUTDOWNã
3ãSTOP
(1) ç¶æè¯´æï¼çº¿ç¨æ± å¤å¨STOPç¶ææ¶ï¼ä¸æ¥æ¶æ°ä»»å¡ï¼ä¸å¤ç已添å çä»»å¡ï¼å¹¶ä¸ä¼ä¸ææ£å¨å¤ççä»»å¡ã
(2) ç¶æåæ¢ï¼è°ç¨çº¿ç¨æ± çshutdownNow()æ¥å£æ¶ï¼çº¿ç¨æ± ç±(RUNNING or SHUTDOWN ) -> STOPã
4ãTIDYING
(1) ç¶æè¯´æï¼å½ææçä»»å¡å·²ç»æ¢ï¼ctl(ææçº¿ç¨æ°)è®°å½çâ任塿°éâ为0ï¼çº¿ç¨æ± ä¼å为TIDYINGç¶æãå½çº¿ç¨æ± å为TIDYINGç¶ææ¶ï¼ä¼æ§è¡é©å彿°terminated()ãterminated()å¨ThreadPoolExecutorç±»ä¸æ¯ç©ºçï¼è¥ç¨æ·æ³å¨çº¿ç¨æ± å为TIDYINGæ¶ï¼è¿è¡ç¸åºçå¤çï¼å¯ä»¥éè¿éè½½terminated()彿°æ¥å®ç°ã
(2) ç¶æåæ¢ï¼å½çº¿ç¨æ± å¨SHUTDOWNç¶æä¸ï¼é»å¡éå为空并ä¸çº¿ç¨æ± 䏿§è¡çä»»å¡ä¹ä¸ºç©ºæ¶ï¼å°±ä¼ç± SHUTDOWN -> TIDYINGã
å½çº¿ç¨æ± å¨STOPç¶æä¸ï¼çº¿ç¨æ± 䏿§è¡çä»»å¡ä¸ºç©ºæ¶ï¼å°±ä¼ç±STOP -> TIDYINGã
5ã TERMINATED
(1) ç¶æè¯´æï¼çº¿ç¨æ± å½»åºç»æ¢ï¼å°±åæTERMINATEDç¶æã
(2) ç¶æåæ¢ï¼çº¿ç¨æ± å¤å¨TIDYINGç¶ææ¶ï¼æ§è¡å®terminated()ä¹åï¼å°±ä¼ç± TIDYING -> TERMINATEDã
**Q12.çº¿ç¨æ± ä¸ submit()å execute()æ¹æ³æä»ä¹åºå«ï¼**
çº¿ç¨æ± ä¸çexecuteæ¹æ³å¼å¯çº¿ç¨æ§è¡æ± ä¸çä»»å¡ãè¿æä¸ä¸ªæ¹æ³submitä¹å¯ä»¥åå°ï¼å®çåè½æ¯æäº¤æå®çä»»å¡å»æ§è¡å¹¶ä¸è¿åFuture对象ï¼å³æ§è¡çç»æã
两è
çä¸ä¸ªåºå«ï¼
1ãæ¥æ¶çåæ°ä¸ä¸æ ·
2ãsubmitæè¿åå¼ï¼èexecute没æç¨å°è¿åå¼çãæ¯å¦è¯´ææå¾å¤ä¸ªåvalidationçtaskï¼æå¸æææçtaskæ§è¡å®ï¼ç¶åæ¯ä¸ªtaskåè¯æå®çæ§è¡ç»æï¼æ¯æåè¿æ¯å¤±è´¥ï¼å¦ææ¯å¤±è´¥ï¼åå æ¯ä»ä¹ãç¶åæå°±å¯ä»¥æææå¤±è´¥çåå 综åèµ·æ¥åç»è°ç¨è
ã
3ãsubmitæ¹ä¾¿Exceptionå¤ç
ææå°±æ¯taské伿åºcheckedæè
unchecked exceptionï¼å¸æå¤é¢çè°ç¨è
è½å¤æç¥è¿äºexceptionå¹¶ååºåæ¶çå¤çï¼é£ä¹å°±éè¦ç¨å°submitï¼éè¿æè·Future.getæåºçå¼å¸¸ã
**Q13.å¨ Java ç¨åºä¸æä¹ä¿è¯å¤çº¿ç¨çè¿è¡å®å
¨ï¼**
线ç¨å®å
¨å¨ä¸ä¸ªæ¹é¢ä½ç°
1. ååæ§ï¼æä¾äºæ¥è®¿é®ï¼å䏿¶å»åªè½æä¸ä¸ªçº¿ç¨å¯¹æ°æ®è¿è¡æä½ï¼ï¼atomic,synchronizedï¼ï¼
2. å¯è§æ§ï¼ä¸ä¸ªçº¿ç¨å¯¹ä¸»å
åçä¿®æ¹å¯ä»¥åæ¶å°è¢«å
¶ä»çº¿ç¨çå°ï¼ï¼synchronized,volatileï¼ï¼
3. æåºæ§ï¼ä¸ä¸ªçº¿ç¨è§å¯å
¶ä»çº¿ç¨ä¸çæä»¤æ§è¡é¡ºåºï¼ç±äºæä»¤éæåºï¼è¯¥è§å¯ç»æä¸è¬æä¹±æ åºï¼ï¼happens-beforeååï¼ã
_ååæ§---atomic_
* JDKé颿ä¾äºå¾å¤atomicç±»ï¼AtomicInteger,AtomicLong,AtomicBooleanççã
* å®ä»¬æ¯éè¿CAS宿ååæ§ã
_ååæ§---synchronized_
synchronizedæ¯ä¸ç§åæ¥éï¼éè¿éå®ç°ååæä½ãJDKæä¾éå两ç§ï¼ä¸ç§æ¯synchronizedï¼ä¾èµJVMå®ç°éï¼å æ¤å¨è¿ä¸ªå
³é®åä½ç¨å¯¹è±¡çä½ç¨èå´å
æ¯å䏿¶å»åªè½æä¸ä¸ªçº¿ç¨è¿è¡æä½ï¼å¦ä¸ç§æ¯LOCKï¼æ¯JDKæä¾ç代ç å±é¢çéï¼ä¾èµCPUæä»¤ï¼ä»£è¡¨æ§çæ¯ReentrantLockã
synchronized修饰ç对象æåç§ï¼
ï¼1ï¼ä¿®é¥°ä»£ç åï¼ä½ç¨äºè°ç¨ç对象ï¼
ï¼2ï¼ä¿®é¥°æ¹æ³ï¼ä½ç¨äºè°ç¨ç对象ï¼
ï¼3ï¼ä¿®é¥°éææ¹æ³ï¼ä½ç¨äºææå¯¹è±¡ï¼
ï¼4ï¼ä¿®é¥°ç±»ï¼ä½ç¨äºææå¯¹è±¡ã
_å¯è§æ§---volatile_
对äºå¯è§æ§ï¼JVMæä¾äºsynchronizedåvolatileãè¿éæä»¬çvolatileã
1ï¼volatileçå¯è§æ§æ¯éè¿å
åå±éåç¦æ¢éæåºå®ç°çãvolatileä¼å¨åæä½æ¶ï¼ä¼å¨åæä½åå 䏿¡storeå±éæä»¤ï¼å°æ¬å°å
åä¸çå
±äº«åéå¼å·æ°å°ä¸»å
åï¼volatileå¨è¿è¡è¯»æä½æ¶ï¼ä¼å¨è¯»æä½åå 䏿¡loadæä»¤ï¼ä»å
åä¸è¯»åå
±äº«åéï¼ä½æ¯volatile䏿¯ååæ§çï¼è¿è¡++æä½ä¸æ¯å®å
¨çã
**_volatileéç¨çåºæ¯ï¼_**
æ¢ç¶volatileä¸éç¨äºè®¡æ°ï¼é£ä¹volatileéç¨äºåªäºåºæ¯å¢ï¼
1. 对åéçåæä½ä¸ä¾èµäºå½åå¼
2. 该åéæ²¡æå
å«å¨å
·æå
¶ä»åéä¸åçå¼åä¸æåºæ§
_æåºæ§_
æ¯æï¼å¨JMMä¸ï¼å
许ç¼è¯å¨åå¤çå¨å¯¹æä»¤è¿è¡éæåºï¼ä½æ¯éæåºè¿ç¨ä¸ä¼å½±åå°å线ç¨ç¨åºçæ§è¡ï¼å´ä¼å½±åå°å¤çº¿ç¨å¹¶åæ§è¡çæ£ç¡®æ§ãå¯ä»¥éè¿volatileãsynchronizedãlockä¿è¯æåºæ§ãå¦å¤ï¼JMMå
·æå
天çæåºæ§ï¼å³ä¸éè¦éè¿ä»»ä½ææ®µå°±å¯ä»¥å¾å°ä¿è¯çæåºæ§ãè¿ç§°ä¸ºhappens-beforeååãå¦æä¸¤ä¸ªæä½çæ§è¡æ¬¡åºæ æ³ä»happens-beforeååæ¨å¯¼åºæ¥ï¼é£ä¹å®ä»¬å°±ä¸è½ä¿è¯å®ä»¬çæåºæ§ãèææºå¯ä»¥éæå°å¯¹å®ä»¬è¿è¡éæåºã
happens-beforeååï¼
1.ç¨åºæ¬¡åºè§åï¼å¨ä¸ä¸ªåç¬ç线ç¨ä¸ï¼æç
§ç¨åºä»£ç 书åçé¡ºåºæ§è¡ã
2.éå®è§åï¼ä¸ä¸ªunlockæä½happenâbeforeåé¢å¯¹åä¸ä¸ªéçlockæä½ã
3.volatileåéè§åï¼å¯¹ä¸ä¸ªvolatileåéçåæä½happenâbeforeåé¢å¯¹è¯¥åéç读æä½ã
4.线ç¨å¯å¨è§åï¼Thread对象çstart()æ¹æ³happenâbeforeæ¤çº¿ç¨çæ¯ä¸ä¸ªå¨ä½ã
5.线ç¨ç»æ¢è§åï¼çº¿ç¨çæææä½é½happenâbefore对æ¤çº¿ç¨çç»æ¢æ£æµï¼å¯ä»¥éè¿Thread.join()æ¹æ³ç»æãThread.isAlive()çè¿åå¼çææ®µæ£æµå°çº¿ç¨å·²ç»ç»æ¢æ§è¡ã
6.线ç¨ä¸æè§åï¼å¯¹çº¿ç¨interrupt()æ¹æ³çè°ç¨happenâbeforeåçäºè¢«ä¸æçº¿ç¨çä»£ç æ£æµå°ä¸ææ¶äºä»¶çåçã
7.对象ç»ç»è§åï¼ä¸ä¸ªå¯¹è±¡çåå§åå®æï¼æé 彿°æ§è¡ç»æï¼happenâbeforeå®çfinalize()æ¹æ³çå¼å§ã
8.ä¼ éæ§ï¼å¦ææä½A happenâbeforeæä½Bï¼æä½B happenâbeforeæä½Cï¼é£ä¹å¯ä»¥å¾åºA happenâbeforeæä½Cã
**Q14.å¤çº¿ç¨éçå级åçæ¯ä»ä¹ï¼**
å
说说为ä»ä¹ä¼æéå级
å 为Sycronizedæ¯éé级éï¼ä¹æ¯æ²è§éï¼ï¼æ¯æ¬¡å¨è¦è¿è¡éç请æ±çæ¶åï¼å¦æå½åèµæºè¢«å
¶ä»çº¿ç¨å æè¦å°å½åç线ç¨é»å¡å å
¥å°é»å¡éåï¼ç¶åæ¸
空å½å线ç¨çç¼åï¼çå°ééæ¾çæ¶ååéè¿notifyæè
notifyAllå¤éå½åç线ç¨ï¼å¹¶è®©å
¶å¤äºå°±ç»ªç¶æãè¿æ ·çº¿ç¨çæ¥å忢æ¯é常æ¶èç³»ç»èµæºçï¼èä¸æçæ¶åï¼çº¿ç¨åæèµ·èµæºå°±éæ¾äºãèJavaççº¿ç¨æ¯æ å°å°æä½ç³»ç»çåç线ç¨ä¹ä¸çæ¯æ¬¡çº¿ç¨çé»å¡æè
å¤éé½è¦ç»è¿ç¨æ·æå°æ ¸å¿ææè
æ ¸å¿æå°ç¨æ·æç转åï¼è¿æ ·æ¯ååæµªè´¹èµæºçï¼è¿æ ·å°±ä¼é ææ§è½ä¸çéä½ï¼å æ¤JVM对Sychronizedè¿è¡äºä¼åï¼å°Sycronizedå为ä¸ç§éç级å«ï¼ååéï¼è½»é级éï¼éé级éã
å¾å¤çæ¶åï¼å¯¹äºä¸ä¸ªå¯è½åçå¹¶å访é®ç对象èè¨ï¼å
¶å®å¾å°ä¼è¢«ç«äºï¼å°±ç®æäºèµæºåå¨ç«äºä¹æ¯å¨å¾å°ç䏿®µæ¶é´èµæºå°±ä¼è¢«éæ¾ï¼èè¿æ ·çæ
åµä¸å°çº¿ç¨æèµ·æ¯ååæµªè´¹æ§è½çã
ååéï¼ä¹è§éï¼ï¼
å½éå¯¹è±¡ç¬¬ä¸æ¬¡è¢«çº¿ç¨è·åçæ¶åï¼èææºä¼å°é对象ç对象头ä¸çéæ å¿ä½è®¾ç½®æä¸º01ï¼å¹¶å°ååéæ å¿è®¾ç½®ä¸º1ï¼çº¿ç¨éè¿CASçæ¹å¼å°èªå·±çID弿¾ç½®å°å¯¹è±¡å¤´ä¸ï¼å 为å¨è¿ä¸ªè¿ç¨ä¸æå¯è½ä¼æå
¶ä»çº¿ç¨æ¥ç«äºéï¼æä»¥è¦éè¿CASçæ¹å¼ï¼ä¸æ¦æç«äºå°±ä¼å级为轻é级éäºï¼ï¼å¦ææå线ç¨å°±è·å¾äºè¯¥è½»é级éãè¿æ ·æ¯æ¬¡åè¿å
¥è¯¥éå¯¹è±¡çæ¶åä¸ç¨è¿è¡ä»»ä½ç忥æä½ï¼ç´æ¥æ¯è¾å½åé对象ç对象头æ¯ä¸æ¯è¯¥çº¿ç¨çIDï¼å¦ææ¯å°±å¯ä»¥ç´æ¥è¿å
¥ã
ååéå级为轻é级é
åå鿝ä¸ç§æ ç«äºéï¼ä¸æ¦åºç°äºç«äºå¤§å¤æ°æ
åµä¸å°±ä¼å级为轻é级éãç°å¨æä»¬å设æçº¿ç¨1ææååéï¼çº¿ç¨2æ¥ç«äºååéä¼ç»å以ä¸å 个è¿ç¨ï¼
1. é¦å
线ç¨2ä¼å
æ£æ¥ååéæ è®°ï¼å¦ææ¯1ï¼è¯´æå½åæ¯ååéï¼é£ä¹JVM伿¾å°çº¿ç¨1ï¼ç线ç¨1æ¯å¦è¿åæ´»ç2
2. å¦æçº¿ç¨1å·²ç»æ§è¡å®æ¯ï¼å°±æ¯è¯´çº¿ç¨1ä¸åå¨äºï¼çº¿ç¨1èªå·±æ¯ä¸ä¼å»éæ¾ååéçï¼ï¼é£ä¹å
å°ååé置为0ï¼å¯¹è±¡å¤´è®¾ç½®æä¸ºæ éçç¶æï¼ç¨CASçæ¹å¼å°è¯å°çº¿ç¨2çIDæ¾å
¥å¯¹è±¡å¤´ä¸ï¼ä¸è¿è¡éå级ï¼è¿æ¯ååé
3. å¦æçº¿ç¨1è¿æ´»çï¼å
æå线ç¨1ï¼å°éæ å¿ä½åæ00ï¼è½»é级éï¼ç¶åå¨çº¿ç¨1çæ å¸§ä¸å¼è¾åºä¸å空é´ï¼Display Mark Wordï¼å°å¯¹è±¡å¤´çMark Wordç½®æ¢å°çº¿ç¨ä¸çæ 帧å½ä¸ï¼èå¯¹è±¡å¤´ä¸æ¤æ¶åå¨çæ¯æåå½åçº¿ç¨æ 帧çæéãæ¤æ¶å°±åæäºè½»é级éãç»§ç»æ§è¡çº¿ç¨1ï¼ç¶å线ç¨2éç¨CASçæ¹å¼å°è¯è·åéã
è½»é级éä¸ååéæå¤§çä¸åä¹å¤
è½»é级éåååéçä¸åä¹å¤å°±å¨äºè½»é级é对äºè·åé对象éç¨CASç忥æ¹å¼èååéç´æ¥æ¯ææ´ä¸ªåæ¥è¿ç¨ç»åæ¶ã
è½»é级é(ä¹è§é)
è½»é级éå¦ä½å建å¨ä¸é¢å·²ç»è®²è¿äºï¼æ¥ä¸æ¥è¯´è¯´è½»é级éå¦ä½è·åé对象ï¼è½»éçº§éæ¯éè¿CASä¹å°±æ¯èªæçæ¹å¼å°è¯è·åé对象ï¼ä¸æ¦å¤±è´¥ä¼å
æ£æ¥ï¼å¯¹è±¡å¤´ä¸åå¨çæ¯å¦æ¯æåå½åçº¿ç¨æ 帧çæéï¼å¦ææ¯ï¼å°±å¯ä»¥è·å对象ï¼å¦æä¸æ¯è¯´æåå¨ç«äºé£ä¹å°±è¦è¨è为éé级éãè½»é级éçè§£é乿¯éè¿CASçæ¹å¼å°è¯å°å¯¹è±¡å¤´çMark Wordå线ç¨ä¸çDisplay Mark Wordæ¿æ¢åæ¥ï¼å¦ææåï¼å°±éæ¾éï¼å¦æå¤±è´¥è¯´æè¿æè®¸å¤å
¶ä»çå¾
éç线ç¨ï¼è¯´ææ¤æ¶å·²ç»ä¸æ¯è½»é级éèæ¯éé级éäºï¼ï¼ä¼å°è¿äºçº¿ç¨å¤éï¼ç¶åéæ¾éã
è½»é级éè¨è为éé级é
䏿¦æä¸¤æ¡ä»¥ä¸ç线ç¨ç«äºéï¼è½»é级éè¨è为éé级éï¼éçç¶æåæ10ï¼æ¤æ¶å¯¹è±¡å¤´ä¸åå¨çå°±æ¯æåéé级éçæ å¸§çæéãèä¸å
¶ä»çå¾
éç线ç¨è¦è¿å
¥é»å¡ç¶æï¼çå¾
éé级ééæ¾åæ¥è¢«å¤éç¶åå»ç«äºã
**Q15.ä»ä¹æ¯æ»éï¼æä¹é²æ¢æ»éï¼**
çº¿ç¨æ»éæ¯æç±äºä¸¤ä¸ªæè
å¤ä¸ªçº¿ç¨äºç¸ææå¯¹æ¹æéè¦çèµæºï¼å¯¼è´è¿äºçº¿ç¨å¤äºçå¾
ç¶æï¼æ æ³å徿§è¡ãå½çº¿ç¨è¿å
¥å¯¹è±¡çsynchronized代ç åæ¶ï¼ä¾¿å æäºèµæºï¼ç´å°å®éåºè¯¥ä»£ç åæè
è°ç¨waitæ¹æ³ï¼æéæ¾èµæºï¼å¨æ¤æé´ï¼å
¶ä»çº¿ç¨å°ä¸è½è¿å
¥è¯¥ä»£ç åãå½çº¿ç¨äºç¸ææå¯¹æ¹æéè¦çèµæºæ¶ï¼ä¼äºç¸çå¾
对æ¹éæ¾èµæºï¼å¦æçº¿ç¨é½ä¸ä¸»å¨éæ¾æå æçèµæºï¼å°äº§çæ»éã
**_å½ç¶æ»éçäº§çæ¯å¿
é¡»è¦æ»¡è¶³ä¸äºç¹å®æ¡ä»¶çï¼_**
1. äºæ¥æ¡ä»¶ï¼è¿ç¨å¯¹äºæåé
å°çèµæºå
·ææå®æ§ï¼å³ä¸ä¸ªèµæºåªè½è¢«ä¸ä¸ªè¿ç¨å ç¨ï¼ç´å°è¢«è¯¥è¿ç¨éæ¾
2. 请æ±åä¿ææ¡ä»¶ï¼ä¸ä¸ªè¿ç¨å 请æ±è¢«å ç¨èµæºèåçé»å¡æ¶ï¼å¯¹å·²è·å¾çèµæºä¿æä¸æ¾ã
3. ä¸å¥å¤ºæ¡ä»¶ï¼ä»»ä½ä¸ä¸ªèµæºå¨æ²¡è¢«è¯¥è¿ç¨éæ¾ä¹åï¼ä»»ä½å
¶ä»è¿ç¨é½æ æ³å¯¹ä»å¥å¤ºå ç¨
4. 循ç¯çå¾
æ¡ä»¶ï¼å½åçæ»éæ¶ï¼æçå¾
çè¿ç¨å¿
å®ä¼å½¢æä¸ä¸ªç¯è·¯ï¼ç±»ä¼¼äºæ»å¾ªç¯ï¼ï¼é ææ°¸ä¹
é»å¡ã
**_é¿å
æ»é_**
* å é顺åºï¼å½å¤ä¸ªçº¿ç¨éè¦ç¸åçä¸äºéï¼ä½æ¯æç
§ä¸åç顺åºå éï¼æ»éå°±å¾å®¹æåçã妿è½ç¡®ä¿ææç线ç¨é½æ¯æç
§ç¸åç顺åºè·å¾éï¼é£ä¹æ»éå°±ä¸ä¼åçãæç
§é¡ºåºå 鿝ä¸ç§ææçæ»éé¢é²æºå¶ã使¯ï¼è¿ç§æ¹å¼éè¦ä½ äºå
ç¥éææå¯è½ä¼ç¨å°çéï¼å¹¶å¯¹è¿äºéåéå½çæåºï¼ä½æ»æäºæ¶åæ¯æ æ³é¢ç¥çã
* å éæ¶éï¼å¦å¤ä¸ä¸ªå¯ä»¥é¿å
æ»éçæ¹æ³æ¯å¨å°è¯è·åéçæ¶åå ä¸ä¸ªè¶
æ¶æ¶é´ï¼è¿ä¹å°±æå³çå¨å°è¯è·åéçè¿ç¨ä¸è¥è¶
è¿äºè¿ä¸ªæ¶é该线ç¨åæ¾å¼å¯¹è¯¥é请æ±ãè¥ä¸ä¸ªçº¿ç¨æ²¡æå¨ç»å®çæ¶éå
æåè·å¾ææéè¦çéï¼åä¼è¿è¡åéå¹¶éæ¾ææå·²ç»è·å¾çéï¼ç¶åçå¾
䏿®µéæºçæ¶é´åéè¯ãè¿æ®µéæºççå¾
æ¶é´è®©å
¶å®çº¿ç¨ææºä¼å°è¯è·åç¸åçè¿äºéï¼å¹¶ä¸è®©è¯¥åºç¨å¨æ²¡æè·å¾éçæ¶åå¯ä»¥ç»§ç»è¿è¡ãå éè¶
æ¶åå¯ä»¥å
ç»§ç»è¿è¡å¹²ç¹å
¶å®äºæ
ï¼åå头æ¥éå¤ä¹åå éçé»è¾ã
* æ»éæ£æµï¼æ¯ä¸ä¸ªæ´å¥½çæ»éé¢é²æºå¶ï¼å®ä¸»è¦æ¯é对é£äºä¸å¯è½å®ç°æåºå éå¹¶ä¸éè¶
æ¶ä¹ä¸å¯è¡çåºæ¯ãæ¯å½ä¸ä¸ªçº¿ç¨è·å¾äºéï¼ä¼å¨çº¿ç¨åéç¸å
³çæ°æ®ç»æä¸ï¼mapãgraphççï¼å°å
¶è®°ä¸ã餿¤ä¹å¤ï¼æ¯å½æçº¿ç¨è¯·æ±éï¼ä¹éè¦è®°å½å¨è¿ä¸ªæ°æ®ç»æä¸ãå½ä¸ä¸ªçº¿ç¨è¯·æ±é失败æ¶ï¼è¿ä¸ªçº¿ç¨å¯ä»¥éåéçå
³ç³»å¾ççæ¯å¦ææ»éåçã
**Q16.synchronized å volatile çåºå«æ¯ä»ä¹ï¼**
䏿¦ä¸ä¸ªå
±äº«åéï¼ç±»çæååéãç±»çéææååéï¼è¢«volatile修饰ä¹åï¼é£ä¹å°±å
·å¤äºä¸¤å±è¯ä¹ï¼ä¿è¯äºä¸å线ç¨å¯¹è¿ä¸ªåéè¿è¡æä½æ¶çå¯è§æ§ï¼å³ä¸ä¸ªçº¿ç¨ä¿®æ¹äºæä¸ªåéçå¼ï¼è¿æ°å¼å¯¹å
¶ä»çº¿ç¨æ¥è¯´æ¯ç«å³å¯è§çï¼ç¦æ¢è¿è¡æä»¤éæåºã
volatileæ¬è´¨æ¯å¨åè¯jvmå½ååéå¨å¯åå¨ï¼å·¥ä½å
åï¼ä¸ç弿¯ä¸ç¡®å®çï¼éè¦ä»ä¸»åä¸è¯»åï¼synchronized忝éå®å½ååéï¼åªæå½å线ç¨å¯ä»¥è®¿é®è¯¥åéï¼å
¶ä»çº¿ç¨è¢«é»å¡ä½ã
1.volatileä»
è½ä½¿ç¨å¨åé级å«ï¼synchronizedåå¯ä»¥ä½¿ç¨å¨åéãæ¹æ³ãå类级å«çã
2.volatileä»
è½å®ç°åéçä¿®æ¹å¯è§æ§ï¼å¹¶ä¸è½ä¿è¯ååæ§ï¼synchronizedåå¯ä»¥ä¿è¯åéçä¿®æ¹å¯è§æ§åååæ§ã
3.volatileä¸ä¼é æçº¿ç¨çé»å¡ï¼synchronizedå¯è½ä¼é æçº¿ç¨çé»å¡ã
4.volatileæ è®°çåéä¸ä¼è¢«ç¼è¯å¨ä¼åï¼synchronizedæ è®°çåéå¯ä»¥è¢«ç¼è¯å¨ä¼åã
**Q17.synchronized å Lock æä»ä¹åºå«ï¼**
1.é¦å
synchronizedæ¯javaå
ç½®å
³é®åï¼å¨jvmå±é¢ï¼Lockæ¯ä¸ªjavaç±»ï¼
2.synchronizedæ æ³å¤ææ¯å¦è·åéçç¶æï¼Lockå¯ä»¥å¤ææ¯å¦è·åå°éï¼
3.synchronizedä¼èªå¨éæ¾é(aÂ çº¿ç¨æ§è¡å®åæ¥ä»£ç ä¼éæ¾é ï¼b çº¿ç¨æ§è¡è¿ç¨ä¸åçå¼å¸¸ä¼éæ¾é)ï¼Lockéå¨finally䏿工鿾éï¼unlock()æ¹æ³éæ¾éï¼ï¼å¦å容æé æçº¿ç¨æ»éï¼
4.ç¨synchronizedå
³é®åç两个线ç¨1å线ç¨2ï¼å¦æå½å线ç¨1è·å¾éï¼çº¿ç¨2线ç¨çå¾
ãå¦æçº¿ç¨1é»å¡ï¼çº¿ç¨2åä¼ä¸ç´çå¾
ä¸å»ï¼èLockéå°±ä¸ä¸å®ä¼çå¾
ä¸å»ï¼å¦æå°è¯è·åä¸å°éï¼çº¿ç¨å¯ä»¥ä¸ç¨ä¸ç´çå¾
å°±ç»æäºï¼
5.synchronizedçéå¯éå
¥ãä¸å¯ä¸æãéå
¬å¹³ï¼èLockéå¯éå
¥ãå¯å¤æãå¯å
¬å¹³ï¼ä¸¤è
çå¯ï¼
6.Lockééå大é忥ç代ç ç忥é®é¢ï¼synchronizedééå代ç å°éç忥é®é¢ã
**Q18.忥å弿¥æä½å¼åï¼å¨ä»ä¹æ
åµä¸åå«ä½¿ç¨ä»ä»¬ï¼ä¸¾ä¾è¯´æã**
å¦ææ°æ®å°å¨çº¿ç¨é´å
±äº«ãä¾å¦æ£å¨åçæ°æ®ä»¥åå¯è½è¢«å¦ä¸ä¸ªçº¿ç¨è¯»å°ï¼æè
æ£å¨è¯»çæ° æ®å¯è½å·²ç»è¢«å¦ä¸ä¸ªçº¿ç¨åè¿äºï¼é£ä¹è¿äºæ°æ®å°±æ¯å
±äº«æ°æ®ï¼å¿
é¡»è¿è¡åæ¥ååãå½åºç¨ç¨åºå¨å¯¹è±¡ä¸è°ç¨äºä¸ä¸ªéè¦è±è´¹å¾é¿æ¶é´æ¥æ§è¡çæ¹æ³ï¼å¹¶ä¸ä¸å¸æè®©ç¨åºçå¾
æ¹ æ³çè¿åæ¶ï¼å°±åºè¯¥ä½¿ç¨å¼æ¥ç¼ç¨ï¼å¨å¾å¤æ
åµä¸éç¨å¼æ¥éå¾å¾å¾æ´ææçã
### Q&Såå°é¨å
**Q1.ä»ä¹æ¯åå°ï¼**
Javaåå°æºå¶æ¯å¨è¿è¡ç¶æä¸ï¼å¯¹äºä»»æä¸ä¸ªç±»ï¼é½è½å¤ç¥éè¿ä¸ªç±»çææå±æ§åæ¹æ³ï¼å¯¹äºä»»æä¸ä¸ªå¯¹è±¡ï¼é½è½å¤è°ç¨å®çä»»æä¸ä¸ªæ¹æ³å屿§ï¼è¿ç§å¨æè·åçä¿¡æ¯ä»¥å卿è°ç¨å¯¹è±¡çæ¹æ³çåè½ç§°ä¸ºjavaè¯è¨çåå°æºå¶ã
è¦æ³è§£åä¸ä¸ªç±»,å¿
é¡»å
è¦è·åå°è¯¥ç±»çåèç æä»¶å¯¹è±¡ãèè§£å使ç¨çå°±æ¯Classç±»ä¸çæ¹æ³.æä»¥å
è¦è·åå°æ¯ä¸ä¸ªåèç æä»¶å¯¹åºçClassç±»åç对象.
**Q2.ä»ä¹æ¯ java åºååï¼ä»ä¹æ
åµä¸éè¦åºååï¼è§£é Serializable æ¥å£çä½ç¨**
æä»¬ææ¶åå°ä¸ä¸ª java 对象åæåèæµçå½¢å¼ä¼ åºå»æè
ä»ä¸ä¸ªåèæµä¸æ¢å¤æä¸ä¸ª java 对象ï¼ä¾å¦ï¼è¦å° java 对象åå¨å°ç¡¬çæè
ä¼ éç»ç½ç»ä¸çå
¶ä»è®¡ç®æºï¼è¿ä¸ªè¿ç¨æä»¬å¯ä»¥èªå·±å代ç 廿ä¸ä¸ª java å¯¹è±¡åææä¸ªæ ¼å¼çåèæµåä¼ è¾ï¼ä½æ¯jre æ¬èº«å°±æä¾äºè¿ç§æ¯æï¼æä»¬å¯ä»¥è°ç¨ OutputStream ç writeObject æ¹æ³æ¥åï¼å¦æè¦è®© java 帮æä»¬åï¼è¦è¢«ä¼ è¾ç对象å¿
é¡»å®ç° serializable æ¥å£ï¼è¿æ ·ï¼javac ç¼è¯æ¶å°±ä¼è¿è¡ç¹æ®å¤çï¼ç¼è¯çç±»æå¯ä»¥è¢« writeObject æ¹æ³æä½ï¼è¿å°±æ¯æè°çåºååãéè¦è¢«åºååçç±»å¿
é¡»å®ç° Serializable æ¥å£ï¼è¯¥æ¥å£æ¯ä¸ä¸ª mini æ¥å£ï¼å
¶ä¸æ²¡æéè¦å®ç°çæ¹æ³ï¼ implementsSerializable åªæ¯ä¸ºäºæ 注该对象æ¯å¯è¢«åºååçã
**Q3.å¨æä»£çæ¯ä»ä¹ï¼æåªäºåºç¨ï¼æä¹å®ç°å¨æä»£çï¼**
卿代çï¼å½æ³è¦ç»å®ç°äºæä¸ªæ¥å£çç±»ä¸çæ¹æ³ï¼å ä¸äºé¢å¤çå¤çãæ¯å¦è¯´å æ¥å¿ï¼å äºå¡çãå¯ä»¥ç»è¿ä¸ªç±»å建ä¸ä¸ªä»£çï¼æ
åæè®®å°±æ¯å建ä¸ä¸ªæ°çç±»ï¼è¿ä¸ªç±»ä¸ä»
å
å«åæ¥ç±»æ¹æ³çåè½ï¼èä¸è¿å¨åæ¥çåºç¡ä¸æ·»å äºé¢å¤å¤ççæ°ç±»ãè¿ä¸ªä»£çç±»å¹¶ä¸æ¯å®ä¹å¥½çï¼æ¯å¨æçæçãå
·æè§£è¦æä¹ï¼çµæ´»ï¼æ©å±æ§å¼ºã
卿代çå®ç°ï¼é¦å
å¿
é¡»å®ä¹ä¸ä¸ªæ¥å£ï¼è¿è¦æä¸ä¸ªInvocationHandler(å°å®ç°æ¥å£çç±»çå¯¹è±¡ä¼ éç»å®)å¤çç±»ãåæä¸ä¸ªå·¥å
·ç±»Proxy(ä¹ æ¯æ§å°å
¶ç§°ä¸ºä»£çç±»ï¼å 为è°ç¨ä»çnewInstance()å¯ä»¥äº§ç代ç对象,å
¶å®ä»åªæ¯ä¸ä¸ªäº§ç代ç对象çå·¥å
·ç±»ï¼ãå©ç¨å°InvocationHandlerï¼æ¼æ¥ä»£çç±»æºç ï¼å°å
¶ç¼è¯çæä»£çç±»çäºè¿å¶ç ï¼å©ç¨å è½½å¨å è½½ï¼å¹¶å°å
¶å®ä¾å产ç代çå¯¹è±¡ï¼æåè¿åã
卿代ççåºç¨ï¼SpringçAOPï¼å äºå¡ï¼å æéï¼å æ¥å¿ã
### Q&Så¼å¸¸é¨å
**Q1.throw å throws çåºå«ï¼**
throwsæ¯ç¨æ¥å£°æä¸ä¸ªæ¹æ³å¯è½æåºçææå¼å¸¸ä¿¡æ¯ï¼å£°æä½æ¯ä¸å¤çï¼å°å¼å¸¸å¾ä¸ä¼ ï¼è°è°ç¨å°±äº¤ç»è°å¤çãä¾å¦ï¼å¦æä¸ä¸ªæ¹æ³éé¢ä¸æ³æä»»ä½çå¼å¸¸å¤çï¼å卿²¡æä»»ä½ä»£ç è¿è¡å¼å¸¸å¤ççæ¶åï¼å¿
须对è¿ä¸ªæ¹æ³è¿è¡å£°ææå¯è½äº§ççææå¼å¸¸ï¼å
¶å®å°±æ¯ï¼ä¸æ³èªå·±å¤çï¼é£å°±äº¤ç»å«äººå§ï¼åè¯å«äººæä¼åºç°ä»ä¹å¼å¸¸ï¼æ¥èªå·±çéï¼è®©å«äººå¤çå»å§ï¼ã
èthrow忝ææåºçä¸ä¸ªå
·ä½çå¼å¸¸ç±»åãå°±æ¯èªå·±è¿è¡å¼å¸¸å¤çï¼å¤ççæ¶åæä¸¤ç§æ¹å¼ï¼è¦ä¹èªå·±æè·å¼å¸¸ï¼ä¹å°±æ¯try catchè¿è¡ææï¼ï¼è¦ä¹å£°ææåºä¸ä¸ªå¼å¸¸ï¼å°±æ¯throws å¼å¸¸\~~ï¼ãthrow䏿¦è¿å
¥è¢«æ§è¡ï¼ç¨åºç«å³ä¼è½¬å
¥å¼å¸¸å¤çé¶æ®µï¼åé¢çè¯å¥å°±ä¸åæ§è¡ï¼è䏿å¨çæ¹æ³ä¸åè¿åææä¹çå¼ï¼
**Q2.finallyãfinalize æä»ä¹åºå«ï¼**
finallyä½ä¸ºå¼å¸¸å¤ççä¸é¨åï¼å®åªè½ç¨å¨try/catchè¯å¥ä¸ï¼å¹¶ä¸é带ä¸ä¸ªè¯å¥åï¼è¡¨ç¤ºè¿æ®µè¯å¥æç»ä¸å®ä¼è¢«æ§è¡ï¼ä¸ç®¡ææ²¡ææåºå¼å¸¸ï¼ï¼ç»å¸¸è¢«ç¨å¨éè¦éæ¾èµæºçæ
åµä¸ãï¼Ãï¼ï¼è¿å¥è¯å
¶å®åå¨ä¸å®çé®é¢ï¼
å¾å¤äººé½è®¤ä¸ºfinallyè¯å¥åä¸å®ä¼æ§è¡ï¼ä½ççæ¯è¿æ ·ä¹ï¼çæ¡æ¯å¦å®çãåªæä¸finally对åºçtryè¯å¥åå¾å°æ§è¡çæ
åµä¸ï¼finallyè¯å¥åæä¼æ§è¡ã使¯ï¼å¨æäºæ
åµä¸ï¼å³ä½¿tryè¯å¥æ§è¡äºï¼finallyè¯å¥ä¹ä¸ä¸å®æ§è¡ãå¨ try è¯å¥å䏿§è¡äº System.exit (0) è¯å¥ï¼ç»æ¢äº Java èææºçè¿è¡ãé£æäººè¯´äºï¼å¨ä¸è¬ç Java åºç¨ä¸åºæ¬ä¸æ¯ä¸ä¼è°ç¨è¿ä¸ª System.exit(0) æ¹æ³çãé£ä¹ä¸è°ç¨ System.exit(0) è¿ä¸ªæ¹æ³ï¼é£ä¹ finally è¯å¥åå°±ä¸å®ä¼æ§è¡åï¼çæ¡è¿æ¯å¦å®çãå½ä¸ä¸ªçº¿ç¨å¨æ§è¡ try è¯å¥åæè
catch è¯å¥åæ¶è¢«ææï¼interruptedï¼æè
è¢«ç»æ¢ï¼killedï¼ï¼ä¸å
¶ç¸å¯¹åºç finally è¯å¥åå¯è½ä¸ä¼æ§è¡ãè¿ææ´æç«¯çæ
åµï¼å°±æ¯å¨çº¿ç¨è¿è¡ try è¯å¥åæè
catch è¯å¥åæ¶ï¼çªç¶æ»æºæè
æçµï¼finally è¯å¥åè¯å®ä¸ä¼æ§è¡äºã
**Q3.try-catch-finally ä¸åªä¸ªé¨åå¯ä»¥çç¥ï¼**
try-catch
try-finally
try-catch-finally
catchåfinallyä¸è½åæ¶çç¥ã
**Q4.常è§çå¼å¸¸ç±»æåªäºï¼**

**Q5.è¿è¡æ¶å¼å¸¸ä¸ä¸è¬å¼å¸¸æä½å¼åï¼**
ä¸è¬å¼å¸¸è¡¨ç¤ºç¨åºè¿è¡è¿ç¨ä¸å¯è½åºç°çéæ£å¸¸ç¶æï¼è¿è¡æ¶å¼å¸¸è¡¨ç¤ºèææºçé常æä½ä¸å¯è½éå°çå¼å¸¸ï¼æ¯ä¸ç§å¸¸è§è¿è¡é误ã
Java ç¼è¯å¨è¦æ±æ¹æ³å¿
须声ææåºå¯è½åççéè¿è¡æ¶å¼å¸¸ï¼ä½æ¯å¹¶ä¸è¦æ±å¿
须声ææåºæªè¢«æè·çè¿è¡æ¶å¼å¸¸ã
**Q6.error å exception æä»ä¹åºå«?**
Java 对å¼å¸¸è¿è¡äºåç±»ï¼ä¸åç±»åçå¼å¸¸åå«ç¨ä¸åç Java ç±»è¡¨ç¤ºï¼ææå¼å¸¸çæ ¹ç±»ä¸º java.lang.Throwableï¼Throwable ä¸é¢åæ´¾çäºä¸¤ä¸ªåç±»ï¼Error å Exceptionã
Error 表示åºç¨ç¨åºæ¬èº«æ æ³å
æåæ¢å¤çä¸ç§ä¸¥éé®é¢ã
Exception 表示ç¨åºè¿è½å¤å
æåæ¢å¤çé®é¢ï¼å
¶ä¸åå为系ç»å¼å¸¸åæ®éå¼å¸¸ï¼ç³»ç»å¼å¸¸æ¯è½¯ä»¶æ¬èº«ç¼ºé·æå¯¼è´çé®é¢ï¼ä¹å°±æ¯è½¯ä»¶å¼å人åèèä¸å¨æå¯¼è´çé®é¢ï¼è½¯ä»¶ä½¿ç¨è
æ æ³å
æåæ¢å¤è¿ç§é®é¢ï¼ä½å¨è¿ç§é®é¢ä¸è¿å¯ä»¥è®©è½¯ä»¶ç³»ç»ç»§ç»è¿è¡æè
è®©è½¯ä»¶æ»æï¼ä¾å¦ï¼æ°ç»èæ¬è¶çï¼ArrayIndexOutOfBoundsExceptionï¼ï¼ç©ºæéå¼å¸¸ ï¼NullPointerExceptionï¼ã类转æ¢å¼å¸¸ï¼ClassCastExceptionï¼ï¼
æ®éå¼å¸¸æ¯è¿è¡ç¯å¢çååæå¼å¸¸æå¯¼è´çé®é¢ï¼æ¯ç¨æ·è½å¤å
æçé®é¢ï¼ä¾å¦ï¼ç½ç»æçº¿ï¼ç¡¬ç空é´ä¸å¤ï¼åçè¿ æ ·çå¼å¸¸åï¼ç¨åºä¸åºè¯¥æ»æã java 为系ç»å¼å¸¸åæ®éå¼å¸¸æä¾äºä¸åçè§£å³æ¹æ¡ï¼ç¼è¯å¨å¼ºå¶æ®éå¼å¸¸å¿
é¡» try..catch å¤ çæç¨ throws 声æç»§ç»æç»ä¸å±è°ç¨æ¹æ³å¤çï¼æä»¥æ®éå¼å¸¸ä¹ç§°ä¸º checked å¼å¸¸ï¼èç³» ç»å¼å¸¸å¯ä»¥å¤çä¹å¯ä»¥ä¸å¤çï¼æä»¥ï¼ç¼è¯å¨ä¸å¼ºå¶ç¨ try..catch å¤çæç¨ throws 声æï¼æä»¥ç³»ç»å¼å¸¸ä¹ç§°ä¸º unchecked å¼å¸¸ã
**Q6.请ååºä½ æå¸¸è§å°ç 3个 runtime exceptionã**
NullPointerExceptionãArrayIndexOutOfBoundsExceptionã ClassCastExceptionã
### Q&S对象æ·è´é¨å
**Q1.为ä»ä¹è¦ä½¿ç¨å
éï¼**
æ³å¯¹ä¸ä¸ªå¯¹è±¡è¿è¡å¤çï¼åæ³ä¿çåæçæ°æ®è¿è¡æ¥ä¸æ¥çæä½ï¼å°±éè¦å
éäºã彿们newä¸ä¸ªå¯¹è±¡ä¹åæ¯è¦å¯¹è¯¥å¯¹è±¡è¿è¡åå§åçï¼ä¸ç¶è¿ä¸ªå¯¹è±¡æ¯ç©ºç没æå
容ãè使ç¨å
éï¼åä¼å¾å°ä¸ä¸ªå对象以åå对象éé¢å
å«çå
容ãä¾å¦ï¼ä½ æä¸ä¸ªUser对象ï¼éé¢çå
å«äºç¸å
³ç屿§ãæ¤æ¶ä½ æ³è¦ä¿®æ¹éé¢çæä¸å±æ§ï¼ä½å䏿³ç ´åå对象éé¢çæ°æ®ï¼æ¤æ¶å°±å¯ä»¥å
éUserè¿ä¸ªå¯¹è±¡ï¼ç¶åå¨å
éçè¿ä¸ªUser对象ä¸è¿è¡ä¿®æ¹æä½ã餿¤ï¼å¦æä½ 卿ä½å®ä¹å夿ä¸ä¸å±æ§æ¯å¦æ´æ¹æåï¼å使ç¨å
éç对象åå对象åä¸ä¸å¯¹æ¯å³å¯ã
**Q2.å¦ä½å®ç°å¯¹è±¡å
éï¼**
æµ
å
éå°±æ¯æå对象ä¸çä¸äºå±æ§å¼å
éè¿æ¥ã使ç¨cloneï¼ï¼æ¹æ³è¿è¡æµ
å
éã使³¨æï¼å¿
é¡»è¦å¨è¢«å
éç±»ä¸å®ç°Cloneableæ¥å£ï¼å¹¶éåcloneæ¹æ³ãè¥ä¸æ²¡æå®ç°è¯¥æ¥å£ï¼å伿åºCloneNotSupportedExceptionå¼å¸¸ï¼æµ
å
éåªæ¯å
éå对象ä¸çå¼ç¨ç±»åæåï¼å¹¶éå
éäºå对象ä¸çå
¨é¨æ°æ®ã
æ·±å
éåæµ
å
éçåºå«å¨äºï¼æµ
å
éåªå
éäºå对象çå¼ç¨ç±»åçæåãæ·±å
é忝å
éäºåå¯¹è±¡çææãä¹å°±æ¯è¯´åä¸é¢æ¡ä¾æç¤ºï¼å¦æä½¿ä¸¤ä¸ªå¯¹è±¡ä¹é´äºä¸å½±åï¼åä½¿ç¨æ·±å
éãæ·±å
éç使ç¨ï¼å¨å¼ç¨ç±»åæå¨ç类使å
¶å®ç°Cloneableæ¥å£ï¼å¹¶ä½¿ç¨public修饰符éåCloneï¼ï¼æ¹æ³ã
**Q3.æ·±æ·è´åæµ
æ·è´åºå«æ¯ä»ä¹ï¼**
å
éåæµ
å
éåæ·±å
éï¼æµ
å
éåç对象ä¸éåºæ¬å¯¹è±¡åå对象æååä¸åå
åï¼å æ¤å¯¹è¿äºéåºæ¬å¯¹è±¡çä¿®æ¹ä¼åæ¶æ´æ¹å
éååçå¯¹è±¡ãæ·±å
éå¯ä»¥å®ç°å®å
¨çå
éï¼å¯ä»¥ç¨åå°çæ¹å¼æåºååçæ¹å¼å®ç°ã