ããåºç¡è¯æ³ï¼å¦æå®ä¹ä¸ä¸ªå¿åå
é¨ç±»ï¼å¹¶ä¸å¸æå®ä½¿ç¨ä¸ä¸ªå¨å
¶å¤é¨å®ç对象ï¼é£ä¹ç¼è¯å¨ä¼è¦æ±å
¶åæ°å¼ç¨æ¯finalçã
ãã1.å¿åå
é¨ç±»è¯å®æ¯å±é¨å
é¨ç±»(å¨ä¸ä¸ªæ¹æ³éé¢å®ä¹çå
é¨ç±»)ï¼å 为å¨javaä¸ï¼è¯å¥å¿
é¡»åå¨æ¹æ³éï¼èå¿åå
é¨ç±»å
¶å®å°±æ¯ä¸æ¡ç¹æ®çè¯å¥;
ãã2.å¤é¨ç»å®ç对象就æ¯ææå¤æ¥ç对象ï¼å¤é¨æ¹æ³çå½¢åãå±é¨åéãåºæ¬ç±»åæèªå®ä¹ç±»åçã
ãã3.å
é¨ç±»å¾å¾®å¦ï¼å®å¯ä»¥ç´æ¥è®¿é®å¤é¨ç±»çprivateãfieldï¼è¿æç ´äºç±»çå°è£
ãä½æ¯å
é¨ç±»åæå®èªèº«ç好å¤ï¼æ¯å¦ç®æ´ï¼å¯è§æ§çï¼äºæ¯å°±æå®å®ä½æâåªè¯»âï¼ä¹å°±æ¯finalãä¸è¿è¿ä¸ªä¿æ¤ä¹é常èå¼±!
ãã4.local inner class访é®local varæ¶ï¼é£ä¸ªvarå¿
é¡»æ¯finalçãå 为å¯ä»¥éè¿enclosing class访é®é£ä¸ªlocal varï¼ä¹å¯ä»¥éè¿inner class访é®ï¼å¯è½é æé®é¢ï¼æ以就å¿
é¡»æ¯finalç
ãã5.å¿åå
é¨ç±»ä¸ºä»ä¹åªè½ç¨final.æ¯åéçä½ç¨åçé®é¢ï¼å 为å¿åå
é¨ç±»æ¯åºç°å¨ä¸ä¸ªæ¹æ³çå
é¨çï¼å¦æå®è¦è®¿é®è¿ä¸ªæ¹æ³çåæ°æè
æ¹æ³ä¸å®ä¹çåéï¼åè¿äºåæ°ååéå¿
须被修饰为finalãå 为è½ç¶å¿åå
é¨ç±»å¨æ¹æ³çå
é¨ï¼ä½å®é
ç¼è¯çæ¶åï¼å
é¨ç±»ç¼è¯æOuter.Inner,è¿è¯´æå
é¨ç±»æå¤çä½ç½®åå¤é¨ç±»ä¸çæ¹æ³å¤å¨åä¸ä¸ªç级ä¸ï¼å¤é¨ç±»ä¸çæ¹æ³ä¸çåéæåæ°åªæ¯æ¹æ³çå±é¨åéï¼è¿äºåéæåæ°çä½ç¨ååªå¨è¿ä¸ªæ¹æ³å
é¨ææãå 为ç¼è¯çæ¶åå
é¨ç±»åæ¹æ³å¨åä¸çº§å«ä¸ï¼æ以æ¹æ³ä¸çåéæåæ°åªæ为finalï¼å
é¨ç±»æå¯ä»¥å¼ç¨ã
ãã6.ä¾å
ããpublic class LocalInnerClassTest{
ããpublic static void main(String[] args){
ããOuter obj=new Outer(); //çæä¸ä¸ªå¤é¨ç±»å¯¹è±¡
ãã//è°ç¨å¤é¨ç±»ä¸çouter()æ¹æ³ï¼è¿åä¸ä¸ªSuperInnerç±»å对象èµå¼ç»si
ããSuperInner si=obj.outer();
ããsi.m1(); //è°ç¨è¢«è¦ççæ¹æ³m1(),è¾åºï¼Inner's m1() 20
ãã}
ãã}
ãã/**
ãã*å®ä¹ä¸ä¸ªæ¥å£SuperInnerï¼å
é¨å®ä¹ä¸ä¸ªæ½è±¡æ¹æ³m1(),æ è¿åç±»å
ãã*/
ããinterface SuperInner{
ããpublic void m1();
ãã}
ãã/**
ãã*å®ä¹ä¸ä¸ªç±»Outerï¼å
é¨åªå®ä¹ä¸ä¸ªæ¹æ³outer()ï¼è¿åç±»å为SuperInner
ãã*/
ããclass Outer{
ããpublic SuperInner outer(){
ããint a=10; //æ¹æ³ä¸å®ä¹ä¸ä¸ªå±é¨åéaï¼å¹¶èµå¼ä¸º10
ããfinal int b=20; //åå®ä¹ä¸ä¸ªfinalå±é¨åébï¼åå§å为20
ãã//å¨outer()æ¹æ³ä¸å®ä¹ä¸ä¸ªå±é¨å
é¨ç±»Inner,å®ç°æ¥å£SuperInner
ããclass Inner implements SuperInner{
ããpublic void m1(){ //ç±»ä¸åªæä¸ä¸ªè¦çæ¥å£SuperInnerçæ¹æ³m1()
ããSystem.out.println("Inner's m1()"+a); //ç¼è¯æ¥é
ãã//ç¼è¯éè¿ï¼è¾åºï¼Inner's m1() 20
ããSystem.out.println("Inner's m1() "+b);
ãã}
ãã}
ããreturn new Inner();
ãã}
ãã}
ããæ们å
ä»ä¸»æ¹æ³å¼å§ç代ç çæ§è¡é¡ºåºï¼å
çæä¸ä¸ªOuter类对象objï¼objè°ç¨æ¬ç±»ä¸æ¹æ³outer();ç¨åºå¼å§è·³å°outer()æ¹æ³å
æ§è¡ç¨åºè¯å¥ï¼å
åçæå±é¨åéaåb,åå®ä¹ä¸ä¸ªå±é¨å
é¨ç±»Innerï¼è¿åä¸ä¸ªSuperInnerç±»åç对象ãå°è¿åçSuperInnerç±»å对象å°åä¼ ç»SuperInnerç±»å对象siãsiåè°ç¨m1()æ¹æ³ï¼å 为已ç»å¨å±é¨å
é¨ç±»ä¸è¦çäºæ¥å£ä¸çm1()æ¹æ³ï¼æ以å°è°ç¨å±é¨å
é¨ç±»ä¸çm1() æ¹æ³ï¼ç¨åºè·³å°å±é¨å
é¨ç±»ä¸m1()æ¹æ³å
æ§è¡ç¨åºè¯å¥ï¼å
è¾åºä¸æ®µå符串åaï¼ç»æç¼è¯æ¥éï¼å
å°è¿æ¡ç¨åºè¯å¥éèï¼æ§è¡ä¸é¢çè¯å¥ï¼ä½ ä¼åç°ç¼è¯éè¿èä¸è¾åºInner's m1() 20!
ãã为ä»ä¹ä¼è¿æ ·å¢?大家é½ç¥éå±é¨åéä»
ä»
å¨ä¸ä¸ªèå´å
ææï¼å¨æ¹æ³è°ç¨å®å°±è¢«å
åéæ¾ï¼å¨Outer类对象objè°ç¨outer()æ¹æ³æ¶ï¼aåbæ产çï¼è°ç¨ç»æå被å
åéæ¾ï¼é£ä¹bè¿ä¸ªå¼ä¹å°±ä¸å¤åå¨äºï¼ä¸ºä»ä¹è¿ä¼è¾åº20å¢?é¾éå±é¨åé被final修饰就ä¸ä¼è¢«å
åéæ¾èä¿ç?å
¶å®æé¨åæä½å¯¹äºç¨åºåæ¯éæçï¼é£æ¯JAVAè¯è¨å¼åè
çå°ææï¼å¨å®ä¹aåb æ¶JVM(JAVAèææº)åäºç¨åºåçä¸å°çæä½ï¼ä»å°bæ·è´äºä¸ä»½ç»å±é¨å
é¨ç±»ï¼ä¹å°±æ¯è¯´JVMå¨å±é¨å
é¨ç±»ä¸å®ä¹äºä¸ä¸ªfinal int b=20;è¿ä¸ªæä½ç¨åºåæ¯ä¸ç¥éç!å½è°ç¨m1()æ¹æ³æ¶è¾åºç20并ä¸æ¯åæ¥outer()æ¹æ³ä¸å®ä¹çbï¼èä»
ä»
æ¯JVMæ·è´çä¸ä¸ªå¯æ¬ãé£ä¹ä¸ºä»ä¹a没被æå°åºå¢?é£æ¯å 为JVM并没ææ·è´å®ï¼å 为没æfinal修饰ï¼è¯´æå®å¯ä»¥è¢«ä¿®æ¹ï¼å¦ææa æ¹ä¸º a++ï¼æ¤æ¶JVMå°±ä¸ç¥éæ·è´aè¿æ¯a++äºï¼æ以对äºæ final修饰çå±é¨åéJVMæ¯ä¸ä¼æ·è´ä¼ ç»å±é¨å
é¨ç±»çï¼èªç¶æ æ³æè¾åº!
温馨提示:答案为网友推荐,仅供参考