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

解析java中super的用法分析

 更新時間:2013年05月21日 16:21:15   作者:  
本篇文章是對java中super的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
昨天寫this用法總結(jié)的時候,突然產(chǎn)生了一個問題,請教別人之后,有了自己的一點(diǎn)認(rèn)識。還是把它寫下來,為大家更好的認(rèn)識提供一點(diǎn)思路。
1)有人寫了個很好的初始化屬性的構(gòu)造函數(shù),而你僅僅想要在其中添加另一些自己新建屬性的初始化,這樣在一個構(gòu)造函數(shù)中調(diào)用另外一個構(gòu)造函數(shù),可以避免重復(fù)的代碼量,減少工作量;
2)在一個構(gòu)造函數(shù)中調(diào)用另外一個構(gòu)造函數(shù)的時候應(yīng)該用的是同一塊內(nèi)存空間,在默認(rèn)的構(gòu)造函數(shù)中先初始化變量,調(diào)用另一個的時候覆寫已經(jīng)初始化的變量的值;
3)整個調(diào)用的過程和遞歸調(diào)用函數(shù)有點(diǎn)類似,不斷充氣球,直到整個氣球膨脹起來,不斷的深層遞進(jìn),遇到停止標(biāo)記,逐層的跳出來。
寫了段代碼,解釋我上面的敘述:
復(fù)制代碼 代碼如下:

class JavanTiger {
     int age;      // 年齡
     int hight;    // 身體高度

     public JavanTiger() {
         print();
         this.age=2;   //這里初始化 age 的值 ,但遞歸返回的時候,這個值會被覆寫
     }

     public JavanTiger(int age) {
         this();      // 調(diào)用自己的第一個構(gòu)造函數(shù),下面的兩個語句數(shù)不執(zhí)行的
         this.age = age;
         print();
     }

     public JavanTiger(int age, int hight) {
         this(age);   // 調(diào)用自己第二個構(gòu)造函數(shù)  ,下面的兩個語句數(shù)不執(zhí)行的
         this.hight = hight;
         print();
     }

     public void print() {  //打印函數(shù)
         System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!");
     }
     public static void main(String[] args) {
         new JavanTiger(3,3);
     }
 }
 //output
 //I'am a 0歲 0尺高 tiger!
 //I'am a 3歲 0尺高 tiger!
 //I'am a 3歲 3尺高 tiger!

個人理解就是這樣了,可能里面還有問題,比如構(gòu)造函數(shù)遞歸調(diào)用和程序函數(shù)遞歸調(diào)用的機(jī)制是否似乎相同的?構(gòu)造函數(shù)同對象一起產(chǎn)生,也就是同時會分配內(nèi)存空間出來,那門這樣的遞歸調(diào)用會不會打亂分配內(nèi)存的順序?希望看到的大牛們拍板,給個最好的解釋。
今天要總結(jié)的是 super 這個關(guān)鍵字的使用,super 在構(gòu)造函數(shù)中出現(xiàn)的時候一般是當(dāng)前這個類繼承了其他的類,super 的出現(xiàn)就是為了調(diào)用父類的構(gòu)造函數(shù),貼段代碼先
復(fù)制代碼 代碼如下:

class Tiger {
     int age; // 年齡
     int hight; // 身體高度

     public Tiger() {
         print();
     }

     public void print() {
         System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!");
     }
 }
 public class JavanTiger extends Tiger {   
     public JavanTiger() {
         super();    // 調(diào)用父類無參數(shù)的構(gòu)造函數(shù)
     }
     public static void main(String[] args) {
         new JavanTiger();
     }
 }

其實(shí)在類JavanTiger 中的構(gòu)造函數(shù)中的 super()可以不寫,JAVA會默認(rèn)調(diào)用父類的無參數(shù)的構(gòu)造函數(shù),但如果父類沒有定義無參數(shù)的構(gòu)造函數(shù),沒有語法錯誤,程序會自動退出,沒有任何打印語句,這時候你需要手動調(diào)用其他父類的構(gòu)造函數(shù),貼段代碼:
復(fù)制代碼 代碼如下:

class Tiger {
     int age; // 年齡
     int hight; // 身體高度

     public Tiger(int age) {
     this.age = age;
     print();
     }
     public void print() {
         System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!");
     }
 }
 public class JavanTiger extends Tiger {   
     public JavanTiger() {
         super(1);    // 調(diào)用父類有參數(shù)的構(gòu)造函數(shù)
     }
     public static void main(String[] args) {
         new JavanTiger();
     }
 }

