<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 89,  comments - 98,  trackbacks - 0

    內(nèi)部類的使用:

    內(nèi)部類的使用的優(yōu)缺點(diǎn):

    ?? 優(yōu)點(diǎn):減少了在類文件編譯后的產(chǎn)生的字節(jié)碼文件的大小
    ?? 缺點(diǎn):使程序結(jié)構(gòu)不清晰

    使用內(nèi)部類的注意事項(xiàng):

    ?? 內(nèi)部類的使用一般都與所在的外部類有一定的關(guān)聯(lián),它是在一個(gè)類的內(nèi)部嵌套定義的類,它可以是其它類的成員,也可以在一個(gè)語(yǔ)句塊的內(nèi)部定義,還可以在表達(dá)式內(nèi)部匿名定義(匿名內(nèi)部類)。

    內(nèi)部類有如下的特性:

    ? .一般用在定義它的類或語(yǔ)句塊之內(nèi),在外部引用它時(shí)必須給出完整的名稱,名字不能與包含它的數(shù)百名相同

    ?. 可以使用包含它的類的表態(tài)和實(shí)例成員變量,也可以使用它所在方法的局部變量

    ?.可以定義為abstract

    ?.若被聲明為static,就變成了頂層類,不能再使用局部變量

    ?.若想在inner class 中聲明任何static成員,則該inner class必須聲明為static.

    ?.匿名類是一種特殊的內(nèi)部類,它是在一個(gè)表達(dá)式的內(nèi)部包含一個(gè)完整的類的定義。匿名內(nèi)部類不需要任何的修飾詞。

    ?.內(nèi)部類可以使用任何聽(tīng)修飾符,但是如果聲明為static類,則等同于一個(gè)標(biāo)準(zhǔn)類。

    ?.如果非表態(tài)內(nèi)部類,就擁有對(duì)外部類的所有成員的完全訪問(wèn)權(quán)限,包括實(shí)例字段和方法。為實(shí)現(xiàn)這一行為,非表態(tài)內(nèi)部類存著對(duì)外部類的實(shí)例的一個(gè)隱匿的引用。

    ?.所以對(duì)一個(gè)非表態(tài)內(nèi)部類進(jìn)行實(shí)例化需要采用不同語(yǔ)法的new 語(yǔ)句,這種開(kāi)工的new 語(yǔ)句要求外部類的一個(gè)實(shí)例,使內(nèi)部類能在那個(gè)實(shí)例的上下文中創(chuàng)建。

    ?.非表態(tài)內(nèi)部類具有一些限制。尤其是,它們不能聲明表態(tài)初始化列表和表態(tài)成員,除非是在常量字段中。此外方法內(nèi)部聲明的內(nèi)部類不能訪問(wèn)方法的局部變量和參數(shù),除非它們被初始化成final.


    ?.表態(tài)內(nèi)部類當(dāng)中可以有表態(tài)數(shù)據(jù),表態(tài)方法或者是又一個(gè)表態(tài)內(nèi)部類。而非表態(tài)內(nèi)部類當(dāng)中不能有靜態(tài)數(shù)據(jù)。這是它們的區(qū)別。

    ?.局部?jī)?nèi)部類:Java內(nèi)部類也可以是局部的,它可以定義在一個(gè)方法甚至一個(gè)代碼塊之內(nèi)。

    ?

    有一點(diǎn)需要注意的是,匿名內(nèi)部類由于沒(méi)有名字,所以它沒(méi)有構(gòu)造函數(shù)(但是如果這個(gè)匿名內(nèi)部類繼承了一個(gè)只含有帶參數(shù)構(gòu)造函數(shù)的父類,創(chuàng)建它的時(shí)候必須帶上這些參數(shù),并在實(shí)現(xiàn)的過(guò)程中使用super關(guān)鍵字調(diào)用相應(yīng)的內(nèi)容)。如果你想要初始化它的成員變量,有下面幾種方法:

      如果是在一個(gè)方法的匿名內(nèi)部類,可以利用這個(gè)方法傳進(jìn)你想要的參數(shù),不過(guò)記住,這些參數(shù)必須被聲明為final。

      將匿名內(nèi)部類改造成有名字的局部?jī)?nèi)部類,這樣它就可以擁有構(gòu)造函數(shù)了。

      在這個(gè)匿名內(nèi)部類中使用初始化代碼塊。

      為什么需要內(nèi)部類?

      java內(nèi)部類有什么好處?為什么需要內(nèi)部類?

      首先舉一個(gè)簡(jiǎn)單的例子,如果你想實(shí)現(xiàn)一個(gè)接口,但是這個(gè)接口中的一個(gè)方法和你構(gòu)想的這個(gè)類中的一個(gè)方法的名稱,參數(shù)相同,你應(yīng)該怎么辦?這時(shí)候,你可以建一個(gè)內(nèi)部類實(shí)現(xiàn)這個(gè)接口。由于內(nèi)部類對(duì)外部類的所有內(nèi)容都是可訪問(wèn)的,所以這樣做可以完成所有你直接實(shí)現(xiàn)這個(gè)接口的功能。

      不過(guò)你可能要質(zhì)疑,更改一下方法的不就行了嗎?

      的確,以此作為設(shè)計(jì)內(nèi)部類的理由,實(shí)在沒(méi)有說(shuō)服力。

      真正的原因是這樣的,java中的內(nèi)部類和接口加在一起,可以的解決常被C++程序員抱怨java中存在的一個(gè)問(wèn)題——沒(méi)有多繼承。實(shí)際上,C++的多繼承設(shè)計(jì)起來(lái)很復(fù)雜,而java通過(guò)內(nèi)部類加上接口,可以很好的實(shí)現(xiàn)多繼承的效果。



    下面是使用內(nèi)部類的幾個(gè)小例子:

    ?JAVA的內(nèi)部類的構(gòu)造方法是不會(huì)自動(dòng)調(diào)用,必須在外部類當(dāng)中的某個(gè)方法當(dāng)中或構(gòu)造函數(shù)當(dāng)中顯示調(diào)用才能夠正確使用。

    ?? Class Outer{
    ??
    ??????? public outer(){
    ?System.out.println("....");
    ?????? }

    ??????? Class Inner{

    ?public Innter(){
    ?
    ?????? System.out.println("inner");
    ?}
    ??????? }

    ?????? public static void Main(String[] args){

    ??????????? Outer a = new Outer();
    ?????? }
    }

    這種使用方法不會(huì)關(guān)系到內(nèi)部類的輸出。因?yàn)樗](méi)有顯示調(diào)用內(nèi)部類。
    所以我們應(yīng)該進(jìn)行這樣的修改:

    ? 在Outer構(gòu)造函數(shù)中加入 Innter b = new Innter();
    就可以直接調(diào)用它的輸出或方法體了。

    不過(guò)我們經(jīng)常使用的還是匿名內(nèi)部類:

    ?? class Outer{

    ?????? Outer(){

    ?(new Inner(){
    ??public void print(){
    ???System.out.println("Inner");
    ???}
    ??}
    ?).print();
    ?System.out.println("Outer");
    ?????? }
    }

    ?


    下面是JAVA的一個(gè)源碼使用了匿名內(nèi)部類:
    /**
    * "Tokenizes" the entire stream as a single token.
    */
    public class KeywordAnalyzer extends Analyzer {
    public TokenStream tokenStream(String fieldName,
    final Reader reader) {
    return new TokenStream() {
    private boolean done;
    private final char[] buffer = new char[1024];
    public Token next() throws IOException {
    if (!done) {
    done = true;
    StringBuffer buffer = new StringBuffer();
    int length = 0;
    while (true) {
    length = reader.read(this.buffer);
    if (length == -1) break;
    buffer.append(this.buffer, 0, length);
    }
    String text = buffer.toString();
    return new Token(text, 0, text.length());
    }
    return null;
    }
    };
    }
    }

    posted on 2006-08-01 08:53 水煮三國(guó) 閱讀(7283) 評(píng)論(3)  編輯  收藏 所屬分類: J2SE

    FeedBack:
    # re: JAVA中內(nèi)部類的使用總結(jié)
    2006-08-23 10:09 | 水煮三國(guó)
    public class INClass{
    void innerClass(final String str){
    class IClass{
    IClass(){
    System.out.println(str);
    }
    }
    IClass ic=new IClass();
    }
    public static void main(String[] args){
    INClass inc=new INClass();
    inc.innerClass("Hello");
    }
    }

    這是一個(gè)方法當(dāng)中使用了內(nèi)部類的例子,那么內(nèi)部類要使用方法當(dāng)中的變量時(shí)必須把該方法的變量聲明為final,否則不會(huì)通過(guò).  回復(fù)  更多評(píng)論
      
    # re: JAVA中內(nèi)部類的使用總結(jié)
    2007-09-18 11:47 | lymusic2007@126.com
    匿名內(nèi)部類 是還要做修改還是作者留有空間給我們.......
    不知這樣可否???
    class Outer{

    Outer(){

    (new Inner(){

    public void print(){
    System.out.println("Inner");
    }
    }).print();


    System.out.println("Outer");
    }

    class Inner{

    }

    public static void main(String[] args){
    new Outer();
    }
    }  回復(fù)  更多評(píng)論
      
    # re: JAVA中內(nèi)部類的使用總結(jié)
    2007-09-18 11:48 | lymusic2007@126.com
    謝謝!!我也學(xué)到了很多!!!  回復(fù)  更多評(píng)論
      
    <2006年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(4)

    隨筆分類(85)

    隨筆檔案(89)

    文章分類(14)

    文章檔案(42)

    收藏夾(37)

    java

    oracle

    Sybase

    搜索

    •  

    積分與排名

    • 積分 - 210758
    • 排名 - 266

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产精品久久免费| 久久久久国产免费| 国产传媒在线观看视频免费观看| 亚洲综合精品伊人久久| 免费v片在线观看视频网站| 亚洲精品美女久久777777| 免费看男人j放进女人j免费看| 污污网站免费观看| 亚洲国产综合精品中文第一区| 亚洲乱码一二三四区麻豆| 最近免费2019中文字幕大全| 亚洲神级电影国语版| 国产乱码免费卡1卡二卡3卡| 亚洲国产精品自在自线观看| 国产在线观看www鲁啊鲁免费| 亚洲国产日韩一区高清在线| 999任你躁在线精品免费不卡| 成人免费无遮挡无码黄漫视频| 国产亚洲精品影视在线产品| 中国一级毛片免费看视频| 久久青草亚洲AV无码麻豆| 免费在线观看视频网站| 国产成人精品日本亚洲专一区 | 亚洲区日韩区无码区| 免费观看一区二区三区| 久久精品国产96精品亚洲| 日韩吃奶摸下AA片免费观看| 国产成人精品亚洲一区| 亚洲精品乱码久久久久久蜜桃不卡| 亚洲另类无码专区首页| 久久伊人亚洲AV无码网站| 在线看无码的免费网站| 亚洲熟妇无码一区二区三区导航| 最近免费最新高清中文字幕韩国 | 国产免费一区二区三区在线观看| 日韩精品视频免费在线观看| xvideos永久免费入口| 久久亚洲中文字幕精品有坂深雪| 2022国内精品免费福利视频 | 成人毛片免费在线观看| 中文字幕久无码免费久久|