日期:2014-05-20  浏览次数:20680 次

小段程序求解释!内部类
package classDemo;
/**
 * 内部类访问外部静态变量
 * @author Administrator
 *
 */
public class GroupThree {
private static int count;
private String name;

public class Student{
private int count;
private String name;
public void output(int count){
count++;
this.count++;
GroupThree.count++;
GroupThree.this.count++;
System.out.println(count+" "+this.count+" "
+GroupThree.count+" "+GroupThree.this.count);
}
}

public Student aStu() {
return new Student();
}

public static void main(String[] args) {
GroupThree g3 = new GroupThree();
GroupThree.count=10;
GroupThree.Student s1 = g3.aStu();
s1.output(5);
}

}

输出的结果是 6 1 12 12

前面给出的两个解毋庸置疑,但是后面给出的12,是什么原因呀??

------解决方案--------------------
原因很简单:
GroupThree.count++;
GroupThree.this.count++;
这两行代码中的count实际均为private static int count;
我想你不明白的地方在这里GroupThree.this,你认为这个是Student对象吧?其实不是,它是指GroupThree使用new创建出来的对象。
------解决方案--------------------
GroupThree.this.count 在以前的基础上加了一次。
------解决方案--------------------

public void output(int count){
count++;
this.count++;
GroupThree.count++;
System.out.println(count+" "+this.count+" "
+GroupThree.count+" "+GroupThree.this.count);
GroupThree.this.count++;
System.out.println(count+" "+this.count+" "
+GroupThree.count+" "+GroupThree.this.count);
}

添加进去,再运行看结果你就知道为什么不是11了!因为++了两次!然后才输出的!