欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java關(guān)鍵字之this用法詳解

 更新時間:2023年05月10日 10:32:04   作者:一一哥Sun  
這篇文章將為大家詳細(xì)介紹一下Java關(guān)鍵字this的用法,文中有相關(guān)的代碼示例,希望對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考下

一. this關(guān)鍵字

1. 簡介

我們知道,this是”這個“的意思。在java中表示當(dāng)前類的對象, 可以理解成指向?qū)ο蟊旧淼囊粋€指針 。通俗地說就是表示當(dāng)前類對象”自己“,它是在對象被創(chuàng)建時自動產(chǎn)生的 。 我們使用this,可以用來調(diào)用本類的屬性、方法、構(gòu)造方法。 當(dāng)我們在構(gòu)造方法中使用this時,this表示的是當(dāng)前類的成員變量。

2. 作用

根據(jù)上面的簡介,我們可以提取出this關(guān)鍵字的幾個核心作用:

  • 表示當(dāng)前類對象;
  • 調(diào)用當(dāng)前類中的屬性;
  • 調(diào)用當(dāng)前類的方法或構(gòu)造方法。

二. 代碼案例

接下來分別針對以上幾種情況,給大家設(shè)計(jì)幾個案例進(jìn)行講解。

1. 代表當(dāng)前類對象

所謂代表當(dāng)前類對象,就是指當(dāng)我們創(chuàng)建一個類對象時,比如Person p=new Person();p就是一個類對象,我們可以通過p.屬性p.方法的形式來進(jìn)行調(diào)用。但如果我們是在Person類里面調(diào)用Person的屬性或方法,其實(shí)可以直接使用this來替代當(dāng)前的對象,即this.屬性this.方法。這里的this,就是當(dāng)前類對象!

另外一個更常用的場景是在接口回調(diào)中。比如某個類的構(gòu)造方法帶有一個接口類型的參數(shù),當(dāng)前類又實(shí)現(xiàn)了該接口,當(dāng)我們在當(dāng)前類中調(diào)用這個構(gòu)造方法時,就可以直接傳遞this作為參數(shù)。參考下面的Person代碼:

/**
 * @author 
 */
public class Person implements Sport {
    // 姓名
    public String name;
    // 年齡
    private int age;

    //定義帶有3個參數(shù)的構(gòu)造方法,第3個參數(shù)是自定義的Sport接口類型
    public Person(String name, int age, Sport sport) {
	System.out.println("我的名字是:" + name + ",年齡:" + age);
	sport.pingpang();
    }

    @Override
    public void pingpang() {
	System.out.println("我會打乒乓球");
    }

    // 才藝展示
    public void show() {
        //這里的第3個參數(shù),我們就可以直接用this作為參數(shù),代表當(dāng)前類對象?。?!
        Person p = new Person("馬龍", 30, this);
    }
}

Sport接口代碼參考如下:

/**
 * @author 
 */
public interface Sport {
    //打乒乓球
    void pingpang();
}

在上面的Person類中,我們定義了帶有3個參數(shù)的構(gòu)造方法,其中第3個參數(shù)是自定義的Sport接口類型。在show()方法中,我們調(diào)用Person的構(gòu)造方法,當(dāng)傳遞第3個參數(shù)時,就可以直接用this作為參數(shù)傳遞進(jìn)去。因?yàn)镻erson類實(shí)現(xiàn)了Sport接口,所以Person類也就屬于Sport類型,符合第3個參數(shù)的類型要求。因?yàn)閠his表示當(dāng)前類對象,所以我們可以直接用this作為參數(shù)。

當(dāng)然,這里涉及到了接口的概念和用法,我們還沒有學(xué)習(xí)到。大家先別急,后面會專門給大家講解接口,本案例只是先供大家參考。

2. 調(diào)用類中的屬性

大多數(shù)時候,一般的普通方法訪問其他方法、成員變量時不必使用this關(guān)鍵字。但如果方法的形參與類中屬性的名稱相同,我們可以通過“this.屬性名”的形式進(jìn)行區(qū)分。

