成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Java基礎(chǔ)知識(shí)整理之this用法

ZHAO_ / 965人閱讀

摘要:分別使用這四個(gè)構(gòu)造器方法去創(chuàng)建對(duì)象。出口是指的是我們?cè)趧?chuàng)建構(gòu)造器的時(shí)候,不能每一個(gè)構(gòu)造器方法中都使用方法,因?yàn)槿绻慷际褂?,程序?zhí)行的就會(huì)陷入遞歸調(diào)用就會(huì)報(bào)錯(cuò)。在下面的代碼中,我們需要了解的知識(shí)是就是指我們當(dāng)前的調(diào)用的構(gòu)造器方法。

具體內(nèi)容

在 Java 程序中,當(dāng)局部變量全局變量數(shù)據(jù)類(lèi)型和名稱都相同的時(shí),此時(shí)全局變量會(huì)被隱藏而變得不能使用。即:局部變量會(huì)覆蓋掉全局變量。

在 Java 程序中,利用 this 關(guān)鍵字可以顯示類(lèi)屬性的調(diào)用、類(lèi)方法的調(diào)用、表示當(dāng)前對(duì)象。

使用 this 的語(yǔ)法格式如下:

this.成員變量名
this.成員方法名()
this 具體使用 調(diào)用成員變量

Demo.java

// 定義一個(gè)內(nèi)部類(lèi) BookInfo
class BookInfo {
    //  內(nèi)部類(lèi)的屬性
    String title;
    double price;

    //  內(nèi)部類(lèi)的方法
    public void getInfo() {
        // 打印的結(jié)果是當(dāng)前對(duì)象的屬性,是當(dāng)前對(duì)象
        System.out.println("圖書(shū)名稱:" + this.title + ",價(jià)格為:" + this.price);
    }
}

public class Demo {

    public static void main(String[] args) {
        // 實(shí)例化 兩個(gè)BookInfo 的對(duì)象
        BookInfo bookA = new BookInfo();
        BookInfo bookB = new BookInfo();

        // 給 bookA 增加屬性
        bookA.price = 89.8;
        bookA.title = "Java 開(kāi)發(fā)"; // 給 booA 這個(gè)對(duì)象賦值,

        // 給 bookB 增加屬性
        bookB.price = 69.8;
        bookB.title = "JSP 開(kāi)發(fā)"; // 給 booB 這個(gè)對(duì)象賦值
        
        // 分別調(diào)用 getInfo() 方法
        bookA.getInfo();
        bookB.getInfo();
    }
}

控制臺(tái)輸出

圖書(shū)名稱:Java 開(kāi)發(fā),價(jià)格為:89.8
圖書(shū)名稱:JSP 開(kāi)發(fā),價(jià)格為:69.8

說(shuō)明

通過(guò)控制臺(tái)的輸出,可以看到程序上面實(shí)例化的兩個(gè)對(duì)象:bookA、bookB,分別通過(guò) getInfo() 打印出來(lái)的數(shù)據(jù)都是自己的,即在調(diào)用 BookInfo 中的 getInfo() 時(shí),調(diào)用時(shí)候的 this 就是執(zhí)行當(dāng)時(shí)的調(diào)用對(duì)象。例如:當(dāng) bookA 調(diào)用 getInfo() 時(shí),當(dāng)前的 this 就是指的是 bookA。

成員變量的作用域

Demo.java

class BookInfo {
    String title;
    double price;

    public void getInfo() {
        String title = "我是默認(rèn)值";    // 局部變量
        
        // 輸出的結(jié)果也為局部變量
        System.out.println("title 值為:"+ title);  
        
        // 輸出的結(jié)果為全局變量
        System.out.println("圖書(shū)名稱:" + this.title + ",價(jià)格為:" + this.price);     
    }
}

public class Demo {

    public static void main(String[] args) {
        // 實(shí)例化 BookInfo 對(duì)象
        BookInfo bookA = new BookInfo();
        //  給  bookA 增加屬性
        bookA.price = 89.8;
        bookA.title = "Java 開(kāi)發(fā)";

        bookA.getInfo();
    }
}

控制臺(tái)輸出

title 值為:我是默認(rèn)值
圖書(shū)名稱:Java 開(kāi)發(fā),價(jià)格為:89.8

說(shuō)明

如果我們?cè)?BookInfo 類(lèi)中的 getInfo() 方法中,全部都是使用 title,而不是使用 this.title,那么輸出的結(jié)果就全部為 我是默認(rèn)值。 那是因?yàn)槲覀兊亩x了局部變量,如果沒(méi)有 this 關(guān)鍵字去聲明,那么所有的 title 引入的指向都是 當(dāng)前的局部變量。在上面的程序代碼中就是:我是默認(rèn)值。

