學(xué)海拾遺

          生活、技術(shù)、思想無(wú)處不在學(xué)習(xí)
          posts - 52, comments - 23, trackbacks - 0, articles - 3
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          一個(gè)Java問(wèn)題貼子

          Posted on 2007-04-13 09:08 tanzek 閱讀(288) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 技術(shù)學(xué)習(xí)
          [問(wèn)題引出]:

          public class Parent
          {
           public void test()
           {}
           
           public Parent()
           {
            test();
           }

           public static void main(String [] args)
           {
            new Child();
           }
          }

          class Child extends Parent
          {
           private int instanceValue = 20;
           public void test()
           {
               System.out.println("instance value is: " + instanceValue);
           }
          }

          執(zhí)行Parent的main結(jié)果是什么,并說(shuō)出理由

          [回復(fù)]:
          我試著分析下哦:

          很顯然,程序是從Main開(kāi)始執(zhí)行的,不過(guò)執(zhí)行之前肯定是裝載了Parent類(lèi)的.
          當(dāng)執(zhí)行new Child();語(yǔ)句時(shí),肯定也會(huì)去裝載Child類(lèi)(記住,這是只是裝載,裝載的同時(shí)會(huì)完成類(lèi)的靜態(tài)成員的初始化工作).這里是請(qǐng)求創(chuàng)建Child的實(shí)例,因?yàn)镃hild是Parent的子類(lèi),那么肯定是要去先去創(chuàng)建Parent的一個(gè)實(shí)例的,那么在這個(gè)過(guò)程中,就會(huì)執(zhí)行了Child的覆蓋方法test(),這時(shí),子類(lèi)中的instanceValue還沒(méi)有被賦值.因?yàn)檫@時(shí)候還沒(méi)有進(jìn)行Child的實(shí)例創(chuàng)建.
          看一下我加入一些狀態(tài)的程序和執(zhí)行結(jié)果哦.
          程序清單:
          public class Parent
          {
          public void test() {
          System.out.println("In Parent Class.");
          }

          public Parent() {
          System.out.println("In Parent Constructor");
          test();
          }

          public static void main(String [] args) {
          System.out.println("In Main Function.");
          new Child();
          }
          }

          class Child extends Parent {
          private int instanceValue = 20;

          public void test() {
          System.out.println("In Child Class.");
          System.out.println("instance value is: " + this.instanceValue);
          }

          public Child() {
          System.out.println("In Child Constructor.");
          }
          }
          執(zhí)行結(jié)果(主要是看執(zhí)行順序哦):
          In Main Function.
          In Parent Constructor
          In Child Class.
          instance value is: 0
          In Child Constructor.

          嘿嘿,應(yīng)該懂了吧!~ 你可以試著把instanceValue的修飾符改為static試試哦.


          評(píng)論

          # 福娃免費(fèi)空間  回復(fù)  更多評(píng)論   

          2009-02-28 22:12 by sad
          福娃免費(fèi)空間http://h.8wa.com
          主站蜘蛛池模板: 涪陵区| 邛崃市| 阳朔县| 嘉禾县| 东乌珠穆沁旗| 象州县| 信丰县| 新兴县| 武威市| 社会| 乳山市| 措美县| 车险| 晋州市| 瓮安县| 娄底市| 平邑县| 崇仁县| 耿马| 莱芜市| 务川| 临邑县| 宜兰市| 全州县| 正宁县| 乐清市| 理塘县| 景宁| 上饶市| 邹平县| 政和县| 锡林浩特市| 周至县| 乌什县| 阳原县| 板桥市| 射洪县| 井研县| 章丘市| 上虞市| 赤城县|