這段代碼中的 super(1)必須要寫進(jìn)去,否則編譯器會報(bào)錯。所以我簡單的總結(jié)了一下,“this()是調(diào)用自己其他的構(gòu)造函數(shù),super()是調(diào)用自己繼承的父類的構(gòu)造函數(shù)“,如果只想調(diào)用默認(rèn)無參數(shù)的父類構(gòu)造函數(shù),不用在子類的構(gòu)造函數(shù)當(dāng)中寫出來,但是實(shí)際編程的時候,總是會忽略這一點(diǎn)。
那門這兩個關(guān)鍵字能不能同時出現(xiàn)在子類的一個構(gòu)造函數(shù)當(dāng)中納?答案肯定是不能。先說下自己的理解:
1)在新建一個基類的時候,不論遞歸調(diào)用幾次自身的構(gòu)造函數(shù),最終你都會去調(diào)用父類的構(gòu)造函數(shù),(不是顯式調(diào)用的話,系統(tǒng)會調(diào)用默認(rèn)無參數(shù)的父類構(gòu)造函數(shù));
2)JAVA 中規(guī)定使用 this 和 super 時必須放在構(gòu)造函數(shù)第一行,只有一個第一行;

相關(guān)文章

  • 詳解Java中native方法的使用

    詳解Java中native方法的使用

    native是與C++聯(lián)合開發(fā)的時候用的!使用native關(guān)鍵字說明這個方法是原生函數(shù),也就是這個方法是用C/C++語言實(shí)現(xiàn)的,并且被編譯成了DLL,由java去調(diào)用。本文給大家介紹java 中native方法使用,感興趣的朋友一起看看吧
    2020-09-09
  • 關(guān)于Idea創(chuàng)建Java項(xiàng)目并引入lombok包的問題(lombok.jar包免費(fèi)下載)

    關(guān)于Idea創(chuàng)建Java項(xiàng)目并引入lombok包的問題(lombok.jar包免費(fèi)下載)

    很多朋友遇到當(dāng)idea創(chuàng)建java項(xiàng)目時,命名安裝了lombok插件卻不能使用注解,原因有兩個大家可以參考下本文,本文對每種原因分析給出了解決方案,需要的朋友參考下吧
    2021-06-06
  • Mybatis-plus如何提前獲取實(shí)體類用雪花算法生成的ID

    Mybatis-plus如何提前獲取實(shí)體類用雪花算法生成的ID

    本文主要介紹了Mybatis-plus如何提前獲取實(shí)體類用雪花算法生成的ID,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java并發(fā)編程中的Exchanger解析

    Java并發(fā)編程中的Exchanger解析

    這篇文章主要介紹了Java并發(fā)編程中的Exchanger解析,Exchanger用于線程間數(shù)據(jù)的交換,它提供一個同步點(diǎn),在這個同步點(diǎn),兩個線程可以交換彼此的數(shù)據(jù),這兩個線程通過exchange方法交換數(shù)據(jù),如果第一個線程先執(zhí)行exchange()方法,需要的朋友可以參考下
    2023-11-11
  • java 實(shí)現(xiàn)鏈棧存儲的方法

    java 實(shí)現(xiàn)鏈棧存儲的方法

    下面小編就為大家?guī)硪黄猨ava 實(shí)現(xiàn)鏈棧存儲的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java高版本Api在Android中的使用方法詳解

    Java高版本Api在Android中的使用方法詳解

    API(Application?Programming?Interface)應(yīng)用程序編程接口,java?API是一本程序員字典,是JDK提供給我們使用的類的說明文檔,下面這篇文章主要給大家介紹了關(guān)于Java高版本Api在Android中的使用方法,需要的朋友可以參考下
    2022-05-05
  • Java HTTP協(xié)議收發(fā)MQ 消息代碼實(shí)例詳解

    Java HTTP協(xié)議收發(fā)MQ 消息代碼實(shí)例詳解

    這篇文章主要通過實(shí)例代碼為大家詳細(xì)介紹了如何在Java 環(huán)境下使用 HTTP 協(xié)議收發(fā) MQ 消息,需要的朋友可以參考下
    2017-04-04
  • 一篇文章帶你了解Java容器,面板及四大布局管理器應(yīng)用

    一篇文章帶你了解Java容器,面板及四大布局管理器應(yīng)用

    這篇文章主要介紹了JAVA布局管理器與面板組合代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • java中四種操作xml方式的比較

    java中四種操作xml方式的比較

    本文主要介紹了java中四種操作xml的方式并對它們進(jìn)行比較分析。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • java如何判斷一個數(shù)是否是素?cái)?shù)(質(zhì)數(shù))

    java如何判斷一個數(shù)是否是素?cái)?shù)(質(zhì)數(shù))

    這篇文章主要介紹了java如何判斷一個數(shù)是否是素?cái)?shù)(質(zhì)數(shù)),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論