film2000
CJSDN高级会员
发贴: 57
积分: 50
|
于 2003-04-18 18:43
anonymous inner class可以访问外部类的类变量,但不能访问外部函数的一般变量,除非该变量为final类型. public class Test { String classString = "classString"; public void testOne() { String methodString = "methodString"; final String methodStringFinal = "methodStringFinal"; System.out.println( new Object() { public String toString() { String s = classString;///OK! s += methodStringFinal; ///OK! s += methodString;//ERROR return s; } } } }
原因如下:当testOne方法退出时,methodString可以被当作垃圾回收掉,因而methodString的生命期结束,但是anonymouse inner class不会因为testOne方法退出而消亡,所以必须把外部临时变量定义为final类型,这样临时变量就不会放在stack,而放在专门的内存里.
我讲的不是很清楚,不知各位能否看懂!》
|