一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java this()和super()的使用注意

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

2020-09-08 10:41Java之家 Java教程

這篇文章主要介紹了Java this()和super()的使用注意的相關資料,需要的朋友可以參考下

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

使用super和this應該注意這些:

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

2)super()和this()類似,區別是,super從子類中調用父類的構造方法,this()在同一類內調用其它方法。

3)super()和this()均需放在構造方法內第一行。

4)盡管可以用this調用一個構造器,但卻不能調用兩個。

5)this和super不能同時出現在一個構造函數里面,因為this必然會調用其它的構造函數,其它的構造函數必然也會有super語句的存在,所以在同一個構造函數里面有相同的語句,就失去了語句的意義,編譯器也不會通過。

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

7)從本質上講,this是一個指向本對象的指針, 然而super是一個Java關鍵字。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A{
  public A(String name)
  {
    System.out.println(name);
  }
}
 
class B extends A{
 
  public B(String name) {
    super(name);
  }
   
}

class A中沒有構造無參的構造函數,如果在class B中的構造函數如果沒有調用super(name)將會報錯。

假如我們允許把this 和super放置到任何位置。那么請看下面代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class A{  
  A()  
  {    
    System.out.println("You call super class non-args constructor!"); 
  }
}
 
 
 class B extends A
 {   
  B()   
  {  
    //這里,編譯器將自動加上 super();       
    System.out.println("You call subclass constructor!");   
  }         
  B(String n)    
  {        
    super();        
    this();//ERROR:編譯錯誤
    //實際就是調用了B(){...},而在B(){...}中編譯器自動加上了super();這樣就相當于兩次調用了super();也就是說對父類進行了兩次初始化。而在實例化一個對象時,一個構造方法只能調用一次,這說明this和super不能同時存在一個構造方法中。同時因為系統沒有在第一行發現this()或super()調用,就會自動加上super(),如果沒有將this()和super()放在第一行就會產生矛盾。因為總有一個super()在第二句上。所以該程序不能通過編譯!!! 
  }
 }

也就是說你必須在構造器的第一行放置super或者this構造器,否則編譯器會自動地放一個空參數的super構造器的,其他的構造器也可以調用super或者this,調用成一個遞歸構造鏈,最后的結果是父類的構造器(可能有多級父類構造器)始終在子類的構造器之前執行,遞歸的調用父類構造器。無法執行當前的類的構造器。也就不能實例化任何對象,這個類就成為一個無為類。 

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

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

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

原文鏈接:http://blog.csdn.net/u013256816/article/details/48153581

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好男人资源大全免费观看 | 日韩无遮挡大尺度啪啪影片 | 美女黑人做受xxxxxⅹ | 久久偷拍国2017 | 国产自拍影院 | boobsmilking流奶水野战 | 色悠久久久 | 亚洲 欧美 中文 日韩 视频 | 俄罗斯一级毛片免费播放 | 成人免费高清视频 | 极品丝袜老师h系列全文阅读 | 国产成人91高清精品免费 | 国产精品怡红院在线观看 | 亚洲电影成人 成人影院 | 国产无限免费观看黄网站 | 亚洲男人网 | 久久综合久久伊人 | 91韩国女主播 | a免费看 | 91精品国产9l久久久久 | 国产精品免费观在线 | 国产九九热视频 | 欧美猛男同志同性video | 国产精品全国探花在线观看 | 精品女同同性视频很黄很色 | avtt天堂网 手机资源 | 国产福利在线免费观看 | 羲义嫁密着中出交尾gvg794 | 成人精品第一区二区三区 | 免费一级毛片在线播放放视频 | 小辣椒精品福利视频导航 | 99久久无色码中文字幕 | 国产乱人乱精一区二区视频密 | 日本大尺度动漫在线观看缘之空 | 国产日韩一区二区三区在线播放 | 亚洲电影成人 成人影院 | 日韩久久中文字幕 | 黑帮少爷爱上我第8集最新 荷兰精品女人性hd 和日本免费不卡在线v | 亚洲国产精品第一页 | 236宅宅2021最新理论 | 欧美亚洲第一区 |