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

Java this()和super()的使用注意

 更新時(shí)間:2017年04月08日 14:38:57   投稿:lqh  
這篇文章主要介紹了Java this()和super()的使用注意的相關(guān)資料,需要的朋友可以參考下

Java this()和super()的使用注意

使用super和this應(yīng)該注意這些:

1)調(diào)用super()必須寫在子類構(gòu)造方法的第一行,否則編譯不通過。每個(gè)子類構(gòu)造方法的第一條語句,都是隱含地調(diào)用super(),如果父類沒有這種形式的構(gòu)造函數(shù),那么在編譯的時(shí)候就會(huì)報(bào)錯(cuò)。

2)super()和this()類似,區(qū)別是,super從子類中調(diào)用父類的構(gòu)造方法,this()在同一類內(nèi)調(diào)用其它方法。

3)super()和this()均需放在構(gòu)造方法內(nèi)第一行。

4)盡管可以用this調(diào)用一個(gè)構(gòu)造器,但卻不能調(diào)用兩個(gè)。

5)this和super不能同時(shí)出現(xiàn)在一個(gè)構(gòu)造函數(shù)里面,因?yàn)閠his必然會(huì)調(diào)用其它的構(gòu)造函數(shù),其它的構(gòu)造函數(shù)必然也會(huì)有super語句的存在,所以在同一個(gè)構(gòu)造函數(shù)里面有相同的語句,就失去了語句的意義,編譯器也不會(huì)通過。

6)this()和super()都指的是對(duì)象,所以,均不可以在static環(huán)境中使用。包括:static變量,static方法,static語句塊。

7)從本質(zhì)上講,this是一個(gè)指向本對(duì)象的指針, 然而super是一個(gè)Java關(guān)鍵字。

為什么this或者super要放到第一行?

this() super()是你如果想用傳入當(dāng)前構(gòu)造器中的參數(shù)或者構(gòu)造器中的數(shù)據(jù)調(diào)用其他構(gòu)造器或者控制父類構(gòu)造器時(shí)使用的,在一個(gè)構(gòu)造器中你只能使用this()或者super()之中的一個(gè),而且調(diào)用的位置只能在構(gòu)造器的第一行,在子類中如果你希望調(diào)用父類的構(gòu)造器來初始化父類的部分,那就用合適的參數(shù)來調(diào)用super(),如果你用沒有參數(shù)的super()來調(diào)用父類的構(gòu)造器(同時(shí)也沒有使用this()來調(diào)用其他構(gòu)造器),父類缺省的構(gòu)造器會(huì)被調(diào)用,如果父類沒有缺省的構(gòu)造器,那編譯器就會(huì)報(bào)一個(gè)錯(cuò)誤。
如下:

class A{ 
  public A(String name) 
  { 
    System.out.println(name); 
  } 
} 
 
class B extends A{ 
 
  public B(String name) { 
    super(name); 
  } 
   
} 

class A中沒有構(gòu)造無參的構(gòu)造函數(shù),如果在class B中的構(gòu)造函數(shù)如果沒有調(diào)用super(name)將會(huì)報(bào)錯(cuò)。

假如我們?cè)试S把this 和super放置到任何位置。那么請(qǐng)看下面代碼:

class A{   
  A()   
  {     
    System.out.println("You call super class non-args constructor!");  
  } 
} 
 
 
 class B extends A 
 {    
  B()    
  {   
    //這里,編譯器將自動(dòng)加上 super();        
    System.out.println("You call subclass constructor!");    
  }          
  B(String n)     
  {         
    super();         
    this();//ERROR:編譯錯(cuò)誤 
    //實(shí)際就是調(diào)用了B(){...},而在B(){...}中編譯器自動(dòng)加上了super();這樣就相當(dāng)于兩次調(diào)用了super();也就是說對(duì)父類進(jìn)行了兩次初始化。而在實(shí)例化一個(gè)對(duì)象時(shí),一個(gè)構(gòu)造方法只能調(diào)用一次,這說明this和super不能同時(shí)存在一個(gè)構(gòu)造方法中。同時(shí)因?yàn)橄到y(tǒng)沒有在第一行發(fā)現(xiàn)this()或super()調(diào)用,就會(huì)自動(dòng)加上super(),如果沒有將this()和super()放在第一行就會(huì)產(chǎn)生矛盾。因?yàn)榭傆幸粋€(gè)super()在第二句上。所以該程序不能通過編譯?。?!  
  } 
 } 

也就是說你必須在構(gòu)造器的第一行放置super或者this構(gòu)造器,否則編譯器會(huì)自動(dòng)地放一個(gè)空參數(shù)的super構(gòu)造器的,其他的構(gòu)造器也可以調(diào)用super或者this,調(diào)用成一個(gè)遞歸構(gòu)造鏈,最后的結(jié)果是父類的構(gòu)造器(可能有多級(jí)父類構(gòu)造器)始終在子類的構(gòu)造器之前執(zhí)行,遞歸的調(diào)用父類構(gòu)造器。無法執(zhí)行當(dāng)前的類的構(gòu)造器。也就不能實(shí)例化任何對(duì)象,這個(gè)類就成為一個(gè)無為類。 

