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

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

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

    posts - 42,comments - 83,trackbacks - 0
            有人問我一個關于遞歸的問題, 測試代碼如下:

    TestClass.java
     1 public class TestClass {
     2     
     3     private static TestPrinter printer = null;
     4     
     5     static
     6     {
     7         printStaticInfo("initialize test printer in static");
     8         printer = new TestPrinter();
     9     }
    10     
    11     public TestClass()
    12     {
    13         System.out.println("to construct a TestClass object");
    14     }
    15     
    16     public void printOne()
    17     {
    18         printer.printOne();
    19     }
    20     
    21     public static void printStaticInfo(String s)
    22     {
    23         System.out.println(s);
    24     }
    25 }

    TestPrinter.java
     1 public class TestPrinter {
     2 
     3     private static TestClass tc = null;
     4     
     5       static
     6       {
     7           printStaticInfo("initialize test class in static");
     8           tc = new TestClass();
     9       }
    10 
    11     public TestPrinter()
    12     {
    13         System.out.println("to construct a TestPrinter object");
    14     }
    15           
    16     public void printOne()
    17     {
    18         System.out.println("One");
    19         System.out.println("compile again!");
    20     }
    21     
    22     public static void printStaticInfo(String s)
    23     {
    24         System.out.println(s);
    25     }
    26 }


         他的問題是:如果我new一個TestClass對象,然后調用testClass.printOne(),結果是什么? 會不會造成遞歸調用?

        當然不會,因為代碼中的所謂的遞歸都是在static域中的,而static域中的內容只是在這個類裝載的時候調用,也就是說它的調用在constructor之前完成,而且在整個JVM運行期間,static域中的內容只會被執行一次。當然如果這個類在運行期間被GC從PermGen中unload的話,下次該類被裝載的時候,static域中的內容將被重新調用。

         大家可以想想上面的測試輸出結果是什么,不要看下面的答案哦

    initialize test printer in static
    initialize test class in static
    to construct a TestClass object
    to construct a TestPrinter object
    to construct a TestClass object
    One
    compile again!

            關于static域是在裝載期間還是在對象初始化期間被執行,我們可以通過下面的代碼測試:

     1 public class LoaderTest {
     2     
     3     //to evaluate follow codes is invoked during class loading or object initialized
     4     //class laoding: Class.forName();
     5     //object initialized: Object obj = new ClassName();
     6     static
     7     {
     8         int i = 0;
     9         System.out.println("i is initialized in static during class loading");
    10     }
    11 }

            我們可以找個jsp,在其中加上如下內容:
    1   try
    2   {
    3         Class.forName("LoaderTest");
    4   }catch(ClassNotFoundException e)
    5   {
    6   }
        
            好了,上面代碼中我們并沒有去實例化LoaderTest對象,而只是動態裝載這個類,static的內容就被輸出了。
    posted on 2008-09-26 12:38 走走停停又三年 閱讀(2361) 評論(3)  編輯  收藏 所屬分類: Java Technology

    FeedBack:
    # re: 關于Java中的遞歸調用
    2008-09-27 10:44 | YYX
    static塊可以說是Class對象的構造函數  回復  更多評論
      
    # re: 關于Java中的遞歸調用
    2008-09-28 15:26 | zhuxing
    關于初始化有兩個概念:類型初始化和實例初始化^_^  回復  更多評論
      
    # re: 關于Java中的遞歸調用
    2013-08-14 22:38 | maco
    遞歸有沒在詳細的解釋呢  回復  更多評論
      
    主站蜘蛛池模板: 国产激情免费视频在线观看| 久久人午夜亚洲精品无码区| 女同免费毛片在线播放| 亚洲第一永久AV网站久久精品男人的天堂AV| 亚洲1234区乱码| 9久9久女女免费精品视频在线观看 | 污视频网站在线观看免费| 曰皮全部过程视频免费国产30分钟 | 亚洲Aⅴ无码专区在线观看q| a视频在线免费观看| 在线日韩日本国产亚洲| 中文字幕不卡高清免费| 亚洲乱色熟女一区二区三区丝袜 | 无人在线观看免费高清视频| 亚洲一级毛片在线播放| 在线看片人成视频免费无遮挡| 亚洲欧洲日韩极速播放| 国产成人3p视频免费观看| 日韩在线一区二区三区免费视频 | www一区二区www免费| 亚洲日韩精品无码一区二区三区| 99久久99这里只有免费的精品| 亚洲色精品aⅴ一区区三区| 你懂的免费在线观看网站| 97久久精品亚洲中文字幕无码| 男女免费观看在线爽爽爽视频 | 国产精品成人无码免费| 一区二区三区精品高清视频免费在线播放 | 亚洲av乱码一区二区三区香蕉| 好爽又高潮了毛片免费下载| 曰韩无码AV片免费播放不卡| 亚洲AV无码久久精品蜜桃| 国产精品免费观看久久| 无遮挡a级毛片免费看| 久久精品夜色国产亚洲av| 中文字幕无码视频手机免费看| 免费看又黄又爽又猛的视频软件| 亚洲国产精品无码专区影院| 歪歪漫画在线观看官网免费阅读| 免费一级全黄少妇性色生活片| 国产V亚洲V天堂无码|