反過(guò)來(lái)看,當(dāng)我們加上了 this 關(guān)鍵字,就是表示當(dāng)前的對(duì)象,而 this.title 就是指的是我們定義的全局的屬性了。

調(diào)用成員方法 使用傳統(tǒng)的方式

在使用 this 關(guān)鍵字之前,我們先看下傳統(tǒng)的方法。在下面的代碼中有四個(gè)構(gòu)造器方法。分別使用這四個(gè)構(gòu)造器方法去創(chuàng)建對(duì)象。并且輸出結(jié)果。

TestDemo.java

class Emp{
    
    private int empno;
    private String ename;
    private double sal;
    private String dept;
    
    public Emp() {
        this.empno = 0;
        this.ename = "無(wú)名氏";
        this.sal = 0.0;
        this.dept = "無(wú)";
    }
    
    public Emp(int empno){
        this.empno = empno;
        this.ename = "臨時(shí)工";
        this.sal = 200;
        this.dept = "測(cè)試組";
    }
    
    public Emp(int empno, String ename){
        this.empno = empno;
        this.ename = ename;
        this.sal = 2000.0;
        this.dept = "技術(shù)部";
    }
    
    public Emp(int empno, String ename, double sal, String dept){
        this.empno = empno;
        this.ename = ename;
        this.sal = sal;
        this.dept = dept;
    }
    
    public String getInfo() {
        return "雇員編號(hào):" + this.empno + ", 雇員名稱" + this.ename + ", 工資" + this.sal + ",部門(mén)"+ this.dept;
    }
}

public class TestDemo {
    public static void main(String[] args) {
        Emp emp1 = new Emp();
        Emp emp2 = new Emp(2);
        Emp emp3 = new Emp(3, "張三");
        Emp emp4 = new Emp(4, "張三", 5000, "經(jīng)理部");
        
        System.out.println(emp1.getInfo());
        System.out.println(emp2.getInfo());
        System.out.println(emp3.getInfo());
        System.out.println(emp4.getInfo());
        
    }
}

控制臺(tái)輸出

雇員編號(hào):0, 雇員名稱無(wú)名氏, 工資0.0,部門(mén)無(wú)
雇員編號(hào):2, 雇員名稱臨時(shí)工, 工資200.0,部門(mén)測(cè)試組
雇員編號(hào):3, 雇員名稱張三, 工資2000.0,部門(mén)技術(shù)部
雇員編號(hào):4, 雇員名稱張三, 工資5000.0,部門(mén)經(jīng)理部
使用 this 調(diào)用方法

接下來(lái),我們使用 this 來(lái)改寫(xiě),上面的寫(xiě)法肯定不是最優(yōu)的方案。因?yàn)榇嬖诤枚嗟闹貜?fù)性的代碼。然后我們使用 this 來(lái)重構(gòu)。但是在下面的代碼中,需要留有一個(gè) this 出口。
++出口是指的是:我們?cè)趧?chuàng)建構(gòu)造器的時(shí)候,不能每一個(gè) 構(gòu)造器方法中都使用 this() 方法,因?yàn)槿绻慷际褂?,程序?zhí)行的就會(huì)陷入“遞歸調(diào)用” 就會(huì)報(bào)錯(cuò)。++

在下面的代碼中,我們需要了解的知識(shí)是:this() 就是指我們當(dāng)前的調(diào)用的構(gòu)造器方法。

TestDemo.java

package com.wq.study.reference;

class Emp{
    
    private int empno;
    private String ename;
    private double sal;
    private String dept;
    
    public Emp() {
        // 我們通過(guò)使用 this() 方法來(lái)調(diào)用我們的 四參構(gòu)造方法
        this(0, "無(wú)名氏", 0.0, "無(wú)");     // 當(dāng)前一行就可以替換下面的四行代碼
        
        /*由于改寫(xiě),這段代碼就注釋掉
        this.empno = 0;
        this.ename = "無(wú)名氏";
        this.sal = 0.0;
        this.dept = "無(wú)";*/
    }
    
    public Emp(int empno){
        this(empno, "臨時(shí)工", 200, "測(cè)試");    // 在這個(gè)地方我們也使用 this() 方法來(lái)改寫(xiě)
        
        /* 由于改寫(xiě),這段代碼就注釋掉
        this.empno = empno;
        this.ename = "臨時(shí)工";
        this.sal = 200;
        this.dept = "測(cè)試組";*/
    }
    