從另外一面說,子類是從父類繼承而來,繼承了父類的屬性和方法,如果在子類中先不完成父類的成員的初始化,則子類無法使用,應(yīng)為在java中不允許調(diào)用沒初始化的成員。在構(gòu)造器中是順序執(zhí)行的,也就是說必須在第一行進(jìn)行父類的初始化。而super能直接完成這個(gè)功能。This()通過調(diào)用本類中的其他構(gòu)造器也能完成這個(gè)功能。

因此,this()或者super()必須放在第一行。

 感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 詳解Java的MyBatis框架中動(dòng)態(tài)SQL的基本用法

    詳解Java的MyBatis框架中動(dòng)態(tài)SQL的基本用法

    這篇文章主要介紹了詳解Java的MyBatis框架中動(dòng)態(tài)SQL的基本用法,文中列出了一些常用SQL動(dòng)態(tài)語句進(jìn)行講解,需要的朋友可以參考下
    2016-04-04
  • SpringBoot多模塊項(xiàng)目框架搭建過程解析

    SpringBoot多模塊項(xiàng)目框架搭建過程解析

    這篇文章主要介紹了SpringBoot多模塊項(xiàng)目框架搭建過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java IO流操作(PipeInputStream、SequenceInputStream、BufferedInputStream)

    Java IO流操作(PipeInputStream、SequenceInputStream、Buffered

    管道流主要用于線程間通信,分為管道輸入流(PipeInputStream)和管道輸出流(PipeOutputStream),本文介紹了如何通過管道流進(jìn)行數(shù)據(jù)發(fā)送和接收,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-10-10
  • maven父工程relativepath標(biāo)簽使用解讀

    maven父工程relativepath標(biāo)簽使用解讀

    文章主要介紹了在使用Maven構(gòu)建父子工程時(shí)如何通過設(shè)置父工程和子工程的pom文件來管理依賴和版本,當(dāng)子工程是Spring Boot項(xiàng)目時(shí),可以通過關(guān)閉`relativePath`標(biāo)簽來繼承Spring Boot的父工程,同時(shí)在父工程中使用`dependencyManagement`標(biāo)簽來統(tǒng)一管理Spring Boot的依賴版本
    2024-11-11
  • log4j控制臺(tái)不打印日志故障的詳細(xì)解決方案

    log4j控制臺(tái)不打印日志故障的詳細(xì)解決方案

    這篇文章主要給大家介紹了關(guān)于log4j控制臺(tái)不打印日志故障的詳細(xì)解決方案,log4j不提供默認(rèn)配置,因?yàn)樵谀承┉h(huán)境中可能禁止輸出到控制臺(tái)或文件系統(tǒng),需要的朋友可以參考下
    2023-08-08
  • java桌球小游戲 小球任意角度碰撞

    java桌球小游戲 小球任意角度碰撞

    這篇文章主要為大家詳細(xì)介紹了java桌球小游戲,小球任意角度碰撞,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例

    Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例

    這篇文章主要介紹了Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例,具有一定借鑒價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • Java反射機(jī)制及Method.invoke詳解

    Java反射機(jī)制及Method.invoke詳解

    這篇文章主要介紹了Java反射機(jī)制及Method.invoke詳解,本文講解了JAVA反射機(jī)制、得到某個(gè)對(duì)象的屬性、得到某個(gè)類的靜態(tài)屬性、執(zhí)行某對(duì)象的方法、執(zhí)行某個(gè)類的靜態(tài)方法等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Java文本文件操作方法實(shí)例詳解

    Java文本文件操作方法實(shí)例詳解

    這篇文章主要介紹了Java文本文件操作方法,以實(shí)例形式較為詳細(xì)的分析了java操作文本文件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 一文帶你學(xué)會(huì)Java網(wǎng)絡(luò)編程

    一文帶你學(xué)會(huì)Java網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程是指編寫運(yùn)行在多個(gè)設(shè)備(計(jì)算機(jī))的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來。這篇文章將帶大家深入了解一下Java的網(wǎng)絡(luò)編程,需要的可以了解一下
    2022-08-08

最新評(píng)論

图们市| 阿拉尔市| 柯坪县| 铜梁县| 镇坪县| 资阳市| 黄平县| 南陵县| 沁水县| 平江县| 白城市| 敖汉旗| 玛沁县| 方山县| 孟州市| 南平市| 永登县| 高雄市| 满城县| 黎城县| 密云县| 阜新市| 平和县| 岑溪市| 仙桃市| 栾川县| 贵州省| 张家界市| 乌兰察布市| 宕昌县| 西丰县| 镇江市| 天祝| 台东市| 嘉黎县| 贵州省| 凤城市| 马公市| 海宁市| 兴仁县| 慈溪市|