1包警、?靜態(tài)方法中可以直接調(diào)用同類中的靜態(tài)成員撬碟,但不能直接調(diào)用非靜態(tài)成員诞挨,如果希望在靜態(tài)方法中調(diào)用非靜態(tài)變量,可以通過創(chuàng)建類的對象呢蛤,然后通過對象來訪問非靜態(tài)變量惶傻。
2、?在普通成員方法中顾稀,則可以直接訪問同類的非靜態(tài)變量和靜態(tài)變量达罗,
3、?靜態(tài)方法中不能直接調(diào)用非靜態(tài)方法静秆,需要通過對象來訪問非靜態(tài)方法
Java中的內(nèi)部類
問:什么是內(nèi)部類呢粮揉?
答:內(nèi)部類( Inner Class )就是定義在另外一個(gè)類里面的類。與之對應(yīng)抚笔,包含內(nèi)部類的類被稱為外部類扶认。
問:那為什么要將一個(gè)類定義在另一個(gè)類里面呢?清清爽爽的獨(dú)立的一個(gè)類多好笆獬取7觥!
答:內(nèi)部類的主要作用如下:
1. 內(nèi)部類提供了更好的封裝膨蛮,可以把內(nèi)部類隱藏在外部類之內(nèi)叠纹,不允許同一個(gè)包中的其他類訪問該類
2. 內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù),包括私有的數(shù)據(jù)
3. 內(nèi)部類所實(shí)現(xiàn)的功能使用外部類同樣可以實(shí)現(xiàn)敞葛,只是有時(shí)使用內(nèi)部類更方便
問:內(nèi)部類有幾種呢誉察?
答:內(nèi)部類可分為以下幾種:
成員內(nèi)部類
1、?Inner 類定義在 Outer 類的內(nèi)部惹谐,相當(dāng)于 Outer 類的一個(gè)成員變量的位置持偏,Inner 類可以使用任意訪問控制符驼卖,如 public 、 protected 鸿秆、 private 等
2酌畜、?Inner 類中定義的 test() 方法可以直接訪問 Outer 類中的數(shù)據(jù),而不受訪問控制符的影響卿叽,如直接訪問 Outer 類中的私有屬性a
3桥胞、?定義了成員內(nèi)部類后,必須使用外部類對象來創(chuàng)建內(nèi)部類對象附帽,而不能直接去 new 一個(gè)內(nèi)部類對象埠戳,即:內(nèi)部類 對象名 = 外部類對象.new 內(nèi)部類( );
4、?編譯的程序后蕉扮,會發(fā)現(xiàn)產(chǎn)生了兩個(gè) .class 文件整胃,其中,第二個(gè)是外部類的 .class 文件喳钟,第一個(gè)是內(nèi)部類的 .class 文件屁使,即成員內(nèi)部類的 .class 文件總是這樣:外部類名$內(nèi)部類名.class
靜態(tài)內(nèi)部類
靜態(tài)內(nèi)部類是 static 修飾的內(nèi)部類,這種內(nèi)部類的特點(diǎn)是:
1奔则、 靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員蛮寂,但可以通過?new 外部類().成員?的方式訪問
2、?如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱相同易茬,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員酬蹋;如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱不相同,則可通過“成員名”直接調(diào)用外部類的靜態(tài)成員
3抽莱、?創(chuàng)建靜態(tài)內(nèi)部類的對象時(shí)范抓,不需要外部類的對象,可以直接創(chuàng)建內(nèi)部類 對象名= new 內(nèi)部類();
方法內(nèi)部類
方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中食铐,方法內(nèi)部類只在該方法的內(nèi)部可見匕垫,即只在該方法內(nèi)可以使用。
匿名內(nèi)部類