public class OutClass {
class innerClass {
innerClass() {
System.out.println("我是innerClass的构造方法innerClass()");
}
public void inf() {
System.out.println("我是innerClass的成员方法inf()");
}
int y = 0;
}
OutClass() {
innerClass in = new innerClass();
System.out.println("outClass的构造方法");
}
public innerClass doit() {
System.out.println("调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象");
return null;
}
public static void main(String[] args) {
OutClass out = new OutClass();
System.out.println("------------------");
OutClass.innerClass in1 = out.doit();
OutClass.innerClass in2 = out.new innerClass();
}
}
输出结果:
我是innerClass的构造方法innerClass()
outClass的构造方法
------------------
调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象
我是innerClass的构造方法innerClass()
这很好理解,OutClass out = new OutClass();这句代码 实例化对象时运行了innerClass in = new innerClass();而这是又调用了innerClass 的构造方法
所以-------------上面的结果是:
我是innerClass的构造方法innerClass()
outClass的构造方法
当我改动 innerClass in = new innerClass();位置,代码如下:
public class OutClass {
innerClass in = new innerClass();
class innerClass {
innerClass() {
System.out.println("我是innerClass的构造方法innerClass()");
}
public void inf() {
System.out.println("我是innerClass的成员方法inf()");
}
int y = 0;
}
OutClass() {
System.out.println("outClass的构造方法");
}
public innerClass doit() {
System.out.println("调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象");
return null;
}
public static void main(String[] args) {
OutClass out = new OutClass();
System.out.println("------------------");
OutClass.innerClass in1 = out.doit();
OutClass.innerClass in2 = out.new innerClass();
}
}
此时 innerClass in = new innerClass();变成外部类的成员变量,这时 OutClass out = new OutClass();实例化的时候,OutClass()构造方法中只有
System.out.println("outClass的构造方法");这一句
为什么输出结果不变,还是:
我是innerClass的构造方法innerClass()
outClass的构造方法
------------------
调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象
我是innerClass的构造方法innerClass()
innerClass in = new innerClass();这句代码是何时运行的?
注释这句代码,输出结果就正常了:
outClass的构造方法
------------------
调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象
我是innerClass的构造方法innerClass()