国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【Thinking in Java】類和對(duì)象的初始化過(guò)程

2019-11-15 00:10:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
【Thinking in java】類和對(duì)象的初始化過(guò)程

  在Java中,

  當(dāng)一個(gè)類被調(diào)用的時(shí)候,它的初始化過(guò)程是怎么樣的呢?

  當(dāng)一個(gè)類被實(shí)例化的時(shí)候,它的初始化過(guò)程又是怎樣的呢?

  為什么static方法不能未經(jīng)對(duì)象就調(diào)用非static方法?

  下面我們通過(guò)例子來(lái)找出答案。

 

當(dāng)該類沒(méi)有父類時(shí)  測(cè)試代碼:  
public class ClassLoadingTest {    static String staticString=getStaticString();    //靜態(tài)成員變量    PRivate String privateString=getPrivateString();//普通成員變量    public ClassLoadingTest() {        System.out.println("Loading ClassLoadingTest()");    }    public static void loadStaticMethod() {        System.out.println("Loading static method");    }        private void loadNotStaticMethed(){        System.out.println("Loading NotStaticMethed");    }        private String getPrivateString() {        String string=new String("Loading private variable");        System.out.println(string);        return string;    }    private static String getStaticString() {        String string=new String("Loading static variable");        System.out.println(string);        return string;    }        public static void main(String[] args) {        loadStaticMethod();    //加載靜態(tài)方法        System.out.println("try to new ClassLoadingTest()");        ClassLoadingTest test=new ClassLoadingTest();        test.loadNotStaticMethed();//加載普通方法    }}
  打印結(jié)果:  
     Loading static variable   Loading static method   try to new ClassLoadingTest()   Loading private variable   Loading ClassLoadingTest()   Loading NotStaticMethed          

  分析結(jié)果:
    1. 當(dāng)調(diào)用該類的某個(gè)靜態(tài)方法時(shí),首先加載該類的靜態(tài)成員變量和靜態(tài)方法(此時(shí)類還沒(méi)有實(shí)例化)
    2. 當(dāng)new該類之后,會(huì)加載該類的普通成員變量,然后才是構(gòu)造方法。
  得出結(jié)論:

    當(dāng)一個(gè)類沒(méi)有父類的時(shí)候,加載順序?yàn)椋?/p>

    靜態(tài)成員變量/靜態(tài)方法-->開始實(shí)例化-->普通成員變量/普通方法-->構(gòu)造方法-->實(shí)例化結(jié)束。

當(dāng)該類有父類的時(shí):  測(cè)試代碼:

    父類:

public class ClassLoadingTestSuper {    static String staticString=getSuperStaticString();        //父類的靜態(tài)成員變量    private String privateString=getSuperPrivateString();    //父類的普通成員變量    public ClassLoadingTestSuper() {        System.out.println("Loading ClassLoadingTestSuper()");    }        private String getSuperPrivateString() {        String string=new String("Loading super class private variable");        System.out.println(string);        return string;    }    private static String getSuperStaticString() {        String string=new String("Loading super class static variable");        System.out.println(string);        return string;    }}

    子類:

public class ClassLoadingTest extends ClassLoadingTestSuper {/*內(nèi)容與ClassLoadingTest相同*/}
  打印結(jié)果:
Loading super class static variableLoading static variableLoading static methodtry to new ClassLoadingTest()Loading super class private variableLoading ClassLoadingTestSuper()Loading private variableLoading ClassLoadingTest()Loading NotStaticMethed
  分析結(jié)果:
    1. 首先加載的是父類的static變量和方法;
    2. 然后加載的是該類的static變量和方法;
    3. 將該類實(shí)例化;
    4. 然后加載的是父類的普通成員變量和方法;
    5. 然后加載的是父類的構(gòu)造方法;
    6. 然后加載的是該類的成員變量和方法;
    7. 然后加載的才是該類的構(gòu)造方法;
    8. 最后實(shí)例化結(jié)束,外部才可以操作該對(duì)象。

  得出結(jié)論:

    當(dāng)該類有父類的時(shí)候,類的實(shí)例化的加載過(guò)程是:

      父類的static成員變量和方法-->該類的static變量和方法-->開始實(shí)例化-->父類的普通成員變量和方法-->父類的構(gòu)造方法-->該類的普通成員變量和方法-->該類的構(gòu)造方法-->實(shí)例化結(jié)束。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 高平市| 孟津县| 西盟| 大埔县| 英吉沙县| 扶余县| 浦江县| 普定县| 隆林| 紫云| 淳安县| 鸡东县| 西青区| 交口县| 古浪县| 乐山市| 禹州市| 太仓市| 手游| 凯里市| 金门县| 岱山县| 积石山| 威远县| 盐源县| 融水| 沙湾县| 娄底市| 汝阳县| 塔河县| 宁陵县| 德安县| 清苑县| 江川县| 内乡县| 寿光市| 河源市| 榆中县| 原平市| 翼城县| 渭源县|