/**
 * @author
 */
public class Student {
    private String name;
    private int age;
    private String sex;

    public Student(String name, String sex, int age) {
	//方法的形參與屬性名相同,可以通過“this.屬性名”的形式進(jìn)行區(qū)分
	this.name = name;
	this.sex = sex;
	this.age = age;
    }

    public static void main(String[] args) {
	Student stu=new Student("一一哥", "男", 35);
	System.out.println("name="+stu.name+",sex="+stu.sex+",age="+stu.age);
    }
}

在上面的代碼中,name、age、sex都是被private修飾的,因此我們不能在類的外部進(jìn)行直接設(shè)置。為了解決這個問題,我們可以給Student類添加一個構(gòu)造方法,然后在構(gòu)造方法中傳遞參數(shù)進(jìn)行修改。我們在 Student類的構(gòu)造方法中使用this關(guān)鍵字調(diào)用name、age 和 sex屬性,以此區(qū)分方法的形參。這里的this就表示當(dāng)前對象,this.name=name語句是一個賦值語句。等號左邊的this.name是當(dāng)前對象的成員變量name,等號右邊的name表示方法形參接收的數(shù)值。

3. 調(diào)用類中的方法

this關(guān)鍵字的另一個作用,就是讓類中一個方法,訪問該類里的另一個方法。

/**
 * @author 一一哥Sun 
 */
public class Computer {
    // 電腦品牌
    private String logo;

    // 播放音頻
    public void playSound() {
	System.out.println("播放音頻...");
    }

    // 播放視頻
    public void playVideo() {
	// 同時播放音頻
	this.playSound();
	System.out.println("播放視頻...");
    }
    
    public static void main(String[] args) {
        //靜態(tài)方法中不能使用非靜態(tài)成員
	//this.playVideo();
	Computer com=new Computer();
	com.playVideo();
    }
}

在上面的代碼中,我們在playVideo()方法中調(diào)用了playSound()方法,此時就可以通過”this.方法名“的形式進(jìn)行調(diào)用。因?yàn)閠his可以代表任何對象,當(dāng)this出現(xiàn)在某個方法體中,它所代表的對象是不確定的,但它的類型是確定的,它代表的就是當(dāng)前類的實(shí)例對象。只有當(dāng)這個方法被調(diào)用時,它所代表的對象才被確定下來,誰在調(diào)用這個方法,this 就代表誰。

但是我們不能在帶有static關(guān)鍵詞的方法中通過this.屬性名this.方法名來引用,這是因?yàn)镴ava語法有規(guī)定,靜態(tài)成員不能直接訪問非靜態(tài)成員。在后面學(xué)習(xí)static關(guān)鍵字時,會再給大家詳細(xì)講解這一點(diǎn)!

4. 調(diào)用類的構(gòu)造方法

我們也可以使用this關(guān)鍵字,實(shí)現(xiàn)對構(gòu)造方法的調(diào)用,此時是通過this()這樣的語法格式來實(shí)現(xiàn)的。this()括號中可以有參數(shù),如果有參數(shù)就是在調(diào)用指定的有參構(gòu)造方法。

/**
 * @author 一一哥Sun 
 */
public class Computer {
    // 電腦品牌
    private String logo;
    // 電腦顏色
    private String color;
    
    //無參構(gòu)造方法
    public Computer() {
	// this(a,b)調(diào)用另一個構(gòu)造方法
	this(null, null);
    }

    //1個參數(shù)的構(gòu)造方法
    public Computer(String logo) {
	// this(a,b)調(diào)用另一個構(gòu)造方法
	this(logo, null);
    }

    //2個參數(shù)的構(gòu)造方法
    public Computer(String logo, String color) {
	System.out.println("logo=" + logo + ",color=" + color);
    }

    public static void main(String[] args) {
	Computer com=new Computer("蘋果");
    }
}

