欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java關(guān)鍵字this與super詳解用法

 更新時間:2022年04月15日 09:25:29   作者:小老師ir  
這篇文章主要介紹了Java關(guān)鍵字this與super的用法,this與super是類實例化時通往Object類通道的打通者;this和super在程序中由于其經(jīng)常被隱式的使用而被我們忽略,但是理解其作用和使用規(guī)范肯定是必須的。接下來將詳述this與super各自的的作用,需要的朋友可以參考一下

一、this 關(guān)鍵字的使用

1. 概述

this是什么?

在Java中,this關(guān)鍵字比較難理解,它的作用和其詞義很接近,表示“當(dāng)前”的意思。

2. 作用

  • this關(guān)鍵字可以用來修飾、調(diào)用:屬性、方法、構(gòu)造器。
  • this關(guān)鍵字只能在方法內(nèi)部使用。
  • 它在方法內(nèi)部使用,即這個方法所屬對象的引用;
  • 它在構(gòu)造器內(nèi)部使用,表示該構(gòu)造器正在初始化的對象。

3. 使用

什么時候使用this關(guān)鍵字呢?

當(dāng)在方法內(nèi)需要用到調(diào)用該方法的對象時,就用this。具體的:我們可以用this來區(qū)分屬性和局部變量。比如:this.name = name;

3.1 修飾屬性和方法

  • this理解為:當(dāng)前對象或當(dāng)前正在創(chuàng)建的對象
  • 在類的方法中,我們可以使用this.屬性this.方法的方式,調(diào)用當(dāng)前對象屬性或方法。但是,通常情況下,我們都選擇省略this.。特殊情況下,如果方法的形參和類的屬性同名時,我們必須顯式的使用this.變量的方式,表明此變量是屬性,而非形參。
  • 使用this訪問屬性和方法時,如果在本類中未找到,會從父類中查找。

代碼演示:

class Person{ // 定義Person類
    private String name ;
    private int age ;
    public Person(String name,int age){
      this.name = name ; 
      this.age = age ; }
    public void getInfo(){
      System.out.println("姓名:" + name) ;
      this.speak();
    }
    public void speak(){
      System.out.println(“年齡:” + this.age);
    } 
}

3.2 調(diào)用構(gòu)造器

  • 在類的構(gòu)造器中,我們可以使用this.屬性this.方法的方式,調(diào)用當(dāng)前正在創(chuàng)建的對象屬性或方法。但是,通常情況下,我們都選擇省略this.。特殊情況下,如果構(gòu)造器的形參和類的屬性同名時,我們必須顯式的使用this.變量的方式,表明此變量是屬性,而非形參。
  • 我們在類的構(gòu)造器中,可以顯式的使用this(形參列表)的方式,調(diào)用本類中指定的其它構(gòu)造器。
  • 構(gòu)造器中不能通過this(形參列表)方式調(diào)用自身的構(gòu)造器。
  • 如果一個類中有n個構(gòu)造器,則最多有 n - 1個構(gòu)造器中使用了this(形參列表)
  • 規(guī)定:this(形參列表)必須聲明在當(dāng)前構(gòu)造器的首行。
  • 構(gòu)造器內(nèi)部,最多只能聲明一個this(形參列表),用來調(diào)用其它的構(gòu)造器。
  • 除構(gòu)造器之外,編譯器禁止在其它任何方法中調(diào)用構(gòu)造器。

代碼演示:

class Person{ // 定義Person類
   private String name ;
   private int age ;
   public Person(){ // 無參構(gòu)造器
     System.out.println("新對象實例化") ;
   }
   public Person(String name){
     this(); // 調(diào)用本類中的無參構(gòu)造器
     this.name = name ;
   }
   public Person(String name,int age){
     this(name) ; // 調(diào)用有一個參數(shù)的構(gòu)造器
     this.age = age;
   }
   public String getInfo(){
     return "姓名:" + name + ",年齡:" + age ;
   } 
}

3.3 返回當(dāng)前對象

代碼演示:

public class Leaf {
    int i = 0;
    Leaf increment(){
        i++;
        return this;
    }
    void print(){
        System.out.println("i = "+i);
    }
    public static void main(String args[]){
        Leaf x = new Leaf();
        x.increment().increment().increment().print();//i = 3
    }
}

二、super關(guān)鍵字的使用

1. 概述

(1)super理解為:父類的

(2)在Java類中使用super來調(diào)用父類中的指定操作:

  • super可用于訪問父類中定義的屬性。
  • super可用于調(diào)用父類中定義的成員方法。
  • super可用于在子類構(gòu)造器中調(diào)用父類的構(gòu)造器。
  • 尤其當(dāng)子父類出現(xiàn)同名成員時,可以用super表明調(diào)用的是父類中的成員,super的追溯不僅限于直接父類。
  • superthis的用法相像,this代表本類對象的引用,super代表父類的內(nèi)存空間的標(biāo)識。

2. 使用

可以在子類中顯示地調(diào)用父類的結(jié)構(gòu)。

3. 使用

3.1 調(diào)用屬性和方法

  • 我們可以在子類的方法或構(gòu)造器中。通過使用"super.屬性“或”super.方法“的方式,顯式的調(diào)用父類中聲明的屬性或方法。但是,通常情況下,我們習(xí)慣省略”super."。
  • 當(dāng)子類和父類中定義了同名的屬性時,我們要想在子類中調(diào)用父類中聲明的屬性,則必須顯式的使用"super.屬性"的方式,表明調(diào)用的是父類中聲明的屬性。
  • 當(dāng)子類重寫了父類中的方法以后,我們想在子類的方法中調(diào)用父類中被重寫的方法時,則必須顯式的使用"super.方法"的方式,表明調(diào)用的是父類中被重寫的方法。

