怕说不清楚,给一个例子。
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)
{
}
}

解决方案 »

  1.   

    这也许是种规定的格式吧。 怕inner class修改外部类的数据, 书上也没说。
      

  2.   

    thinking  is the philosophy
      

  3.   

    You must understand it in your own way.
      

  4.   

    我想了一下,也是初学,不知道说的对不对,大家讨论一下:
    假设一下如果inner class的parameter 不声明为final ,那么就是说inner class里的参数是动态分配内存空间的,如果JAVA的垃圾回收机制在OUTER CLASS里面如果不用那个参数的话,垃圾回收就会调用析构这个空间,结果内部类可能就调用不到这个参数的正确地址,如果FINAL就分配固定地址了.总不能每调用一个参数就抛出一个异常在内部类里吧,如果内部类好多的话...不知道说的沾不沾边,呵呵,不要笑我
      

  5.   

    nintha(素一):
          昨天晚上我也想了很长时间。跟你想的差不多,把演示代码贴出来。看我的注释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类型的变量是不是常驻内存的(在程序的生命期内)?? }
    }
      

  6.   

    我也是这么想的,如果S不声明为final的话声明为final的编译期分配内存地址
      

  7.   

    声明为final的编译期分配内存地址
    也就是说在程序的生命期内,这个变量(指reference)所占的内存不会释放??
      

  8.   

    是不是类似于 C语言中的static类型的变量??