<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

    內部類的使用:

    內部類的使用的優缺點:

    ?? 優點:減少了在類文件編譯后的產生的字節碼文件的大小
    ?? 缺點:使程序結構不清晰

    使用內部類的注意事項:

    ?? 內部類的使用一般都與所在的外部類有一定的關聯,它是在一個類的內部嵌套定義的類,它可以是其它類的成員,也可以在一個語句塊的內部定義,還可以在表達式內部匿名定義(匿名內部類)。

    內部類有如下的特性:

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

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

    ?.可以定義為abstract

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

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

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

    ?.內部類可以使用任何聽修飾符,但是如果聲明為static類,則等同于一個標準類。

    ?.如果非表態內部類,就擁有對外部類的所有成員的完全訪問權限,包括實例字段和方法。為實現這一行為,非表態內部類存著對外部類的實例的一個隱匿的引用。

    ?.所以對一個非表態內部類進行實例化需要采用不同語法的new 語句,這種開工的new 語句要求外部類的一個實例,使內部類能在那個實例的上下文中創建。

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


    ?.表態內部類當中可以有表態數據,表態方法或者是又一個表態內部類。而非表態內部類當中不能有靜態數據。這是它們的區別。

    ?.局部內部類:Java內部類也可以是局部的,它可以定義在一個方法甚至一個代碼塊之內。

    ?

    有一點需要注意的是,匿名內部類由于沒有名字,所以它沒有構造函數(但是如果這個匿名內部類繼承了一個只含有帶參數構造函數的父類,創建它的時候必須帶上這些參數,并在實現的過程中使用super關鍵字調用相應的內容)。如果你想要初始化它的成員變量,有下面幾種方法:

      如果是在一個方法的匿名內部類,可以利用這個方法傳進你想要的參數,不過記住,這些參數必須被聲明為final。

      將匿名內部類改造成有名字的局部內部類,這樣它就可以擁有構造函數了。

      在這個匿名內部類中使用初始化代碼塊。

      為什么需要內部類?

      java內部類有什么好處?為什么需要內部類?

      首先舉一個簡單的例子,如果你想實現一個接口,但是這個接口中的一個方法和你構想的這個類中的一個方法的名稱,參數相同,你應該怎么辦?這時候,你可以建一個內部類實現這個接口。由于內部類對外部類的所有內容都是可訪問的,所以這樣做可以完成所有你直接實現這個接口的功能。

      不過你可能要質疑,更改一下方法的不就行了嗎?

      的確,以此作為設計內部類的理由,實在沒有說服力。

      真正的原因是這樣的,java中的內部類和接口加在一起,可以的解決常被C++程序員抱怨java中存在的一個問題——沒有多繼承。實際上,C++的多繼承設計起來很復雜,而java通過內部類加上接口,可以很好的實現多繼承的效果。



    下面是使用內部類的幾個小例子:

    ?JAVA的內部類的構造方法是不會自動調用,必須在外部類當中的某個方法當中或構造函數當中顯示調用才能夠正確使用。

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

    這種使用方法不會關系到內部類的輸出。因為它并沒有顯示調用內部類。
    所以我們應該進行這樣的修改:

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

    不過我們經常使用的還是匿名內部類:

    ?? class Outer{

    ?????? Outer(){

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

    ?


    下面是JAVA的一個源碼使用了匿名內部類:
    /**
    * "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 水煮三國 閱讀(7282) 評論(3)  編輯  收藏 所屬分類: J2SE

    FeedBack:
    # re: JAVA中內部類的使用總結
    2006-08-23 10:09 | 水煮三國
    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");
    }
    }

    這是一個方法當中使用了內部類的例子,那么內部類要使用方法當中的變量時必須把該方法的變量聲明為final,否則不會通過.  回復  更多評論
      
    # re: JAVA中內部類的使用總結
    2007-09-18 11:47 | lymusic2007@126.com
    匿名內部類 是還要做修改還是作者留有空間給我們.......
    不知這樣可否???
    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();
    }
    }  回復  更多評論
      
    # re: JAVA中內部類的使用總結
    2007-09-18 11:48 | lymusic2007@126.com
    謝謝!!我也學到了很多!!!  回復  更多評論
      
    <2006年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(4)

    隨筆分類(85)

    隨筆檔案(89)

    文章分類(14)

    文章檔案(42)

    收藏夾(37)

    java

    oracle

    Sybase

    搜索

    •  

    積分與排名

    • 積分 - 210731
    • 排名 - 266

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩精品成人无码专区免费| 在线日本高清免费不卡| 国产亚洲av片在线观看18女人| 一个人看的www在线免费视频| 亚洲国产另类久久久精品小说 | 国产91色综合久久免费| 亚洲午夜精品久久久久久app| 亚洲日韩国产成网在线观看| 蜜桃视频在线观看免费视频网站WWW | 日批日出水久久亚洲精品tv| 七色永久性tv网站免费看| 99热亚洲色精品国产88| 狠狠亚洲婷婷综合色香五月排名| 最近免费中文字幕mv在线电影| 亚洲av无码专区首页| 国产日韩亚洲大尺度高清| 精品国产免费观看一区| 中国极品美軳免费观看| 最新亚洲精品国偷自产在线| 亚洲精品卡2卡3卡4卡5卡区| 卡1卡2卡3卡4卡5免费视频| 国产猛男猛女超爽免费视频| 亚洲av无码一区二区三区四区| 亚洲AV日韩AV永久无码下载| 免费国产精品视频| 免费国产作爱视频网站| 人禽伦免费交视频播放| 亚洲日韩国产二区无码| 久久精品亚洲精品国产色婷| 亚洲黄黄黄网站在线观看| 最近高清国语中文在线观看免费| 野花香在线视频免费观看大全 | 亚洲AV无码久久| 亚洲av午夜成人片精品电影| 男人的好看免费观看在线视频| 2022免费国产精品福利在线| 亚洲精华国产精华精华液好用| 精品亚洲国产成AV人片传媒| 亚洲日韩激情无码一区| 国产又粗又长又硬免费视频| 免费精品国偷自产在线在线|