風雨無阻

          java初始化順序

          在一個類里,初始化的順序是由變量在類內的定義順序決定的。即使變量定義大量遍布于方法定義的中間,那些變量仍會在調用任何方法之前得到初始化——甚至在構建器調用之前。例如:
          class Tag {
            Tag(int marker) {
              System.out.println("Tag(" + marker + ")");
            }
          }

          class Card {
            Tag t1 = new Tag(1); // 先初始化t1
            Card() {
              // Indicate we're in the constructor:
              System.out.println("Card()");
              t3 = new Tag(33); // Re-initialize t3
            }
            Tag t2 = new Tag(2); // 然后初始化t2
            void f() {
              System.out.println("f()");
            }
            Tag t3 = new Tag(3); // 接著初始化t3
          }

          public class OrderOfInitialization {
            public static void main(String[] args) {
              Card t = new Card();
              t.f(); // Shows that construction is done
            }
          }

          它的輸入結果如下:
          "Tag(1)",
             "Tag(2)",
             "Tag(3)",
             "Card()",
             "Tag(33)",
             "f()"
          // 以下是人綜合例子:
          //總的原則:先靜態后動態,先定義初始化,后構造函數初始化
          /**
             * 實例化Child對象時
             * 先父類靜態成員初始化,后子類靜態成員初始化
             * 然后是父類成員,父類構造函數,最后是子類
             * 成員,子類構造函數
          */

          class Parent {
           private static int s = getS("父類靜態成員");

           private int num = getNum();

           public Parent() {
            System.out.println("父類構造函數");
           }

           private static int getS(String string) {
            System.out.println(string);
            return 47;
           }

           public int getNum() {
            System.out.println("父類私有成員");
            return num;
           }

           public static void setS(int s) {
            Parent.s = s;
           }

          }

          class Child extends Parent {
           private int num = prt("子類私有成員");

           private static int s = getS("子類靜態成員");

           public static void setS(int s) {
            Child.s = s;
           }

           public Child() {
            System.out.println("子類構造函數");
           }

           public void setNum(int num) {
            this.num = num;
           }

           private int prt(String string) {
            System.out.println(string);
            return 5;
           }

           public static int getS(String string) {
            System.out.println(string);
            return s;
           }
          }


          public class Tee {

           /**
            * @param args
            */
           public static void main(String[] args) {
            Child c = new Child();
            c.setNum(100);

            // 為什么輸出的是0
            System.out.print(c.getNum());

          //  Child cStatic = new Child();
          //  cStatic.setS(100);
          //  System.out.println(cStatic.getS("s"));
               


           }

          }

          最后輸出結果:
          父類靜態成員
          子類靜態成員
          父類私有成員
          父類構造函數
          子類私有成員
          子類構造函數
          父類私有成員
          0

          posted on 2008-03-12 15:09 秋楓故事 閱讀(408) 評論(0)  編輯  收藏


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


          網站導航:
           
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          新聞檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 确山县| 台安县| 南涧| 井冈山市| 长泰县| 平江县| 包头市| 西林县| 宁河县| 迁西县| 柳河县| 政和县| 三原县| 女性| 南汇区| 烟台市| 甘孜县| 洪江市| 阳谷县| 绍兴县| 永定县| 双辽市| 客服| 洛南县| 西峡县| 石狮市| 永登县| 建瓯市| 日喀则市| 滨州市| 察雅县| 平阴县| 昭觉县| 彭阳县| 泸溪县| 阿合奇县| 横峰县| 乡城县| 巴楚县| 甘谷县| 赤城县|