亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2023年12月07日 11:37:25   作者:小扳  
this關(guān)鍵字用于引用當前對象的引用,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)鍵字有以下作用

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

二、用于區(qū)分局部變量和成員變量,當局部變量和成員變量同名時,使用 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ù)就近原則,這就只能訪問到當前子類的 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)造器。當然如果存在靜態(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ū)ο缶幊讨?,類的一個具體對象。當一個類被實例化(創(chuàng)建對象)時,就會產(chǎn)生一個該類的實例。這個實例擁有類定義的屬性和方法,可以在程序中被調(diào)用和操作。實例化一個類就是創(chuàng)建該類的一個對象。例如,如果有一個叫做 Car 的類,那么當創(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();
    }
}

詳細對以上代碼進行分析:當 new Z()  用子類對創(chuàng)建對象時,先會執(zhí)行父類靜態(tài)的成員變量、方法,到子類的靜態(tài)成員變量、方法。當然這里沒有出現(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)文章

  • 新手入門Jvm-- JVM對象創(chuàng)建與內(nèi)存分配機制

    新手入門Jvm-- JVM對象創(chuàng)建與內(nèi)存分配機制

    JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的
    2021-06-06
  • logback標記日志過濾器MarkerFilter源碼解讀

    logback標記日志過濾器MarkerFilter源碼解讀

    這篇文章主要為大家介紹了logback標記日志過濾器MarkerFilter源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • javaWeb傳收參數(shù)方式總結(jié)示例分析

    javaWeb傳收參數(shù)方式總結(jié)示例分析

    這篇文章主要為大家介紹了javaWeb傳收參數(shù)方式總結(jié)示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Spring Security在標準登錄表單中添加一個額外的字段

    Spring Security在標準登錄表單中添加一個額外的字段

    這篇文章主要介紹了Spring Security在標準登錄表單中添加一個額外的字段,我們將重點關(guān)注兩種不同的方法,以展示框架的多功能性以及我們可以使用它的靈活方式。 需要的朋友可以參考下
    2019-05-05
  • Java設(shè)計模式七大原則之開閉原則詳解

    Java設(shè)計模式七大原則之開閉原則詳解

    開閉原則,又稱為OCP原則,即一個軟件實體如類,模塊和函數(shù)應(yīng)該對擴展開放,對修改關(guān)閉。本文將詳細介紹Java設(shè)計模式七大原則之一的開閉原則,需要的可以參考一下
    2022-02-02
  • Java線程取消的三種方式

    Java線程取消的三種方式

    文章介紹了 Java 線程取消的 3 種方式,不推薦使用 stop 方法和 volatile 設(shè)標記位停止線程,線程中斷機制是協(xié)作式的,一個線程請求中斷,另一線程響應(yīng),線程可檢查自身中斷狀態(tài)或捕獲 InterruptedException 來合適處理以響應(yīng)中斷,確保安全有序停止,避免資源泄露等問題
    2024-12-12
  • 參數(shù)校驗Spring的@Valid注解用法解析

    參數(shù)校驗Spring的@Valid注解用法解析

    這篇文章主要介紹了參數(shù)校驗Spring的@Valid注解用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 解析Java圖形化編程中的文本框和文本區(qū)

    解析Java圖形化編程中的文本框和文本區(qū)

    這篇文章主要介紹了Java圖形化編程中的文本框和文本區(qū),是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • 解決java調(diào)用dll報Unable to load library錯誤的問題

    解決java調(diào)用dll報Unable to load library錯誤的問題

    這篇文章主要介紹了解決java調(diào)用dll報Unable to load library錯誤的問題。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題

    完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題

    這篇文章主要介紹了完美解決SpringCloud-OpenFeign使用okhttp替換不生效問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論