假设有两个类class A,class Personpublic class A
{
  Person p;
  A(final Person p)
  {
    this.p = p;
  }
}没有这个final怎么不行呢,final加在这里是什么意思

解决方案 »

  1.   

    莫非 构造方法是默认的,参数列表中的类型得是final
      

  2.   

    标明该参数类型必须被声明为final.不可改变的.
    不是说在构造处不可改变,而是指p指向的这个对象自一构造起就不可改变.只有符合这个要求的p,才可作为这个构造函数的参数
      

  3.   

    定义参数,要求必须是常量。就像C++中的const
      

  4.   

    没有fianl为啥不行??加上final,对象的定义权限变化了,不能被继承。编程"最终类"了
      

  5.   

    没有final不行,是因为类属性希望是一个常量,虽然直接用final修饰属性也能达到这样的目的保证属性不能在类内被修改,但是不能保证属性在类外不被修改,因为这个属性的实体在类外没有被final修饰。
    你说的不能被继承是final修饰的类,这里修饰的是构造函数的参数。
      

  6.   

    名字重复了。。Person p和Person P这让编译器怎么识别
      

  7.   

    被你"骗了",构造函数的参数列表非得是final吗?你Person 里面是怎么写的?
      

  8.   


    就是,没有final完全可以这么写
      

  9.   

    final 是不能变的 
    那样写 没见过
      

  10.   

    这样写的话,在构造方法中就不能给传进来的p重新赋值
    注意一下:final只能保证对象的引用不变,但不能保证其对象也不变
      

  11.   

    构造参数中加入final,用来保持传入的参数不会被改变
    编程习惯而已
    一般认为set动作的参数应该被声明成final以防止一些错误的访问,C里面用的比较多,JAVA很少这么写
    JAVA传值和C不太一样,一般不考虑这个问题的
      

  12.   

    忘了说了,我还添加了一个匿名事件,里面也用了一个Person p,这样没有final就会报错,不知为什么
      

  13.   

    构造参数中的final是用来修饰person类的,而final类是最终类不可被继承,所以传过去的要是person类的子类
      

  14.   

    楼主的意思应该是  方法中的内部类问题
    当内部类要访问方法中的局部变量 那么该变量必须为final型的
      

  15.   

    楼主的意思不是内部类,final变量的意思不是他引用的对象不可变,而是p不能在方法中在引用其他变量.
      

  16.   

    A(final Person p) 
      { 
        this.p = p; 
      } 
    将p的赋给this.p,p不可改变,1、不可改变值;2、不可改变该引用(改变指向其他);
      

  17.   

    对于上面的代码本身而言,final屁意义也没有