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

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

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

    飛翔的起點(diǎn)

    從這里出發(fā)

    導(dǎo)航

    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統(tǒng)計(jì)

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    關(guān)于static和final的收集總結(jié)

     

         Static變量的總結(jié)

    1.不可從一個(gè)static方法內(nèi)部發(fā)出對非static方法的調(diào)用,盡管反過來說是可以的。如果要在static方法中訪問所在類的成員變量或方法,就必須首先創(chuàng)建相應(yīng)的實(shí)例變量。

     

    2.static變量可以通過類名直接訪問,

    3.static方法不能被覆蓋,但是在子類中可以聲明與父類驚天方法相同的方法,從而將父類的靜態(tài)方法隱藏,另外自樂不能把父類的非靜態(tài)方法重寫為靜態(tài)的:并且static方法也不能夠重載(因?yàn)樗麄兪乔捌诮壎ǖ模圆荒苤剌d;不能重載的方的還有finalprivate  
     
    而普通方法能被覆蓋,覆蓋的結(jié)果是產(chǎn)生多態(tài);  
       
     
    例子:  
      package   test;  
       
      class   Test   {  
      public   static   void   main(String[]   args)   {  
      A   a   =   new   B();  
      a.f();  
      a.m();  
      }  
      }  
       
      class   A   {  
      public   static   void   f()   {  
      System.out.println("hello,A");  
      }  
       
      public   void   m()   {  
      System.out.println("hello,A");  
      }  
      }  
       
      class   B   extends   A   {  
      public   static   void   f()   {  
      System.out.println("hello,B");  
      }  
       
      public   void   m()   {  
      System.out.println("hello,B");  
      }  
      }  
       
     
    結(jié)果是:  
       
      hello,A  
      hello,B  

     

    1.根據(jù)Java   Language   Specification   Version   3   8.4.8   的描述,子類在繼承父類時(shí),對于方法而言,存在兩種關(guān)系:  
          A.   override  
    即覆蓋,這是對實(shí)例方法(instance   method)而言的;子類與父類中形構(gòu)相同的方法(原文中是   subsignature,它的范圍比形構(gòu)相同要大,請參考原文)會override   父類中的那個(gè)方法。  
       
          B.   hide          
    即隱藏,這是對類方法(class   method)即static   方法而言的。如果子類中定義了靜態(tài)方法,則它會隱藏父類中形構(gòu)相同的(原文中是   subsignature,它的范圍比形構(gòu)相同要大,請參考原文)所有方法,但如果隱藏了父類中的實(shí)例方法,則會編譯報(bào)錯(cuò)。  
       
      2.
    根據(jù)上面的規(guī)范:  
          “override  
    覆蓋的前提是實(shí)例方法,只有實(shí)例方法在繼承時(shí)才會出現(xiàn)override情況。  
           
    如果是static方法,在繼承時(shí)出現(xiàn)的現(xiàn)象根本就不能用“override”這個(gè)詞描述,如果static方法在父類和子類中形構(gòu)一致,則被成為   hide(隱藏)。  
       
      3.
    因?yàn)?/span>static方法是類方法,實(shí)現(xiàn)時(shí)是靜態(tài)綁定的(引用“JAVA   核心技術(shù)   1   第六版149頁內(nèi)容“privatestaticfinal”修飾的方法是靜態(tài)綁定的。其他的方法在運(yùn)行時(shí)動態(tài)綁定。“interhanchi”所說的“staticfinal方法外都是后期綁定并不精確),只與類相關(guān),不會有多態(tài)性。   從編程的角度看,效果好像是“static方法不能被覆蓋  
       
      4.
    從術(shù)語上看,“static方法能否被覆蓋這種說法本身就是錯(cuò)誤的,因?yàn)?/span>覆蓋定義的前提和基礎(chǔ)是實(shí)例方法。  
       
      5.
    結(jié)論:   子類中的static方法會隱藏父類中形構(gòu)相同的static方法。  
       final
    變量的總結(jié):

                  Final不想做改變的理由是:設(shè)計(jì)和效率

    java中除了static方法、final方法、(private方法屬于final方法)之外,其他所有的方法都是后期綁定

    Final可以修飾基本類型,也可以修飾引用類型,但是當(dāng)final修飾引用類型的時(shí)候,不能夠改變引用指向另一個(gè)對象, 但這個(gè)對象本身的狀態(tài)是可以改變的...

     

    final String string=“final”
    是開辟了2個(gè)內(nèi)存空間,在棧中的string引用在堆中的final,其中string是始終指向堆中的final這個(gè)地址的引用,不能改變。但是堆中的final卻可以改變。

     

     

    可以通過下面的例子來說明static final的作用:

    public class Test0
    {
    private static final String string;
    public Test0(String str)
    {
    string=str;
    System.out.println(string);
    }

    public static void main(String[] args)
    {
    Test0 t=new Test0("hello world");
    Test0 tt=new Test0("world hello");
    }

    }

     

    解釋說明:

    1.首先正確的認(rèn)識一下final, 一個(gè)final修飾的叫"終態(tài)", 而這種終態(tài)很特殊, 它指的是:"當(dāng)這個(gè)變量被賦值之后成為終態(tài)". 那么,當(dāng)一個(gè)被賦值之后的final修飾變量, 將不可再被賦新值. (先理解)

    2.
    static表示靜態(tài)變量, 說穿了,你需要知道JAVA如何為一個(gè)類創(chuàng)建內(nèi)存空間--我們知道類有空間,類產(chǎn)生的實(shí)例(對象)有空間,方法有空間,變量有空間, 當(dāng)static修飾時(shí), 這個(gè)變量會在類分配內(nèi)存時(shí)就被分配內(nèi)存了, 所以你知道,你可以不用產(chǎn)生對象就使用靜態(tài)變量.

    3.
    好了,有了以上兩點(diǎn),我們來看看, 你可以根據(jù)我的敘述試試. 首先,你只使用final修飾你的string, 你會發(fā)現(xiàn)不會報(bào)錯(cuò), 因?yàn)檫@是一個(gè)"還沒有被賦值的非靜態(tài)的終態(tài)變量(在類分配內(nèi)存時(shí)不會分配內(nèi)存).,接下來你改一下,:private final String string = "sss"; 你會發(fā)現(xiàn)報(bào)錯(cuò)了,原因自己想.
    接下來, 看你發(fā)出來的代碼, 又被static修飾,又被final修飾,首先它是一個(gè)靜態(tài)變量, 那么在類分配時(shí)就會分配內(nèi)存, 實(shí)際上這個(gè)String就被初始化了,既然初始化了, 那么也就有值了, 而一個(gè)終態(tài)被賦值變量將不能再被賦值, 那么自然就報(bào)錯(cuò)了

    posted on 2008-04-29 09:11 forgood 閱讀(267) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲熟妇无码AV在线播放| 亚洲视频在线观看免费| 野花香高清视频在线观看免费 | 亚洲人成电影在在线观看网色| 午夜免费1000部| 国产亚洲精品91| 亚洲美免无码中文字幕在线| 免费的一级黄色片| 野花香高清视频在线观看免费| 亚洲人成电影网站| 精品亚洲成α人无码成α在线观看| 亚洲午夜免费视频| 黄页网址在线免费观看| 亚洲精品成人网站在线观看| 西西大胆无码视频免费| 一个人看的www视频免费在线观看| 亚洲国产成人久久精品app| 中文字幕中韩乱码亚洲大片| 免费在线观看的网站| 免费人人潮人人爽一区二区| 亚洲视频在线观看免费| 亚洲国产精品尤物YW在线观看| 久热中文字幕在线精品免费| xxxxxx日本处大片免费看| 亚洲免费网站在线观看| 亚洲欧洲成人精品香蕉网| 在线永久免费观看黄网站| 久久永久免费人妻精品下载| 国产亚洲成在线播放va| 亚洲av永久无码精品三区在线4 | 全部免费毛片在线播放| 久久亚洲精品高潮综合色a片| 亚洲理论精品午夜电影| 亚洲精品美女久久777777| 国产无遮挡吃胸膜奶免费看视频| 国产精品1024永久免费视频| 99久久精品毛片免费播放| 免费视频精品一区二区| 亚洲Av无码国产一区二区| 亚洲精品天堂在线观看| 亚洲人成网站影音先锋播放|