JAVA匿名类的问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 17:51:32
1 class Outer{
2 private static int size;

3 public class Inner{
4 private int size;

5 public void doStuff(int size){
6 size++; //存取局部变量
7 this.size++; //存取其内部类的成员变量
8 Outer.this.size++; //存取其外部类的成员变量
9 System.out.println(size+" "+this.size+" "+Outer.this.size);
10 }
11 }//内部类Inner结束
12 /** 类Outer中定义的实例方法testInner()方法 */
13 public void testInner(){
14 Inner i=new Inner();
15 i.doStuff(5);
16 }

17 public static void main(String[] a){
18 Outer o=new Outer();
19 o.testInner();
20 }
21 }

这个程序的输出怎么是 6 1 1 ??
6我知道,为什么size的值会是1呢?系统自动的啊?

首先:你这个不叫匿名类。叫类体内部类,还有一种叫方法体内部类。
然后:size是局部变量,this.size是内部类的成员变量,Outer.this.size是宿主类的静态成员变量。
只要是成员变量没有给定值,也没有在构造函数里赋值,JVm自动给定0(null).
are you know?

由于out类的size和inner的size都是类属性,所以在创建对象的时候会被默认的设置为0(因为没有显示的初始化),而
this.size++; 是将inner类的size变为1
Outer.this.size++; 是将inner类对象所对应的Outer类对象的size变为1
Outer.this是获得外部类的引用
另外:这种形式的类应该成为内部类
而有一种内部类是匿名内部类

程序里边的注释已经很清楚了啊
6 size++; //存取局部变量
7 this.size++; //存取其内部类的成员变量
8 Outer.this.size++; //存取其外部类的成员变量

三个size 分别是注释所指的三个对象。
Java中基础类型int 在没有指明初始值的情况下,默认是“0”,++之后就是“1” 了。

是的,int类型默认是0