Java基礎(chǔ)之this關(guān)鍵字的使用
一、this關(guān)鍵字的作用
this關(guān)鍵字除了可以強(qiáng)調(diào)本類中的方法還具有以下作用。
1.表示類中的屬性
2.可以使用關(guān)鍵字調(diào)用本類中的構(gòu)造方法
3.this表示當(dāng)前對(duì)象
1.1表示類中的屬性
package thiss; class Person{ private int age; private String name; public Person(int age,String name){ this.age=age;//為類中的age屬性賦值 this.name=name;//為類中的name屬性賦值 } public String getinfo(){ return "姓名為:"+name+","+"年齡為:"+age; } } public class ThisDemo { public static void main(String[] args) { Person person = new Person(15,"張三"); person.getinfo(); System.out.println(person.getinfo()); } }
1.2使用this調(diào)用構(gòu)造方法
如果在一個(gè)類中有多個(gè)構(gòu)造方法,也可以使用this調(diào)用構(gòu)造方法。使用this()調(diào)用構(gòu)造方法,此語句必須放在構(gòu)造方法的第一行。
package thiss; class Person1{ private int age; private String name; public Person1(){//無參構(gòu)造方法 } public Person1(String name){//一個(gè)參數(shù)的構(gòu)造方法 this();//調(diào)用無參構(gòu)造方法 this.name=name; } public Person1(int age,String name){//含有兩個(gè)參數(shù)的構(gòu)造方法 this(name);//調(diào)用含有一個(gè)參數(shù)的構(gòu)造方法 this.age=age; } public String getinfo(){ return "姓名為:"+name+","+"年齡為:"+age; } } public class ThisDemo01 { public static void main(String[] args) { Person1 person = new Person1 (15,"張三");//調(diào)用構(gòu)造方法實(shí)例化對(duì)象并初始化成員屬性。 person.getinfo(); System.out.println(person.getinfo());//調(diào)用方法輸出年齡和姓名。 } }
在使用this()調(diào)用構(gòu)造方法的時(shí)候,至少有一個(gè)構(gòu)造方法是不用this()調(diào)用的。
構(gòu)造方法出現(xiàn)遞歸調(diào)用:recursive constructor invocation//避免出現(xiàn)遞歸調(diào)用,如下面代碼所示
package thiss; class Person1{ private int age; private String name; public Person1(){//無參構(gòu)造方法 **this("李四",10);//這樣會(huì)出現(xiàn)遞歸調(diào)用,編譯都不能通過** } public Person1(String name){//一個(gè)參數(shù)的構(gòu)造方法 this();//調(diào)用無參構(gòu)造方法 this.name=name; } public Person1(int age,String name){//含有兩個(gè)參數(shù)的構(gòu)造方法 this(name);//調(diào)用含有一個(gè)參數(shù)的構(gòu)造方法 this.age=age; } public String getinfo(){ return "姓名為:"+name+","+"年齡為:"+age; } } public class ThisDemo01 { public static void main(String[] args) { Person1 person = new Person1 (15,"張三");//調(diào)用構(gòu)造方法實(shí)例化對(duì)象并初始化成員屬性。 person.getinfo(); System.out.println(person.getinfo());//調(diào)用方法輸出年齡和姓名。 } }
1.3可以使用this表示當(dāng)前對(duì)象
package thiss; class Person2 { public String getinfo() { System.out.println("Person類的對(duì)象---》" + this); return null; } } public class ThisDemo02 { public static void main(String[] args) { Person2 person = new Person2();//調(diào)用構(gòu)造方法實(shí)例化對(duì)象 System.out.println("輸出main中的對(duì)象---》" + person);//輸出person中的對(duì)象 person.getinfo();//調(diào)用Person2中的對(duì)象是否和main中的對(duì)象相同 } }
E:\Java\jdk\bin\java.exe “-javaagent:E:\Java\IDEA\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar=58205:E:\Java\IDEA\IntelliJ IDEA 2019.1.3\bin” -Dfile.encoding=UTF-8 -classpath E:\Java\jdk\jre\lib\charsets.jar;E:\Java\jdk\jre\lib\deploy.jar;E:\Java\jdk\jre\lib\ext\access-bridge-64.jar;E:\Java\jdk\jre\lib\ext\cldrdata.jar;E:\Java\jdk\jre\lib\ext\dnsns.jar;E:\Java\jdk\jre\lib\ext\jaccess.jar;E:\Java\jdk\jre\lib\ext\jfxrt.jar;E:\Java\jdk\jre\lib\ext\localedata.jar;E:\Java\jdk\jre\lib\ext\nashorn.jar;E:\Java\jdk\jre\lib\ext\sunec.jar;E:\Java\jdk\jre\lib\ext\sunjce_provider.jar;E:\Java\jdk\jre\lib\ext\sunmscapi.jar;E:\Java\jdk\jre\lib\ext\sunpkcs11.jar;E:\Java\jdk\jre\lib\ext\zipfs.jar;E:\Java\jdk\jre\lib\javaws.jar;E:\Java\jdk\jre\lib\jce.jar;E:\Java\jdk\jre\lib\jfr.jar;E:\Java\jdk\jre\lib\jfxswt.jar;E:\Java\jdk\jre\lib\jsse.jar;E:\Java\jdk\jre\lib\management-agent.jar;E:\Java\jdk\jre\lib\plugin.jar;E:\Java\jdk\jre\lib\resources.jar;E:\Java\jdk\jre\lib\rt.jar;E:\Java\project\out\production\Demo01 thiss.ThisDemo02
輸出main中的對(duì)象—》thiss.Person2@4554617c
Person類的對(duì)象—》thiss.Person2@4554617c
Process finished with exit code 0
1.4比較兩個(gè)對(duì)象是否相同
class Person{ // 定義Person類 private String name ; // 姓名 private int age ; // 年齡 public Person(String name,int age){ this.setName(name) ; this.setAge(age) ; } public boolean compare(Person per){ // 調(diào)用此方法時(shí)里面存在兩個(gè)對(duì)象:當(dāng)前對(duì)象、傳入的對(duì)象 Person p1 = this ; // 當(dāng)前的對(duì)象,就表示per1 Person p2 = per ; // 傳遞進(jìn)來的對(duì)象,就表示per2 if(p1==p2){ // 判斷是不是同一個(gè)對(duì)象,用地址比較 return true ; } // 之后分別判斷每一個(gè)屬性是否相等 if(p1.name.equals(p2.name)&&p1.age==p2.age){ return true ; // 兩個(gè)對(duì)象相等 }else{ return false ; // 兩個(gè)對(duì)象不相等 } } public void setName(String name){ // 設(shè)置姓名 this.name = name ; } public void setAge(int age){ // 設(shè)置年齡 this.age = age ; } public String getName(){ return this.name ; } public int getAge(){ return this.age ; } }; public class ThisDemo08{ public static void main(String args[]){ Person per1 = new Person("張三",30) ; // 聲明兩個(gè)對(duì)象,內(nèi)容完全相等 Person per2 = new Person("張三",30) ; // 聲明兩個(gè)對(duì)象,內(nèi)容完全相等 // 直接在主方法中依次取得各個(gè)屬性進(jìn)行比較 if(per1.compare(per2)){ System.out.println("兩個(gè)對(duì)象相等!") ; }else{ System.out.println("兩個(gè)對(duì)象不相等!") ; } } };
到此這篇關(guān)于Java基礎(chǔ)之this關(guān)鍵字的使用的文章就介紹到這了,更多相關(guān)this關(guān)鍵字的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談hibernate中對(duì)象的3種狀態(tài)_瞬時(shí)態(tài)、持久態(tài)、脫管態(tài)
下面小編就為大家?guī)硪黄獪\談hibernate中對(duì)象的3種狀態(tài)_瞬時(shí)態(tài)、持久態(tài)、脫管態(tài)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08java導(dǎo)出csv方法實(shí)現(xiàn)講解
這篇文章主要介紹了java導(dǎo)出csv的方法,客戶要求在項(xiàng)目中有導(dǎo)出CSV文件的功能,并且給出了如何在不知道如何在不知道對(duì)象類型(沒有應(yīng)用泛型)的List中如何得到對(duì)象的屬性值,下面就詳細(xì)說下這個(gè)功能是如何實(shí)現(xiàn)的2013-12-12Java動(dòng)態(tài)修改配置即時(shí)生效的方式WatchService
這篇文章給大家分享了Java動(dòng)態(tài)修改配置即時(shí)生效的方式WatchService的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友可以參考學(xué)習(xí)下。2018-06-06java并發(fā)編程synchronized底層實(shí)現(xiàn)原理
這篇文章主要介紹了java并發(fā)編程synchronized底層實(shí)現(xiàn)原理2022-02-02Linux中使用shell腳本管理Java應(yīng)用程序
在日常開發(fā)和運(yùn)維工作中,管理基于Java的應(yīng)用程序是一項(xiàng)基礎(chǔ)且頻繁的任務(wù),本文將通過一個(gè)示例腳本,展示如何利用Shell腳本簡化這一流程,實(shí)現(xiàn)Java應(yīng)用的一鍵式啟動(dòng)、停止與重啟操作,本腳本不僅提升了工作效率,還確保了操作的標(biāo)準(zhǔn)化與可靠性2024-06-06Java設(shè)計(jì)模式之策略模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
策略模式是對(duì)算法的封裝,把一系列的算法分別封裝到對(duì)應(yīng)的類中,并且這些類實(shí)現(xiàn)相同的接口,相互之間可以替換。接下來通過本文給大家分享Java設(shè)計(jì)模式之策略模式,感興趣的朋友一起看看吧2017-08-08Spring Boot項(xiàng)目中定制攔截器的方法詳解
這篇文章主要介紹了Spring Boot項(xiàng)目中定制攔截器的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10