最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaSE面試題之this與super關(guān)鍵字的區(qū)別詳解

 更新時間:2023年12月07日 11:37:25   作者:小扳  
this關(guān)鍵字用于引用當(dāng)前對象的引用,super關(guān)鍵字用于引用父類對象的引用,下面這篇文章主要給大家介紹了關(guān)于JavaSE面試題之this與super關(guān)鍵字區(qū)別的相關(guān)資料,需要的朋友可以參考下

1.0 this 與 super 關(guān)鍵字的區(qū)別       

1.1 在Java中,this 關(guān)鍵字有以下作用

一、用于指代當(dāng)前對象的引用,可以在類的方法中使用 this 來訪問當(dāng)前對象的成員變量和方法。

二、用于區(qū)分局部變量和成員變量,當(dāng)局部變量和成員變量同名時,使用 this 關(guān)鍵字可以明確指定使用成員變量。

代碼如下:

public class Problem2 {
    public static void main(String[] args) {
        C c = new C(2);
        System.out.println(c.getX());
    }
}
class C {
    private int x;
    public C(int x) {
        //此處 this 的引用場景
        this.x = x;
    }
    public int getX(){
        return x;
    }
}

三、用于在構(gòu)造方法中調(diào)用其他構(gòu)造方法,可以使用 this 關(guān)鍵字來調(diào)用同一個類中的其他構(gòu)造方法。

代碼如下:

public class Problem2 {
    public static void main(String[] args) {
        //使用了無參構(gòu)造器
        C c = new C();
        System.out.println(c.getX());
    }
}
class C {
    private int x;
    public C(int x) {
        //此處 this 的引用場景
        this.x = x;
    }
    //可以用無參構(gòu)造器來直接調(diào)用兄弟構(gòu)造器
    public C() {
        this(2);
    }
    public int getX(){
        return x;
    }
}

1.2 在Java中,super 關(guān)鍵字有以下作用

一、用于訪問父類的成員變量或方法:在子類中,可以使用 super 關(guān)鍵字來訪問父類中的成員變量或方法,即使子類中有同名的成員變量或方法,也可以通過 super 來訪問父類的成員。

簡單來說,假如子類與父類中沒用同名的成員變量或者方法,用 this 關(guān)鍵字就可以去訪問到父類還有子類的成員變量或者方法;假如子類與父類中有同名的成員變量或者方法,訪問父類的同名的變量或者方法就需要用到 super 關(guān)鍵字了,總的來說,用 this 可以訪問到父類與子類的成員變量與方法,如果存在同名就要另談了。super 就能訪問到父類的成員變量與方法。

代碼如下:

class p {
    public String name = "李四";
    public int age = 10;
}
public class Problem3 extends p {
    //假如子類存在與父類同名,
    //則我們想去訪問父類的 name 就需要用到關(guān)鍵字 super 了。
    public String name = "王五";
    public void fun() {
        //根據(jù)就近原則,這就只能訪問到當(dāng)前子類的 name
        System.out.println(name);

        //用上關(guān)鍵字 super 可以訪問到父類的 name
        System.out.println(super.name);

        //由于子類中沒有與父類中的 age 同名,
        // 所以,可以用 this 關(guān)鍵字,甚至可以不用。
        //目前這三種的效果是一樣的
        System.out.println(age);
        System.out.println(this.age);
        System.out.println(super.age);
    }

    public static void main(String[] args) {
        Problem3 problem3 = new Problem3();
        problem3.fun();
    }
}

運行結(jié)果如下:

二、用于調(diào)用父類的構(gòu)造方法:在子類的構(gòu)造方法中,可以使用 super 關(guān)鍵字來調(diào)用父類的構(gòu)造方法,以初始化父類的成員變量或執(zhí)行父類的初始化操作。(重點)

用子類用創(chuàng)建對象的時候,先要調(diào)用父類的實例,再執(zhí)行父類的構(gòu)造,再到子類的實例,再執(zhí)行子類的構(gòu)造器。當(dāng)然如果存在靜態(tài)變量或者方法,必定是先執(zhí)行靜態(tài)的變量或者方法,先父類的再到子類的。

代碼如下:

public class Problem4 {
    public static void main(String[] args) {
        Son son = new Son(4);
    }
}
class Son extends Father {
    static {
        System.out.println("son::static");
    }
    {
        System.out.println("son::實例");
    }

    public Son(int age) {
        super(age);
        System.out.println("son::構(gòu)造器");
    }
}
class Father {
    public static String name;
    public int age  = 1;
    static {
        System.out.println("father::static");
    }

    {
        System.out.println("father::實例");
    }

    public Father(int age) {
        this.age = age;
        System.out.println("father::構(gòu)造器");
    }
}

運行結(jié)果如下:

需要注意的是,實例代碼塊指的是沒有 static 修飾,必須放在類下。與對象初始化一起加載,即每次調(diào)用構(gòu)造方法都會執(zhí)行,并且在構(gòu)造方法前執(zhí)行。

實例指是是什么呢?

實例指是指在面向?qū)ο缶幊讨校惖囊粋€具體對象。當(dāng)一個類被實例化(創(chuàng)建對象)時,就會產(chǎn)生一個該類的實例。這個實例擁有類定義的屬性和方法,可以在程序中被調(diào)用和操作。實例化一個類就是創(chuàng)建該類的一個對象。例如,如果有一個叫做 Car 的類,那么當(dāng)創(chuàng)建一個特定的 Car 對象時,這個對象就是 Car 類的一個實例。