大家注意,this()格式不能在普通方法中使用,只能在構(gòu)造方法中使用。而且在構(gòu)造方法中使用時,必須放在第一條語句!

三. 結(jié)語

至此,就給大家把this關(guān)鍵字講解完畢了,現(xiàn)在你知道this的作用了嗎?對于我們來說,掌握this的3個核心作用即可:

  • 表示當(dāng)前類對象;
  • 調(diào)用當(dāng)前類中的屬性;
  • 調(diào)用當(dāng)前類的方法或構(gòu)造方法。

到此這篇關(guān)于Java關(guān)鍵字之this用法詳解的文章就介紹到這了,更多相關(guān)Java關(guān)鍵字this內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA實(shí)現(xiàn) springmvc的簡單注冊登錄功能的示例代碼

    IDEA實(shí)現(xiàn) springmvc的簡單注冊登錄功能的示例代碼

    這篇文章主要介紹了IDEA實(shí)現(xiàn) springmvc的簡單注冊登錄功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Java使用synchronized實(shí)現(xiàn)互斥鎖功能示例

    Java使用synchronized實(shí)現(xiàn)互斥鎖功能示例

    這篇文章主要介紹了Java使用synchronized實(shí)現(xiàn)互斥鎖功能,結(jié)合實(shí)例形式分析了Java使用synchronized互斥鎖功能簡單實(shí)現(xiàn)方法與操作技巧,需要的朋友可以參考下
    2020-05-05
  • 詳解Spring中Bean的作用域與生命周期

    詳解Spring中Bean的作用域與生命周期

    Spring作為當(dāng)前Java最流行、最強(qiáng)大的輕量級框架,受到了程序員的熱烈歡迎。準(zhǔn)確的了解Spring?Bean的作用域與生命周期是非常必要的。這篇文章將問你詳解一下Bean的作用域與生命周期,需要的可以參考一下
    2021-12-12
  • 說說Spring中為何要引入Lookup注解

    說說Spring中為何要引入Lookup注解

    這篇文章主要給大家介紹了關(guān)于Spring中為何要引入Lookup注解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java多線程中常見的幾個問題

    Java多線程中常見的幾個問題

    這篇文章主要介紹了Java多線程中常見的幾個問題 ,需要的朋友可以參考下
    2015-05-05
  • jmeter基本使用小結(jié)

    jmeter基本使用小結(jié)

    jmeter是apache公司基于java開發(fā)的一款開源壓力測試工具,體積小,功能全,使用方便,是一個比較輕量級的測試工具,使用起來非常簡單。本文就簡單的介紹一下如何使用,感興趣的
    2021-11-11
  • Java中的Callable實(shí)現(xiàn)多線程詳解

    Java中的Callable實(shí)現(xiàn)多線程詳解

    這篇文章主要介紹了Java中的Callable實(shí)現(xiàn)多線程詳解,接口Callable中有一個call方法,其返回值類型為V,這是一個泛型,值得關(guān)注的是這個call方法有返回值,這意味著線程執(zhí)行完畢后可以將處理結(jié)果返回,需要的朋友可以參考下
    2023-08-08
  • java方法重載示例

    java方法重載示例

    方法重載是以統(tǒng)一的方式處理不同數(shù)據(jù)類型的一種手段,這篇文章主要介紹了java方法重載示例,需要的朋友可以參考下
    2014-03-03
  • MyBatis-Plus 如何單元測試的實(shí)現(xiàn)

    MyBatis-Plus 如何單元測試的實(shí)現(xiàn)

    這篇文章主要介紹了MyBatis-Plus 如何單元測試的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java編程小實(shí)例—數(shù)字時鐘的實(shí)現(xiàn)代碼示例

    Java編程小實(shí)例—數(shù)字時鐘的實(shí)現(xiàn)代碼示例

    正所謂拳不離手曲不離口,java學(xué)習(xí)的過程中,練習(xí)還是要多一點(diǎn)比較好。接下來分享給大家一個Java編程的小實(shí)例,供朋友們參考。
    2017-10-10

最新評論