我需要在一个内部类中使用外部类中定义的一个对象 那么我必须把这个对象定义成final 我想问下 我把这个对象定义成final后 是不是里面所有的成员变量都成了final形式  谢谢。。

解决方案 »

  1.   

    对象定义成final其实并不确切,其实是某个对象的引用被定义为final,这样定义之后其实通过对象引用仍然可以对对象进行操作,对象的成员变量也不会发生任何的影响,唯一的就是这个定义为final的引用不能再指向其他对象
      

  2.   

    不会成为final类型,只是声明的引用,指向不可改变
      

  3.   


    恩,对于基本数据,final将数据定义成常量,而对于对象来说,只是引用被定义成了final,表示引用始终指向那个对象。final是指指向不可变,但是指向的对象我们可以改变它eg:String final str="a";
           str="b";
    System.out.println(str);
    答案:b
    补充点儿,final类不能被继承,没有子类,final类中的方法默认是final的
    final方法不能被子类覆盖,但可以继承 
    final变量只能一次赋值,不可更改 
    final不能修饰构造函数
    static final 
       对于变量,表示一旦给值就不可修改,并且通过类名可以访问。 
       对于方法,表示不可覆盖,并且可以通过类名直接访问。 
       对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可 以改变容器变量本身,但可以修改容器中存放的对象 
    详细见http://wenku.baidu.com/view/f98a589851e79b89680226fb.html
      

  4.   

    final可把基本变量变成常量,一次赋值不可更改。对于final对象只是指针不可更改,就是不能再次New对象,对象内属性不是final类型,可正常使用。
      

  5.   

    http://wenku.baidu.com/view/f98a589851e79b89680226fb.html
      

  6.   

    这是谁说的?
    外部类中的定义的对象,就是成员变量啊,怎么可能需要 final 才能使用?直接用就好了啊貌似是内部类使用类外部的局部变量的时候,才需要 final 修饰吧
    这种需求多数出现在:方法体中的匿名内部类调用该方法体的局部变量时
      

  7.   

    定义常量的时候会用到啊
    public static final CONSTANT_V = "wa haha";
      

  8.   


    错了吧final修饰变量的时候是常量应该是: final String str="a"; 吧
      

  9.   

    没有必要.final只是当前引用不能变
      

  10.   

    谢谢提醒确实是这样的我需要引用的对象是在外部类中的构造方法中new的 而我使用的匿名内部类也是在这个构造方法中定义的。。
      

  11.   

    使用全局变量不需要哦, 只是局部变量才用final ,另外, class Test{
             public  String name;
           }
           final Test t = new Test();
           引用t 是不能改变的,但是对象里的属性name 是可以改变的
      

  12.   

    final使用在属性,类,方法上,说明属性不可变,类不可被继承,方法不可被重写