小結(jié):用子類來創(chuàng)建對象的時候,代碼的執(zhí)行順序為:需要先把父類靜態(tài)成員變量、方法執(zhí)行,再到子類的靜態(tài)的成員變量、方法。再執(zhí)行父類的實例(實例可以簡單粗暴的理解為賦值),父類的構(gòu)造器,最后到子類的實例、子類的構(gòu)造器。需要注意的是靜態(tài)成員變量、方法只會調(diào)用一次。(可以把以上的代碼賦值到編譯器中一步步來調(diào)試,看看代碼執(zhí)行的順序)

三、用于在子類中調(diào)用父類的構(gòu)造方法時,super() 必須是子類構(gòu)造器中的第一條語句。

代碼如下:

同樣的,this() 也必須是構(gòu)造器器中的第一條語句,因此,this() 與 super() 不能同時出現(xiàn)。

2.0 經(jīng)典習(xí)題

如下的代碼最終的輸出結(jié)果是什么?

代碼如下:

class X{
    int b = 10;
    int a = 10;
    public X(){//2
        System.out.print("X");
    }
    Y y=new Y();//1
}
class Y{
    public Y(){//3
        System.out.print("Y");
    }
}
public class Z extends X{
    Y y=new Y();//4
    public Z(){//5
        System.out.print("Z");
    }
    public static void main(String[] args) {
        new Z();
    }
}

詳細(xì)對以上代碼進行分析:當(dāng) new Z()  用子類對創(chuàng)建對象時,先會執(zhí)行父類靜態(tài)的成員變量、方法,到子類的靜態(tài)成員變量、方法。當(dāng)然這里沒有出現(xiàn)相關(guān)的靜態(tài)成員變量、方法。接著到父類的實例為:Y y=new Y();//1 再到父類的構(gòu)造方法,最后到子類的實例為:Y y=new Y();//4 再到子類的構(gòu)造方法。

總的來說,在繼承層次上,先執(zhí)行父類和子類的靜態(tài)的,再執(zhí)行父類的實例,父類的構(gòu)造,最后執(zhí)行子類的實例和子類的構(gòu)造。沒有靜態(tài)的。所以先執(zhí)行1和2,再執(zhí)行4和5。執(zhí)行注釋1和注釋4的時候,分班打印Y。故最終的結(jié)果是YXYZ。

運行結(jié)果為:

總結(jié)

到此這篇關(guān)于JavaSE面試題之this與super關(guān)鍵字區(qū)別詳解的文章就介紹到這了,更多相關(guān)JavaSE this與super關(guān)鍵字區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java BufferedWriter BufferedReader 源碼分析

    Java BufferedWriter BufferedReader 源碼分析

    本文是關(guān)于Java BufferedWriter ,BufferedReader 簡介、分析源碼 對Java IO 流深入了解,希望看到的同學(xué)對你有所幫助
    2016-07-07
  • 提升網(wǎng)絡(luò)請求穩(wěn)定性HttpClient的重試機制深入理解

    提升網(wǎng)絡(luò)請求穩(wěn)定性HttpClient的重試機制深入理解

    這篇文章主要為大家介紹了提升網(wǎng)絡(luò)請求穩(wěn)定性HttpClient的重試機制深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list

    SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list

    這篇文章主要介紹了SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 關(guān)于spring三級緩存的解讀

    關(guān)于spring三級緩存的解讀

    Spring三級緩存解決循環(huán)依賴、AOP和多線程問題,包括singletonObjects、earlySingletonObjects和singletonFactories三層緩存,通過不同方法獲取bean并解決這些問題
    2025-02-02
  • SpringSecurity整合Jwt過程圖解

    SpringSecurity整合Jwt過程圖解

    這篇文章主要介紹了SpringSecurity整合Jwt過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • JDBC連接數(shù)據(jù)庫的方法匯總

    JDBC連接數(shù)據(jù)庫的方法匯總

    這篇文章主要介紹了JDBC連接數(shù)據(jù)庫的方法,結(jié)合實例形式總結(jié)分析了JDBC連接各種常見數(shù)據(jù)庫的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • solr在java中的使用實例代碼

    solr在java中的使用實例代碼

    本篇文章主要介紹了solr在java中的使用實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • springbean的八種加載方式匯總

    springbean的八種加載方式匯總

    這篇文章主要介紹了springbean的八種加載方式,一種是XML方式聲明bean,使用@Component及其衍生注解@Controller?、@Service、@Repository定義bean,還有其他方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Java中的Kotlin?內(nèi)部類原理

    Java中的Kotlin?內(nèi)部類原理

    這篇文章主要介紹了Java中的Kotlin?內(nèi)部類原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Java實現(xiàn)加鹽算法的兩種方法

    Java實現(xiàn)加鹽算法的兩種方法

    數(shù)據(jù)安全是一個重要的問題,本文主要介紹了Java實現(xiàn)加鹽算法的兩種方法,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論

朝阳市| 班戈县| 修文县| 南昌市| 南充市| 宁陵县| 兴宁市| 新源县| 纳雍县| 抚顺县| 清水河县| 阿荣旗| 密云县| 延寿县| 东阳市| 营山县| 金沙县| 临夏市| 电白县| 漳州市| 静安区| 雷波县| 陵川县| 枣强县| 江都市| 沛县| 漾濞| 五指山市| 高清| 南投市| 洛川县| 紫金县| 家居| 历史| 博兴县| 汉寿县| 四会市| 长岭县| 彭泽县| 花垣县| 临海市|