    public Emp(int empno, String ename){
        this(empno, ename, 2000, "技術(shù)部");    // 同樣我們使用 this() 方法來(lái)改寫(xiě)
        
        /* 由于改寫(xiě),這段代碼就注釋掉
        this.empno = empno;
        this.ename = ename;
        this.sal = 2000.0;
        this.dept = "技術(shù)部";*/
    }
    
    public Emp(int empno, String ename, double sal, String dept){
        // 我們這個(gè)地方留有出口。就不會(huì)導(dǎo)致產(chǎn)生遞歸調(diào)用而報(bào)錯(cuò)
        this.empno = empno;
        this.ename = ename;
        this.sal = sal;
        this.dept = dept;
    }
    
    public String getInfo() {
        return "雇員編號(hào):" + this.empno + ", 雇員名稱" + this.ename + ", 工資" + this.sal + ",部門(mén)"+ this.dept;
    }
}

public class TestDemo {
    public static void main(String[] args) {
        Emp emp1 = new Emp();
        Emp emp2 = new Emp(2);
        Emp emp3 = new Emp(3, "張三");
        Emp emp4 = new Emp(4, "張三", 5000, "經(jīng)理部");
        
        System.out.println(emp1.getInfo());
        System.out.println(emp2.getInfo());
        System.out.println(emp3.getInfo());
        System.out.println(emp4.getInfo());
    }
}

控制臺(tái)輸出

雇員編號(hào):0, 雇員名稱無(wú)名氏, 工資0.0,部門(mén)無(wú)
雇員編號(hào):2, 雇員名稱臨時(shí)工, 工資200.0,部門(mén)測(cè)試
雇員編號(hào):3, 雇員名稱張三, 工資2000.0,部門(mén)技術(shù)部
雇員編號(hào):4, 雇員名稱張三, 工資5000.0,部門(mén)經(jīng)理部

說(shuō)明

從控制臺(tái)的輸出可以看出,這個(gè)兩個(gè)結(jié)果是沒(méi)有區(qū)別的,即說(shuō)明我們改寫(xiě)成功,但是需要有一點(diǎn)說(shuō)明就是一定要在某一個(gè) 構(gòu)造方法中留有出口。

this 表示當(dāng)前對(duì)象

this 表示當(dāng)前的對(duì)象,其實(shí)還是比較好理解。我們通過(guò)以下代碼來(lái)了解。

Demo.java

class BookInfo {
    
    public void getInfo() {
        System.out.println("this ="+ this);
    }
}

public class Demo {

    public static void main(String[] args) {
        BookInfo bookA = new BookInfo();
        System.out.println("bookA:"+bookA);
        bookA.getInfo();
        System.out.println("--------------------");
        BookInfo bookB = new BookInfo();
        System.out.println("bookB:"+bookB);
        bookB.getInfo();
    }
}

控制臺(tái)

bookA: BookInfo@7852e922
this = BookInfo@7852e922
--------------------
bookB: BookInfo@4e25154f
this = BookInfo@4e25154f

說(shuō)明

我們打印出來(lái)的消息可以看到,this 就是當(dāng)前的對(duì)象地址,指的是當(dāng)前的調(diào)用的對(duì)象。

通過(guò)復(fù)雜的代碼理解 this

對(duì)于 this 的理解,我們可以通過(guò)下面的復(fù)雜點(diǎn)的代碼來(lái)理解。代碼上面有詳細(xì)的注釋。大家仔細(xì)看就好了。

class A{
    private B b;    // 將 B 作為私有的成員變量
    public A() {
        this.b = new B(this);    // 2.實(shí)例化對(duì)象b,將當(dāng)前的this(指的是 A)傳遞到B的構(gòu)造器中, 并且將實(shí)例化出來(lái)的 B對(duì)象  給到 A 對(duì)象中的 B(為 A 對(duì)象中的私有成員變量)
        this.b.get();            // 4.通過(guò) b 調(diào)用 get() 方法
    }
    
    public void print() {
        System.out.println("Hello word!");    // 6.打印輸出 Hello word!
    }
}

class B{
    private A a;    // 將 A 作為私有的成員變量
    public B(A a) {
        this.a = a;        // 3.將傳遞過(guò)來(lái)的 A 賦值給 自己的私有變量 A,由于作用域的關(guān)系,this指向的是 B
    }
    
    public void get() {
        this.a.print();        // 5.通過(guò)這個(gè)地方調(diào)用 A的 print()
    }
}

public class Demo {

    public static void main(String[] args) {
        A temp = new A();        // 1.實(shí)例化對(duì)象 A
    }
}
總結(jié)

