亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么執行之后會有錯誤

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();
?}
}

正在回答

2 回答

{???HelloWorld?=new?HelloWorld?();
????????Inner?c=p.new?Inner();
????????System.out.println(c.a);
}

這段代碼錯誤,因為這是一個初始化代碼塊,當你new一個HelloWorld的時候,它會執行這段代碼,但這段代碼里面由于有new HelloWorld(), 它就會繼續執行初始化代碼塊,然后進入了死循環,從而造成內存溢出。樓上說的加個static是可取的,因為static只會執行一次,所以不會造成死循環。

解決辦法是:加一個static,或者把這段去掉。

1 回復 有任何疑惑可以回復我~
{
	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內部代碼所有對象共有。具體很難解釋明白。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么執行之后會有錯誤

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號