為什么執(zhí)行之后會(huì)有錯(cuò)誤
package com.sean;
public class HelloWorld {
?
??? // 內(nèi)部類Inner,類Inner在類HelloWorld的內(nèi)部
??? public class Inner {
??? ?public int a=1;
??// 內(nèi)部類的方法
??? ?
??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) {
???????
??????? // 創(chuàng)建外部類對(duì)象
??HelloWorld hello = new HelloWorld();
??????? // 創(chuàng)建內(nèi)部類對(duì)象
??Inner i = hello.new Inner();
??????? // 調(diào)用內(nèi)部類對(duì)象的方法
??i.show();
?}
}
2015-09-20
這段代碼錯(cuò)誤,因?yàn)檫@是一個(gè)初始化代碼塊,當(dāng)你new一個(gè)HelloWorld的時(shí)候,它會(huì)執(zhí)行這段代碼,但這段代碼里面由于有new HelloWorld(), 它就會(huì)繼續(xù)執(zhí)行初始化代碼塊,然后進(jìn)入了死循環(huán),從而造成內(nèi)存溢出。樓上說(shuō)的加個(gè)static是可取的,因?yàn)閟tatic只會(huì)執(zhí)行一次,所以不會(huì)造成死循環(huán)。
解決辦法是:加一個(gè)static,或者把這段去掉。
2015-08-10
這一段會(huì)內(nèi)存溢出
每創(chuàng)建一個(gè)HelloWorld對(duì)象a,a也會(huì)創(chuàng)建一個(gè)HelloWorld對(duì)象b,b.....
你可以把上面這一段去掉或者加上static
static內(nèi)部代碼所有對(duì)象共有。具體很難解釋明白。