代码如下:
//定义一个类A
public class A(){}//定义一个类B,B中有个匿名内部类
public class B(){
     public A getA(){ 
           //定义一个变量X
           final int X = 1;
           return new A(){};
     };
}请问在定义变量X的时候为什么修饰符要是final的,在匿名内部类中并没有使用到变量X,请教高手。

解决方案 »

  1.   

    1.final代表常量; 指不可以修改的..
    2.没有使用到.. 这个问题需要问你自己... 比如. 你写一个String str="Hello!";你不使用. 我们能怎么样
      

  2.   


    我的意思是说定义的int x这个变量 既然在匿名内部类中没有用到 为什么它的修饰符只能是final,例如其他的public private都是不可以的
      

  3.   


    这个例子是我自己写的 但是我的在试验的时候发现int x的修饰符只能是final的 如public private等等都是不可以的,但是我想不明白原因。
      

  4.   

    按照楼主的说法我试了试!
    确实是不能将内部类中,属于方法的局部变量的修饰符定义为public、private或是private!
    但具体为什么要这么限制,还没弄明白!
    如果楼主明白了,请告知一下!
    继续关注
      

  5.   


    请注意下
      public A getA(){  
         //定义一个变量X
         final int X = 1;
         return new A(){};
      };
    在这个方法中return new A(){};这不是返回一个普通的对象,而是返回一个匿名内部类的对象.
      

  6.   

    这是java参数传递的产生的问题。
    如果一个内部类的方法访问一个在内部类外面定义的变量,那么这个变量在编译的时候就会作为一个参数传递给这个内部类,这时候你在内部类的一个方法中修改这个参数,我们亲眼看到代码中这个变量已经被改变了,但是,这个变量在内部类外部却是保持不变的,因为java的参数传递方式导致的。
    所以为了保持内部类外部和内部的唯一性,java在语法上规定了内部类访问外部参数的时候,需要修饰为final。
      

  7.   

    X是局部变量,不是成员变量当然不能用public protected private访问修饰符修饰,如果是成员变量是可以的
    X是不是final类型的无所谓,如果没需要 你可以不加new A(){}中要用到 那就必须是final的了
      

  8.   

    return new A(){};
    改为return new A();试一试public class B(){
      public A getA(){  
      //定义一个变量X
      final int X = 1;
      return new A(){};
      };                     // 1
    或者把上句后面的分号去掉,估计你以前学过C++
      

  9.   

    方法体里面肯定不能有private,public的属性的