Thinking In Javaéé¢ç说æ³ï¼å¯ä¸æ£ç¡®ç说æ³ï¼ï¼ å¦æå®ä¹ä¸ä¸ªå¿åå
é¨ç±»ï¼å¹¶ä¸å¸æå®ä½¿ç¨ä¸ä¸ªå¨å
¶å¤é¨å®ç对象ï¼é£ä¹ç¼è¯å¨ä¼è¦æ±å
¶åæ°å¼ç¨æ¯final çã以ä¸æ¯åæè¿ç¨ï¼
é¦å
ç代ç
第5è¡c.shoutc(a.shout(5))ï¼å¨a.shout(5)å¾å°è¿åå¼åï¼açshout()æ¹æ³æ 被æ¸
空äºï¼å³argä¸åå¨äºï¼èc.shoutc()å´åè°ç¨äºa.shouta()å»æ§è¡System.out.println("Hello B" + arg)ã
åæ¥çJavaèææºæ¯æä¹å®ç°è¿ä¸ªè¯¡å¼ç访é®çï¼æ人认为è¿ç§è®¿é®ä¹æ以è½å®æï¼æ¯å 为argæ¯finalçï¼ç±äºåéççå½å¨æï¼äºå®æ¯è¿æ ·çåï¼æ¹æ³æ é½ä¸åå¨äºï¼åéå³ä½¿åå¨ï¼æä¹å¯è½è¿è¢«è®¿é®å°ï¼è¯æ³ä¸ï¼ä¸ä¸ªæ¹æ³è½è®¿é®å¦ä¸ä¸ªæ¹æ³çå®ä¹çfinalå±é¨åéå(ä¸éè¿è¿åå¼)ï¼
ç 究ä¸ä¸è¿ä¸ªè¯¡å¼ç访é®æ§è¡çåçï¼ç¨åå°æ¢æµä¸ä¸å±é¨å
é¨ç±» ãç¼è¯å¨ä¼æ¢æµå±é¨å
é¨ç±»ä¸æ¯å¦æç´æ¥ä½¿ç¨å¤é¨å®ä¹åéçæ
åµï¼å¦ææ访é®å°±ä¼å®ä¹ä¸ä¸ªåç±»åçåéï¼ç¶åå¨æé æ¹æ³ä¸ç¨å¤é¨åéç»èªå·±å®ä¹çåéèµå¼ï¼èåå±é¨å
é¨ç±»æ使ç¨çåéé½æ¯èªå·±å®ä¹çåéï¼æ以就å¯ä»¥è®¿é®äºãè§ä¸ï¼
A$1$Bç±»åç对象ä¼ä½¿ç¨èªå®ä¹çvar$argåéï¼èä¸æ¯shout()æ¹æ³ä¸çfinal int argåéï¼å½ç¶å°±å¯ä»¥è®¿é®äºã
é£ä¹ä¸ºä»ä¹å¤é¨åéè¦æ¯finalçå¢ï¼å³ä½¿å¤é¨åéä¸æ¯finalï¼ç¼è¯å¨ä¹å¯ä»¥å¦æ¤å¤çï¼èªå·±å®ä¹ä¸ä¸ªåç±»åçåéï¼ç¶åå¨æé æ¹æ³ä¸èµå¼å°±è¡äºãåå å°±æ¯ä¸ºäºè®©æ们è½å¤æºåé»è¾çç´æ¥ä½¿ç¨å¤é¨åéï¼èä¸çèµ·æ¥æ¯å¨å§ç»ä½¿ç¨ãå¤é¨çargåé(èä¸æ¯èµå¼ä»¥åçèªå·±çå段)ã
èèåºç°è¿ç§æ
åµï¼å¨å±é¨å
é¨ç±»ä¸ä½¿ç¨å¤é¨åéargï¼å¦æç¼è¯å¨å
许argä¸æ¯finalçï¼é£ä¹å°±å¯ä»¥å¯¹è¿ä¸ªåéä½åå¼æä½ï¼ä¾å¦arg++ï¼ï¼æ ¹æ®åé¢çåæï¼åå¼æä½æ¹åçæ¯var$argï¼èå¤é¨çåéarg并没æåï¼ä»ç¶æ¯5(var$argææ¯6)ãå æ¤ä¸ºäºé¿å
è¿æ ·å¦æ¤ä¸åé»è¾çäºæ
åçï¼ä½ ç¨äºå¤é¨åéï¼åæ¹åäºåéçå¼ï¼ä½é£ä¸ªåéå´æ²¡æååï¼èªç¶çarg就被强è¡è§å®å¿
é¡»æ¯finalæ修饰çï¼ä»¥ç¡®ä¿è®©ä¸¤ä¸ªå¼æ°¸è¿ä¸æ ·ï¼æææåç对象永è¿ä¸æ ·ï¼åè
å¯è½æ´éè¦)ã
è¿æä¸ç¹éè¦æ³¨æçæ¯å
é¨ç±»ä¸æ¹æ³ä¸æ¯åæ¶æ§è¡çï¼æ¯å¦å®ç°ActionListenerï¼åªæå½äºä»¶åççæ¶åæä¼æ§è¡ï¼èè¿æ¶æ¹æ³å·²ç»ç»æäºã
我是在一个内部类中引用外部那个类的变量,如果引用的不是final型变量就会报错
追答其实fanal定义的变量就是一个常量!写成final在内部类中用一定不会错!
你什么地方错了发下代码过来吧。
就是我写了个内部类,引用了外部内的变量,然后提示说只能引用final类型的变量,程序是没问题了,我想知道这是为什么!系统都说必须引用final类型的外部变量我知道肯定有其道理。
追答把代码复制过来看下就知道了,这样讲不是很清楚,不知道具体的问题