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

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

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

    七段

    無論怎樣,請讓我先感謝一下國家。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      35 Posts :: 2 Stories :: 7 Comments :: 0 Trackbacks
    JavaScript里有兩個容易讓初學(xué)者混淆的概念:scope chain and closure。
    比如說,我想創(chuàng)建10個函數(shù),每個函數(shù)依次返回0-9.
     1 //wrong: all function refer to global variable i=10 
     2 var fn_list=[];
     3 for(var i=0;i<10;i++){
     4  var _tempFn =function(){
     5         return i;
     6  }
     7  fn_list.push(_tempFn);    
     8 }
     9 //right: every function refer to its closure scope variable a
    10 var fn_list=[];
    11 for(var i=0;i<10;i++){
    12  var _tempFn =function(a){
    13         return function(){
    14          return a;
    15         };
    16  }
    17  fn_list.push(_tempFn(i));    
    18 }
    19 

    Java里也有兩個讓初學(xué)者容易混淆的概念:nest class and inner class。
    nest class就是static inner class,
    而inner class就是no-static inner class。沒有為什么,sun就是這么定義的。
    還是上面得例子,創(chuàng)建10個對象,每個對象的getValue接口依次返回0-9.
     1 public class Test {
     2     private int noStaticValue;
     3     private static int staticValue;
     4 
     5     public Test(int noSV, int sv) {
     6         this.noStaticValue = noSV;
     7         this.staticValue = sv;
     8     }
     9 
    10     public Test(int noSV) {
    11         this.noStaticValue = noSV;
    12     }
    13 
    14     interface valueHolder {
    15         int getValue();
    16     }
    17 
    18     class innerClass implements valueHolder {
    19         public int getValue() {
    20             return noStaticValue;
    21         }
    22     }
    23 
    24     static class nestClass implements valueHolder {
    25         public nestClass(int i) {
    26             staticValue = i;
    27         }
    28 
    29         public int getValue() {
    30             return staticValue;
    31         }
    32     }
    33 
    34     public static void main(String[] args) {
    35         Test context1 = new Test(00);
    36         valueHolder[] list = new valueHolder[10];
    37         for (int i = 0; i < 10; i++) {
    38             list[i] = new Test.nestClass(i);
    39         }
    40         for (valueHolder obj : list) {
    41             System.out.println(obj.getValue());// always print 9
    42         }
    43         for (int i = 0; i < 10; i++) {
    44             list[i] = new Test(i).new innerClass();
    45         }
    46         for (valueHolder obj : list) {
    47             System.out.println(obj.getValue());// print 0-9
    48         }
    49     }
    50 }
    可見用inner class可以模擬closure的特性,就是運(yùn)行時定義class的某些狀態(tài)。
    inner class和nest class之間的區(qū)別就是后者是靜態(tài)類。前者必須通過wrap class的實(shí)例來調(diào)用new,e.g. new Test().new innerClass。
    因?yàn)閚est class是靜態(tài)類,所以可以添加static member 或者static method,而inner class 不行。
    匿名內(nèi)部類是inner class的一種特殊形式,所以也不能添加static member 或者static method。



    posted on 2010-04-17 23:07 sevenduan 閱讀(2796) 評論(5)  編輯  收藏 所屬分類: Java

    評論

    # re: java nest class and java inner class 2010-04-18 10:42 unmi
    非常好,匿名類就是個nest class 了,不過在感謝樓主之前一定要讓我感謝黨感謝國家,用我從窯里爬出來還白凈的手熱烈的鼓掌,辛苦啦,謝謝。  回復(fù)  更多評論
      

    # re: java nest class and java inner class 2010-04-18 11:12 sevenduan
    @unmi
    感謝黨感謝國家,祝賀開博以來第一個非廣告回復(fù)。
    thanks to unmi.  回復(fù)  更多評論
      

    # re: java nest class and java inner class 2010-04-18 13:20 滴水
    扯!你的例子中的兩個變量根本無可比性,一個是static,一個是noStatic。  回復(fù)  更多評論
      

    # re: java nest class and java inner class 2010-04-18 13:28 sevenduan
    @滴水
    的確不是為了比較static member 和no static member。
    只是為了對應(yīng)js里global variable 和 closure context。
    Class.staticMember - global variable
    new Class() - closure context。
    簡單比較了一下static nest class 和no static inner class。
    如有紕漏望指正。  回復(fù)  更多評論
      

    # re: java nest class and java inner class 2010-04-18 15:21 99書城
    環(huán)境安徽省的花灑  回復(fù)  更多評論
      

    主站蜘蛛池模板: 亚洲欧洲日产专区| www.亚洲成在线| 亚洲男人第一av网站| 亚洲狠狠狠一区二区三区| 18禁亚洲深夜福利人口| 日韩免费码中文在线观看| 国产麻豆一精品一AV一免费 | 午夜dj免费在线观看| 日本高清免费不卡在线| 亚洲avav天堂av在线不卡| 91在线亚洲综合在线| 波多野结衣免费一区视频| 久久精品a一国产成人免费网站 | 久久久久亚洲AV无码去区首| 丝袜足液精子免费视频| 日韩免费观看的一级毛片| 日日摸日日碰夜夜爽亚洲| 亚洲成A人片在线观看无码3D| 亚洲国产成人精品久久 | 久久亚洲精品国产精品黑人| 国产99视频精品免费专区| 免费一级做a爰片久久毛片潮喷| 亚洲综合久久1区2区3区| 妻子5免费完整高清电视| 亚洲国产精品不卡在线电影| 亚洲精品视频免费看| 亚洲欧洲国产精品你懂的| 国产h视频在线观看网站免费| 久热综合在线亚洲精品| a级毛片毛片免费观看久潮喷| 国产成人免费片在线观看| 亚洲人成网站在线播放2019| 日本卡1卡2卡三卡免费| 亚洲一级黄色大片| 亚洲国产精品免费观看| 美女黄色免费网站| 日韩免费毛片视频| a级毛片高清免费视频就| 亚洲va在线va天堂成人| 亚洲真人日本在线| jizz免费在线观看|