JAVA内部内的变量引用问题.
class Outer 
{
private int index = 100;
class Middle
{
private int index = 80;
class Inner
{
private int index = 60;
void print()
{
int index = 40;
System.out.println(index);
System.out.println(this.index);
System.out.println(Middle.this.index);
System.out.println(Outer.Middle.this.index);
System.out.println(Outer.this.index);

}
}
void print()
{
Inner inner = new Inner();
inner.print();
}
Inner getInner()
{
return new Inner();
}
}
void print()
{
Middle middle = new Middle();
middle.print();
}

Middle getMiddle()
{
return new Middle();
}
}
class test
{
public static void main(String[] args)
{
Outer outer = new Outer();
/*outer.print();*/
Outer.Middle.Inner i = outer.getMiddle().getInner();
i.print();
}
}----------------------------------------------------------
void print()
{
int index = 40;
System.out.println(index);
System.out.println(this.index);
System.out.println(Middle.this.index);
System.out.println(Outer.Middle.this.index);
System.out.println(Outer.this.index);

}这一段何解?

解决方案 »

  1.   

    index             -- print()方法里的indexthis.index        -- 当前最紧密的内部的index 也就是InnerMiddle.this.index -- Middle类的indexOuter.Middle.this.index -- 这种写法和上面效果一样。Outer.this.index  -- Outer类的index
      

  2.   

    主要是看前缀:可以一步步向里探询:如:Outer.Middle.Inner.this.index 就是表示Outer类里的Middle类里的Inner类里的this,然后就可以直接调用相关的字段了。
      

  3.   

    Middle.this.index -- Middle类的index Outer.Middle.this.index -- 这种写法和上面效果一样。 
    为什么是一样的?
      

  4.   


    因为本身都是在Outer类中调用,要不要都无所谓了,只在能唯一区分就行。像这种写法:Outer.Middle.Inner.this.index 你写成Inner.this.index也正确。都是在内部调用的。除非你在另外某个类中调用那就要写全称了。。
      

  5.   

    是不是可以这样理解:
    引用的index与靠左边最近的this结合?
    还有就是this是谁的引用?
      

  6.   


    可以,主要看this究竟是哪个类的。这个看他的前缀就行了。