package com.sean;
public class HelloWorld {
// 内部类Inner,类Inner在类HelloWorld的内部
public class Inner {
public int a=1;
// 内部类的方法
public void show() {
System.out.println("welcome to imooc!"+a);
}
}
{ HelloWorld p =new HelloWorld();
Inner c=p.new Inner();
System.out.println(c.a);
}
public static void main(String[] args) {
// 创建外部类对象
HelloWorld hello = new HelloWorld();
// 创建内部类对象
Inner i = hello.new Inner();
// 调用内部类对象的方法
i.show();
}
}
{ HelloWorld =new HelloWorld (); Inner c=p.new Inner(); System.out.println(c.a); }
这段代码错误,因为这是一个初始化代码块,当你new一个HelloWorld的时候,它会执行这段代码,但这段代码里面由于有new HelloWorld(), 它就会继续执行初始化代码块,然后进入了死循环,从而造成内存溢出。楼上说的加个static是可取的,因为static只会执行一次,所以不会造成死循环。
解决办法是:加一个static,或者把这段去掉。
{ HelloWorld p = new HelloWorld();//有问题 Inner c = p.new Inner(); System.out.println(c.a); }
这一段会内存溢出
每创建一个HelloWorld对象a,a也会创建一个HelloWorld对象b,b.....
你可以把上面这一段去掉或者加上static
static { HelloWorld p = new HelloWorld(); Inner c = p.new Inner(); System.out.println(c.a); }
static内部代码所有对象共有。具体很难解释明白。