3.2 調(diào)用構(gòu)造器

(1)子類中所有的構(gòu)造器默認(rèn)都會訪問父類中空參數(shù)的構(gòu)造器。

(2)當(dāng)父類中沒有空參數(shù)的構(gòu)造器時,子類的構(gòu)造器必須通過this(參數(shù)列表)或者super(參數(shù)列表)語句指定調(diào)用本類或者父類中相應(yīng)的構(gòu)造器,否則編譯出錯。同時,只能”二選一”,不能同時出現(xiàn),且必須放在構(gòu)造器的首行。

(3)在類的多個構(gòu)造器中,至少有一個類的構(gòu)造器中使用了"super(形參列表)",調(diào)用父類中的構(gòu)造器。

代碼演示:

public class Person {
    private String name;
    private int age;
    private Date birthDate;
    public Person(String name, int age, Date d) {
       this.name = name;
       this.age = age;
       this.birthDate = d; }
    public Person(String name, int age) {
       this(name, age, null);
    }
    public Person(String name, Date d) {
       this(name, 30, d);
    }
    public Person(String name) {
       this(name, 30);
    } 
}


public class Student extends Person {
    private String school;
    public Student(String name, int age, String s) {
      super(name, age);
      school = s; 
    }
    public Student(String name, String s) {
      super(name);
      school = s; 
    }
// 編譯出錯: no super(),系統(tǒng)將調(diào)用父類無參數(shù)的構(gòu)造器。
    public Student(String s) { 
      school = s; 
    } 
}

三、this和super的區(qū)別

No.區(qū)別點thissuper
1訪問屬性訪問本類中的屬性,如果本類沒有此屬性則從父類中繼續(xù)查找直接訪問父類中的屬性
2調(diào)用方法訪問本類中的方法,如果本類沒有此方法則從父類中繼續(xù)查找直接訪問父類中的方法
3調(diào)用構(gòu)造器調(diào)用本類構(gòu)造器,必須放在構(gòu)造器的首行調(diào)用父類構(gòu)造器,必須放在子類構(gòu)造器的首行

四、子類對象實例化的全過程

(1)從結(jié)果上來看:(繼承性)

  • 子類繼承父類以后,就獲取了父類中聲明的屬性或方法。
  • 創(chuàng)建子類的對象,在堆空間中,就會加載所有父類中聲明的屬性。

(2)從過程上來看:

當(dāng)我們通過子類的構(gòu)造器創(chuàng)建子類對象時,我們一定會直接或間接的調(diào)用其父類的構(gòu)造器,進(jìn)而調(diào)用父類的父類的構(gòu)造器,…直到調(diào)用了java.lang.Object類中空參的構(gòu)造器為止。正因為加載過所有的父類的結(jié)構(gòu),所以才可以看到內(nèi)存中有父類中的結(jié)構(gòu),子類對象才可以考慮進(jìn)行調(diào)用。

(3)明確:雖然創(chuàng)建子類對象時,調(diào)用了父類的構(gòu)造器,但是自始至終就創(chuàng)建過一個對象,即為new的子類對象。

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

相關(guān)文章

  • java使用udp實現(xiàn)簡單多人聊天功能

    java使用udp實現(xiàn)簡單多人聊天功能

    這篇文章主要為大家詳細(xì)介紹了java使用udp實現(xiàn)簡單多人聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • JavaWeb中的常用的請求傳參注解說明

    JavaWeb中的常用的請求傳參注解說明

    這篇文章主要介紹了JavaWeb中的常用的請求傳參注解說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 永久解決idea git log亂碼的問題

    永久解決idea git log亂碼的問題

    這篇文章主要介紹了永久解決idea git log亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • idea2023遠(yuǎn)程調(diào)試springboot的過程詳解

    idea2023遠(yuǎn)程調(diào)試springboot的過程詳解

    這篇文章主要介紹了idea2023遠(yuǎn)程調(diào)試,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Hibernate原理及應(yīng)用

    Hibernate原理及應(yīng)用

    本文主要介紹了Hibernate原理及應(yīng)用。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Springboot消除switch-case過程解析

    Springboot消除switch-case過程解析

    這篇文章主要介紹了Springboot消除switch-case過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Java中List  Set和Map之間的區(qū)別_動力節(jié)點Java學(xué)院整理

    Java中List Set和Map之間的區(qū)別_動力節(jié)點Java學(xué)院整理

    Java集合的主要分為三種類型set集,list列表,map映射,接下來通過本文給大家詳細(xì)介紹java中l(wèi)ist、Set和Map之間的區(qū)別,需要的的朋友參考下吧
    2017-05-05
  • SpringCloud實現(xiàn)灰度發(fā)布的方法步驟

    SpringCloud實現(xiàn)灰度發(fā)布的方法步驟

    本文主要介紹了SpringCloud實現(xiàn)灰度發(fā)布的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java異常分類及統(tǒng)一處理詳解

    Java異常分類及統(tǒng)一處理詳解

    這篇文章主要為大家詳細(xì)介紹了Java異常分類及統(tǒng)一處理,SpringMVC處理異常支持ajax,web.xml配置異常,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Java如何獲取客戶端mac地址

    Java如何獲取客戶端mac地址

    在用戶登錄時,通過獲取IP地址來識別計算機(jī)的MAC地址,然后將用戶賬號與該MAC地址進(jìn)行綁定,確保每個賬號只能在一臺特定的計算機(jī)上登錄,增強(qiáng)系統(tǒng)安全性,這種方法適用于需要嚴(yán)格賬戶安全管理的場景
    2024-09-09

最新評論