類(lèi)中的屬性調(diào)用以后都要加上 this

類(lèi)中的構(gòu)造方法間的互相調(diào)用,一定要保留有出口(即存在有一個(gè)構(gòu)造方法沒(méi)有使用 this() )

this 表示當(dāng)前對(duì)象,指的是當(dāng)前正在調(diào)用類(lèi)中的方法的對(duì)象,this 不是一個(gè)固定的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76669.html

相關(guān)文章

  • Java基礎(chǔ)知識(shí)整理static應(yīng)用與總結(jié)

    摘要:導(dǎo)入包注意使用了關(guān)鍵字上面使用了關(guān)鍵字之后,可以直接使用中的方法。通過(guò)關(guān)鍵字調(diào)用有參構(gòu)造方法控制臺(tái)輸出總結(jié)屬性和方法可以再?zèng)]有實(shí)例化對(duì)象的時(shí)候直接由類(lèi)名稱進(jìn)行調(diào)用。屬性保存在全局?jǐn)?shù)據(jù)區(qū)。 前面兩篇分別介紹了static的屬性以及方法。本篇就做一個(gè)收尾,介紹下剩下的。 在之前的總結(jié): 不管多少個(gè)對(duì)象,都使用同一個(gè) static 屬性 使用 static 方法可以避免掉用實(shí)例化方法之后才...

    ytwman 評(píng)論0 收藏0
  • Java基礎(chǔ)知識(shí)整理static修飾屬性

    摘要:屬性聲明雖然是在類(lèi)的結(jié)構(gòu)中,但是并不受到對(duì)象的控制,是獨(dú)立存在的。所修飾的在靜態(tài)數(shù)據(jù)區(qū)。也就是說(shuō),在沒(méi)有產(chǎn)生實(shí)例化對(duì)象的情況下,依然可以使用對(duì)象。 static 關(guān)鍵字,我們?cè)陂_(kāi)發(fā)用的還是比較多的。在《Java編程思想》有下面一段話 static 方法就是沒(méi)有 this 的方法。在 static 方法內(nèi)部不能調(diào)用非靜態(tài)方法,反過(guò)來(lái)是可以的。而且可以在沒(méi)有創(chuàng)建任何對(duì)象的前提下,僅僅通過(guò)類(lèi)...

    張憲坤 評(píng)論0 收藏0
  • Java基礎(chǔ)知識(shí)整理static修飾方法

    摘要:前面一篇已經(jīng)介紹了部分關(guān)于的用法,主要是介紹的是修飾變量的一些知識(shí)。現(xiàn)在的這篇介紹下修飾方法。方法調(diào)用非方法或者屬性錯(cuò)誤的調(diào)用以下的操作都在下面進(jìn)行的。只能調(diào)用屬性或者方法。所有的定于的結(jié)構(gòu)不受實(shí)例化對(duì)象的控制。 前面一篇已經(jīng)介紹了部分關(guān)于 static 的用法,主要是介紹的是 static 修飾變量的一些知識(shí)。現(xiàn)在的這篇介紹下 static 修飾方法。 static 修飾方法 沒(méi)有實(shí)...

    BothEyes1993 評(píng)論0 收藏0
  • Java 總結(jié)

    摘要:中的詳解必修個(gè)多線程問(wèn)題總結(jié)個(gè)多線程問(wèn)題總結(jié)有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升開(kāi)源的運(yùn)行原理從虛擬機(jī)工作流程看運(yùn)行原理。 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 基于 POI 封裝 ExcelUtil 精簡(jiǎn)的 Excel 導(dǎo)入導(dǎo)出 由于 poi 本身只是針對(duì)于 ...

    caspar 評(píng)論0 收藏0
  • 工具使用-積累與發(fā)現(xiàn)

    摘要:一積累中如何快速查看包中的源碼最常用的大開(kāi)發(fā)快捷鍵技巧將對(duì)象保存到文件中從文件中讀取對(duì)象中的用法的配置詳解和代碼的格式詳解格式化內(nèi)容設(shè)置生成詳解注釋規(guī)范中設(shè)置內(nèi)存調(diào)試的小知識(shí)單步執(zhí)行命令的區(qū)別的動(dòng)態(tài)代理機(jī)制詳解內(nèi)容有瑕疵,樓指正泛型繼承的幾 一、積累 1.JAVA Eclipse中如何快速查看jar包中 的class源碼 最常用的15大Eclipse開(kāi)發(fā)快捷鍵技巧 Java將對(duì)象保存到...

    wangjuntytl 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

ZHAO_

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<