public class Ex_4_28 {
      public static void main(String [] args){
       Outer1 out=new Outer1();
       
       out.inner.showOutVar();
      }
}class Outer1{
private int outVar=0;
Inner inner=new Inner(); public class Inner{
public void showOutVar(){
outVar++;
System.out.println(outVar);
}
}
}
问题:这个输出结果为什么是2呢?
      蓝色的inner是Inner类的实例吗?

解决方案 »

  1.   

    ???打印结果是1 啊!!
    inner是Inner的实例    
      

  2.   

    public class Ex_4_28 {
          public static void main(String [] args){
           Outer1 out=new Outer1();
           Outer1.Inner obj=new Outer1().new Inner();
           Outer1.Inner o=out.new Inner();
           obj.showOutVar();
           o.showOutVar();

           out.inner.showOutVar();
          }
    }class Outer1{
    private int outVar=0;
    Inner inner=new Inner(); public class Inner{
    public void showOutVar(){
    outVar++;
    System.out.println(outVar);
    }
    }
    }
    是这样一段不好意思- -
    多了蓝色的
      

  3.   

    偶 呵呵
    Outer1 out=new Outer1();//new 了一个Outer1实例  out
       Outer1.Inner obj=new Outer1().new Inner();//new 了一个Inner 实例 obj
     Outer1.Inner o=out.new Inner();//new 了一个Inner实例  o
     obj.showOutVar();// 对象obj  outVar=1;
     o.showOutVar();//o对象 使得   outVar=1;
     out.inner.showOutVar();// out对象属性outVar=2; Inner是Outer1的内部类   
    这样不知道你能不能理解,,,画一下内存变化图就清楚了。
      

  4.   

    回复于:2012-04-20 02:23:56偶 呵呵
    Outer1 out=new Outer1();//new 了一个Outer1实例 out
      Outer1.Inner obj=new Outer1().new Inner();//new 了一个Inner 实例 obj
     Outer1.Inner o=out.new Inner();//new 了一个Inner实例 o
     obj.showOutVar();// 对象obj outVar=1;
     o.showOutVar();//o对象 使得 outVar=1;
     out.inner.showOutVar();// out对象属性outVar=2; Inner是Outer1的内部类   
    这样不知道你能不能理解,,,画一下内存变化图就清楚了。
     
      

  5.   

    这个程序运行时,产生了2个 外围类对象:一个是out,另一个没有引用名。我们暂时叫"noname".
    是通过这句产生的:
    Outer1.Inner obj=new Outer1().new Inner();每个外围类拥有两个内部类Inner的对象。对于out 是 out.inner和o; 对于"noname",是 "noname.inner"和obj。所以o 和out.inner 操作的是一个outVar变量,(楼主可以再加几个输出语句o.showOutVar()和out.inner.showOutVar() 验证)。而obj操作的是"noname"的outVar, 输出obj.showOutVar()与o.showOutVar()和out.inner.showOutVar()没有关系。
      

  6.   

     out.inner.showOutVar();// out对象属性outVar=2;
    为什么会变成2的呢??楼主是这里不明白吧??
    我是这样理解的 ,因为Inner类要先实例化然后才会实例化外面那个类的,所以Outer的变量就变成了1.然后在进行++运算之后就变成2了 我也是个新手 可能理解的不太到位 或许也理解错了 ,以上还是仅供参考吧  肯定有高手来给你解释的 。。
    加油!!!
      

  7.   

    大致理解了,两个外围类就是out和new Outer1()
    因为两个指向的对象不同,所以o和obj指向的单位也不同。而o=out.new Inner(),和out.inner指向的是同一单位,所以对于成员变量会有重复操作。可以这样理解么?
    刚开始总把out和new Outer1()认为是对等的