Java中的this關(guān)鍵字-創(chuàng)新互聯(lián)

一、this關(guān)鍵字是干什么的?

首先,先看一段簡(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à)格咨詢:18980820575
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 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é)
  1. this關(guān)鍵字可以用來訪問本類的屬性、方法、構(gòu)造器。(上面的內(nèi)容就是this訪問本類的屬性)
  2. //有關(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。
        }
    }

  3. this可以用去區(qū)分當(dāng)前類的屬性和局部變量。(上面解決命名問題,就是區(qū)分了屬性和局部變量)
  4. this訪問成員方法:this.方法名(參數(shù)列表);
  5. 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();
        }
    }
  6. this訪問構(gòu)造器:this(參數(shù)列表); 但是!這個(gè)方式只能在構(gòu)造器里面使用,即只能在構(gòu)造器中通過this去調(diào)用另一個(gè)構(gòu)造器,在普通的方法中用this去訪問構(gòu)造器會(huì)報(bào)錯(cuò)。(注意:如果要在一個(gè)構(gòu)造器中訪問另一個(gè)構(gòu)造器,這條語句必須放在構(gòu)造器中的第一行!即this("jack", 100);這行語句必須放在構(gòu)造器中的第一行)。
  7. 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)造器......");
        }
    }
  8. this不能再類定義的外面使用,只能在類定義的方法中使用。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

新聞名稱:Java中的this關(guān)鍵字-創(chuàng)新互聯(lián)
當(dāng)前URL:http://muchs.cn/article20/dhgpco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、企業(yè)建站、網(wǎng)站制作、軟件開發(fā)、響應(yīng)式網(wǎng)站、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)