Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

          java類的初始化順序

          abstract class base
          {
              public int age=getNumber(100);
              static
              {
                  System.out.println("base static block");
              }
              {
                  System.out.println("base nonstatic block");
              }
              static int sage=getNumber(50);
              base()
              {
                  System.out.println(age);
                  System.out.println("base start");
                  draw();//會調用子類覆蓋后的方法
                  System.out.println("base end");
                  
              }
              static int getNumber(int base)
              {
                  System.out.println("base.getNumber int"+base);
                  return base;
              }
              public  void draw()
              {
                  System.out.println("base.draw");
              }
          }
          public class initializeOrder extends base{
              public int age=getNumber(1001);
              private int _radius=getNumber(10);
              static int sage=getNumber(250);
              static
              {
                  System.out.println("subclass static block");
              }
              {
                  System.out.println("subclass nonstatic block");
              }
              initializeOrder(int radius)
              {
                  _radius=radius;
                  System.out.println(age);
                  System.out.println("initializeOrder initialized");
              }
              public void draw()
              {
                  System.out.println("initializeOrder.draw "+_radius);
              }
              /** *//**
               * @param args
               */
              public static void main(String[] args) {
                  // TODO Auto-generated method stub
                  new initializeOrder(1000);
              }
          }
          運行結果:

          C:\java>java initializeOrder
          base static block
          base.getNumber int50
          base.getNumber int250
          subclass static block
          base.getNumber int100
          base nonstatic block
          100
          base start
          initializeOrder.draw 0
          base end
          base.getNumber int1001
          base.getNumber int10
          subclass nonstatic block
          1001
          initializeOrder initialized

          C:\java>

          總結:
          1、類只有在使用New調用創建的時候才會被JAVA類裝載器裝入
          2、JAVA類首次裝入時,會對靜態成員變量或方法進行一次初始化,但方法不被調用是不會執行的,靜態成員變量和靜態初始化塊級別相同,非靜態成員變量和非靜態初始化塊級別相同。
          先初始化父類的靜態代碼--->初始化子類的靜態代碼-->
          初始化父類的非靜態代碼--->初始化父類構造函數--->
          初始化子類非靜態代碼--->初始化子類構造函數
          3、創建類實例時,首先按照父子繼承關系進行初始化
          4、類實例創建時候,首先初始化塊部分先執行,然后是構造方法;然后從
          本類繼承的子類的初始化塊執行,最后是子類的構造方法
          5、類消除時候,首先消除子類部分,再消除父類部分

          posted on 2006-04-26 16:11 都市淘沙者 閱讀(321) 評論(1)  編輯  收藏 所屬分類: Java Basic/Lucene/開源資料

          評論

          # re: java類的初始化順序 2009-04-22 17:22 逸天

          1、類只有在使用New調用創建的時候才會被JAVA類裝載器裝入
          這句是錯的

            首次主動使用的情形:

            ·創建某個類的新實例時--new、反射、克隆或反序列化;

            ·調用某個類的靜態方法時;

            ·使用某個類或接口的靜態字段或對該字段賦值時(final字段除外);

            ·調用Java的某些反射方法時

            ·初始化某個類的子類時

            ·在虛擬機啟動時某個含有main()方法的那個啟動類。

            回復  更多評論   

          主站蜘蛛池模板: 莱州市| 台州市| 安义县| 天峨县| 宁德市| 南部县| 隆化县| 攀枝花市| 玉林市| 石嘴山市| 女性| 乌兰浩特市| 明光市| 安福县| 义乌市| 岳阳县| 瑞昌市| 天台县| 柳林县| 白山市| 邢台市| 正蓝旗| 开阳县| 山东省| 和静县| 大英县| 石家庄市| 四川省| 荃湾区| 涟源市| 吉隆县| 绍兴市| 北碚区| 新巴尔虎左旗| 石嘴山市| 城步| 涞源县| 金山区| 萝北县| 高淳县| 郓城县|