首先,先看一段簡(jiǎn)單的代碼:
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),平果網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:平果等地區(qū)。平果做網(wǎng)站價(jià)格咨詢:18980820575public class This{
public static void main(String[] args){
Dog dog = new Dog("Ruby", 9);
dog.info();
}
}
class Dog{
String name;
int age;
public Dog(String dName, int dAge){ //構(gòu)造器的dName和dAge是局部變量,而不是屬性
name = dName;
age = dAge;
}
public void info(){
sout(name + "and" + "age");
}
}
這是一段簡(jiǎn)單的自定義構(gòu)造器,然后創(chuàng)建對(duì)象并初始化的代碼,最終輸出的結(jié)果是Rubyand9。在構(gòu)造器中我們可以看見為了區(qū)分命名,我們選擇了dName和dAge,但每次都這樣命名是一件很麻煩的事情,尤其是當(dāng)命名的數(shù)量多了之后。因此我們選擇this關(guān)鍵字來解決這個(gè)問題。
另外,如果只是把構(gòu)造器中的內(nèi)容改成name = name和age = age,最后輸出的結(jié)果會(huì)是nulland0。這是因?yàn)樵跇?gòu)造器方法體中的name和age指的是構(gòu)造器形參中的name和age,等于是構(gòu)造器自己把自己賦值了一遍,這里的name和age跟屬性一點(diǎn)關(guān)系都沒有,即并沒有把new Dog()括號(hào)里面的實(shí)參賦值給屬性。然而,在sout中的name和age卻指的是屬性,所以會(huì)出現(xiàn)null和0。
二、理解this要想解決上面提出的命名問題,只需要加上this即可。this.name就是當(dāng)前對(duì)象的屬性name,this.age就是當(dāng)前對(duì)象的屬性age。
public class This{
public static void main(String[] args){
Dog dog = new Dog("Ruby", 9);
dog.info();
}
}
class Dog{
String name;
int age;
public Dog(String name, int age){ //構(gòu)造器
//this.name就是當(dāng)前對(duì)象的屬性name
this.name = name;
//this.age就是當(dāng)前對(duì)象的屬性age
this.age = age;
}
public void info(){
sout(name + "and" + "age");
}
}
Java虛擬機(jī)會(huì)給每個(gè)對(duì)象分配一個(gè)this,用來代表當(dāng)前對(duì)象??梢园裻his關(guān)鍵字看成是對(duì)象隱藏的屬性,從Fig.1中可以看出this關(guān)鍵字就是指向自己對(duì)象,相當(dāng)于一個(gè)指向自己的指針。
Fig.1 this的理解
三、this的細(xì)節(jié)//有關(guān)this訪問屬性的一點(diǎn)細(xì)節(jié)
class T{
String name = "Ricard";
age = 10;
public void f1(){
String name = "smith";
//傳統(tǒng)方式
sout("name=" + name + "age=" + age);
//this方式
sout("name=" + this.name + "age=" + this.age);
//二者的區(qū)別在于:
//傳統(tǒng)方式:就近原則找name和age,如果在方法f1里面又定義了name,則sout里面的name就是f1方法里面的成員變量name,由于沒有定于成員變量age,所以后面的age是找的屬性那個(gè)age,即傳統(tǒng)方法的輸出是name=Smith,age=10。而this方式:就是直接指定了是屬性,sout的name和age找的都是屬性,輸出結(jié)果是name=Ricard,age=10。
}
}
class T{
//this訪問成員方法:this.方法名(參數(shù)列表);
public void f1(){
sout("f1()方法。。。");
}
public void f2(){
sout("f2()方法。。。");
//調(diào)用本類的方法f1
//1.直接調(diào)用
f1();
//2.用this關(guān)鍵字調(diào)用
this.f1();
}
}
class T{
//this訪問構(gòu)造器
public T(){
//訪問T(String name, int age)構(gòu)造器
this("jack", 100);
sout("T()構(gòu)造器......");
}
public T(String name, int age){
sout("T(String name, int age)構(gòu)造器......");
}
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