怕说不清楚,给一个例子。
import java.util.*;
class A
{
public D f()
{
String s="fafa";
class B
{
public void g()
{
//compile error: s must be final
System.out.println(s);
}
}
}
}
public class Test
{
public static void main(String [] args)
{
}
}
import java.util.*;
class A
{
public D f()
{
String s="fafa";
class B
{
public void g()
{
//compile error: s must be final
System.out.println(s);
}
}
}
}
public class Test
{
public static void main(String [] args)
{
}
}
假设一下如果inner class的parameter 不声明为final ,那么就是说inner class里的参数是动态分配内存空间的,如果JAVA的垃圾回收机制在OUTER CLASS里面如果不用那个参数的话,垃圾回收就会调用析构这个空间,结果内部类可能就调用不到这个参数的正确地址,如果FINAL就分配固定地址了.总不能每调用一个参数就抛出一个异常在内部类里吧,如果内部类好多的话...不知道说的沾不沾边,呵呵,不要笑我
昨天晚上我也想了很长时间。跟你想的差不多,把演示代码贴出来。看我的注释import java.util.*;
class D
{
public void g(){};
}
class A
{
public D f()
{
final String s="fafa";
class B extends D
{
public void g()
{
//error: s must be final
System.out.println(s);
}
}
return new B(); }
}
public class Test
{
public static void main(String [] args)
{
A a=new A();
D d=a.f();
d.g();//我想如果String s不是final的话,那么这里调用的时候,s说不定已经被回收了。
//可是还有一点:final类型的变量是不是常驻内存的(在程序的生命期内)?? }
}
也就是说在程序的生命期内,这个变量(指reference)所占的内存不会释放??