牛客一題:找出寫(xiě)法錯(cuò)誤的一項(xiàng)
A:????class x { .... }
B:????class x extends y { .... }
C:????static class x implements y1,y2 { .... }
D:????public class x extends Applet { .... }
答案為c拖陆,因?yàn)閟tatic不可以用來(lái)修飾外部類境析。
那么static為什么可以修飾內(nèi)部類脏嚷,卻不可以修飾外部類?
static修飾的為類成員,會(huì)隨著類的加載而加載,比如靜態(tài)代碼塊,靜態(tài)成員,靜態(tài)方法(這里只是加載,并沒(méi)有調(diào)用)等等,可以想象一下,如果把一個(gè)Class文件中的外部類設(shè)為static,目的難道是讓這個(gè)類隨著應(yīng)用的啟動(dòng)而加載嗎?如果在這次使用過(guò)程中根本沒(méi)有使用過(guò)這個(gè)類,那么是不是就會(huì)浪費(fèi)內(nèi)存胯杭。這樣來(lái)說(shuō)設(shè)計(jì)不合理,總而言之,設(shè)計(jì)不合理的地方,Java是不會(huì)讓它存在的脓恕。
而為什么內(nèi)部類可以使用static修飾呢,因?yàn)閮?nèi)部類算是類的成員了,如果沒(méi)有使用靜態(tài)來(lái)修飾,那么在創(chuàng)建內(nèi)部類的時(shí)候就需要先有一個(gè)外部類的對(duì)象,如果我們一直在使用內(nèi)部類,那么內(nèi)存中就會(huì)一直存在外部類的引用,而我們有時(shí)候只需要使用內(nèi)部類,不需要外部類,那么還是會(huì)浪費(fèi)內(nèi)存,甚至?xí)斐蓛?nèi)存溢出膜宋。使用static修飾內(nèi)部類之后,內(nèi)部類在創(chuàng)建對(duì)象時(shí)就不需要有外部類對(duì)象的引用了。
最終結(jié)論就是:static可以用來(lái)修飾內(nèi)部類,但是不可以用來(lái)修飾外部類