国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java關(guān)鍵字this、super使用總結(jié)

2019-11-15 00:23:44
字體:
供稿:網(wǎng)友
java關(guān)鍵字this、super使用總結(jié)作者:熔巖日期:2007-03-01MSN :leizhimin@126.com聲明:原創(chuàng)作品,未經(jīng)授權(quán),謝絕轉(zhuǎn)載!好久沒有對所學(xué)知識(shí)做總結(jié)了,發(fā)現(xiàn)好多都生疏了,為了鞏固基礎(chǔ),對就知識(shí)做一個(gè)系統(tǒng)的總結(jié),如有不完善或不正確的地方,還請各位廣開言論,共同進(jìn)步!Java關(guān)鍵字this、super使用總結(jié)一、this Java關(guān)鍵字this只能用于方法方法體內(nèi)。當(dāng)一個(gè)對象創(chuàng)建后,Java虛擬機(jī)(JVM)就會(huì)給這個(gè)對象分配一個(gè)引用自身的指針,這個(gè)指針的名字就是this。因此,this只能在類中的非靜態(tài)方法中使用,靜態(tài)方法和靜態(tài)的代碼塊中絕對不能出現(xiàn)this,這在“Java關(guān)鍵字static、final使用總結(jié)”一文中給出了明確解釋。并且this只和特定的對象關(guān)聯(lián),而不和類關(guān)聯(lián),同一個(gè)類的不同對象有不同的this。下面給出一個(gè)使用this的綜合實(shí)例,以便說明問題:package org.leizhimin;public class Test6 {PRivate int number;private String username;private String passWord;private int x = 100;public Test6(int n) {number = n; // 這個(gè)還可以寫為: this.number=n;}public Test6(int i, String username, String password) {// 成員變量和參數(shù)同名,成員變量被屏蔽,用"this.成員變量"的方式訪問成員變量.this.username = username;this.password = password;}// 默認(rèn)不帶參數(shù)的構(gòu)造方法public Test6() {this(0, "未知", "空"); // 通過this調(diào)用另一個(gè)構(gòu)造方法}public Test6(String name) {this(1, name, "空"); // 通過this調(diào)用另一個(gè)構(gòu)造方法}public static void main(String args[]) {Test6 t1 = new Test6();Test6 t2 = new Test6("游客");t1.outinfo(t1);t2.outinfo(t2);}private void outinfo(Test6 t) {System.out.println("-----------");System.out.println(t.number);System.out.println(t.username);System.out.println(t.password);f(); // 這個(gè)可以寫為: this.f();}private void f() {// 局部變量與成員變量同名,成員變量被屏蔽,用"this.成員變量"的方式訪問成員變量.int x;x = this.x++;System.out.println(x);System.out.println(this.x);}//返回當(dāng)前實(shí)例的引用private Test6 getSelf() {return this;}}運(yùn)行結(jié)果如下:-----------0未知空100101-----------0游客空100101看著上面的例子,說明在什么情況下需要用到this: 第一、通過this調(diào)用另一個(gè)構(gòu)造方法,用發(fā)是this(參數(shù)列表),這個(gè)僅僅在類的構(gòu)造方法中,別的地方不能這么用。 第二、函數(shù)參數(shù)或者函數(shù)中的局部變量和成員變量同名的情況下,成員變量被屏蔽,此時(shí)要訪問成員變量則需要用“this.成員變量名”的方式來引用成員變量。當(dāng)然,在沒有同名的情況下,可以直接用成員變量的名字,而不用this,用了也不為錯(cuò),呵呵。 第三、在函數(shù)中,需要引用該函所屬類的當(dāng)前對象時(shí)候,直接用this。 其實(shí)這些用法總結(jié)都是從對“this是指向?qū)ο蟊旧淼囊粋€(gè)指針”這句話的更深入的理解而來的,死記不然容易忘記而且容易搞錯(cuò),要理解!二、super super關(guān)鍵和this作用類似,是被屏蔽的成員變量或者成員方法或變?yōu)榭梢姡蛘哒f用來引用被屏蔽的成員變量和成員成員方法。不過super是用在子類中,目的是訪問直接父類中被屏蔽的成員,注意是直接父類(就是類之上最近的超類)。下面是一個(gè)綜合運(yùn)用super的例子,有兩個(gè)類:一個(gè)Father類,一個(gè)Father類的子類Son,通過這兩個(gè)類完全演示了super的用法,一下是代碼:package org.leizhimin;public class Father {public String v="Father";public String x="輸出了Father類的public成員變量x!!!";public Father() {System.out.println("Father構(gòu)造方法被調(diào)用!");}public Father(String v){this.v="Father類的帶參數(shù)構(gòu)造方法!運(yùn)行了.";}public void outinfo(){System.out.println("Father的outinfo方法被調(diào)用");}public static void main(String[] args) {// TODO 自動(dòng)生成方法存根}}package org.leizhimin;public class Son extends Father{public String v="Son";public Son() {super();//調(diào)用超類的構(gòu)造方法,只能放到第一行.System.out.println("Son無參數(shù)構(gòu)造方法被調(diào)用!");//super();//錯(cuò)誤的,必須放到構(gòu)造方法體的最前面.}public Son(String str){super(str);System.out.println("Son帶參數(shù)構(gòu)造方法被調(diào)用!");}//覆蓋了超類成員方法outinfo()public void outinfo(){System.out.println("Son的outinfo()方法被調(diào)用");}public void test(){String v="哈哈哈哈!";//局部變量v覆蓋了成員變量v和超類變量vSystem.out.println("------1-----");System.out.println(v);//輸出局部變量vSystem.out.println(this.v);//輸出(子類)成員變量vSystem.out.println(super.v);//輸出超類成員變量vSystem.out.println("------2-----");System.out.println(x);//輸出超類成員變量v,子類繼承而來System.out.println(super.x);//輸出超類成員變量vSystem.out.println("------3-----");outinfo();//調(diào)用子類的outinfo()方法this.outinfo();//調(diào)用子類的outinfo()方法super.outinfo();//調(diào)用父類的outinfo()方法}public static void main(String[] args) {new Son().test();}}子類Son運(yùn)行結(jié)果:Father構(gòu)造方法被調(diào)用!Son無參數(shù)構(gòu)造方法被調(diào)用!------1-----哈哈哈哈!SonFather------2-----輸出了Father類的public成員變量x!!!輸出了Father類的public成員變量x!!!------3-----Son的outinfo()方法被調(diào)用Son的outinfo()方法被調(diào)用Father的outinfo方法被調(diào)用 說明:次例子僅僅為了說明super的用法,實(shí)際在設(shè)計(jì)類的時(shí)候一般都盡可能私有(private)化。通過上面的例子,下面總結(jié)一下super的用法: 第一、在子類構(gòu)造方法中要調(diào)用父類的構(gòu)造方法,用“super(參數(shù)列表)”的方式調(diào)用,參數(shù)不是必須的。同時(shí)還要注意的一點(diǎn)是:“super(參數(shù)列表)”這條語句只能用在子類構(gòu)造方法體中的第一行。 第二、當(dāng)子類方法中的局部變量或者子類的成員變量與父類成員變量同名時(shí),也就是子類局部變量覆蓋父類成員變量時(shí),用“super.成員變量名”來引用父類成員變量。當(dāng)然,如果父類的成員變量沒有被覆蓋,也可以用“super.成員變量名”來引用父類成員變量,不過這是不必要的。 第三、當(dāng)子類的成員方法覆蓋了父類的成員方法時(shí),也就是子類和父類有完全相同的方法定義(但方法體可以不同),此時(shí),用“super.方法名(參數(shù)列表)”的方式訪問父類的方法。this、super的用法也不過這些,只有理解了其中的原理,才不會(huì)跌入陷阱!參考資料Thinking in JavaJava2參考大全還有什么書都不記得了。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀远县| 江山市| 彩票| 永靖县| 阳泉市| 临朐县| 织金县| 阿图什市| 宜丰县| 新余市| 清河县| 巴中市| 宁城县| 黄龙县| 五台县| 民权县| 黔南| 施秉县| 灵丘县| 肃南| 西昌市| 合肥市| 古交市| 东源县| 临夏市| 锡林浩特市| 哈巴河县| 岑巩县| 稷山县| 天祝| 同仁县| 应用必备| 黄梅县| 吴忠市| 深圳市| 姜堰市| 米易县| 类乌齐县| 铜梁县| 房产| 农安县|