首頁 Java java教程 java中this是什麼意思?

java中this是什麼意思?

Nov 18, 2019 am 11:51 AM
java this

java中this是什麼意思?

this用在類別內部,表示類別實例本身。

this關鍵字是類別內部當中對自己的一個引用,可以方便類別中方法存取自己的屬性。

java中this用法

#1、局部變數和成員變數重名的時候,在方法中使用this表示成員變數以示區分。

class Demo{
    String str = "这是成员变量";
    void fun(String str){
        System.out.println(str);
        System.out.println(this.str);
        this.str = str;
        System.out.println(this.str);
    }
}
public class This{
    public static void main(String args[]){
        Demo demo = new Demo();
        demo.fun("这是局部变量");
    }
}
登入後複製

分析:上面的類別Demo中有一個成員變數str和一個局部變數str(類別方法中的形式參數),很顯然局部變數和成員變數重名,這個時候一般在方法中直接使用str實際上是使用局部變數str,對成員變數str沒有任何影響,此時如果需要對成員變數做點什麼,就必須使用this關鍵字。

有個問題,如果方法中沒有str,那麼在方法中使用成員變數str會是什麼情況呢?實際上是方法內的所有操作都是針對成員變數str的。 java程式設計思想的84頁中間有這樣一句話:如果在方法內部呼叫同一個類別的另一個方法,就不必使用this。同樣,在一個方法中如果沒有局部變數和成員變數同名,那麼在這個方法中使用成員變數也不必使用this,可以執行下面的程式碼看看。

class Demo{
    String str = "这是成员变量";
    void fun(String str1){
        System.out.println(str1);
        System.out.println(str);
    }
}
public class This{
    public static void main(String args[]){
        Demo demo = new Demo();
        demo.fun("这是局部变量");
    }
}
登入後複製

2、this關鍵字把目前物件傳遞給其他方法

這裡有個很經典的例子,就是java程式設計思想的85頁的例子。我們拿出來仔細研究。

class Person{
    public void eat(Apple apple){
        Apple peeled = apple.getPeeled();
        System.out.println("Yummy");
    }
}
class Peeler{
    static Apple peel(Apple apple){
        //....remove peel
        return apple;
    }
}
class Apple{
    Apple getPeeled(){
        return Peeler.peel(this);
    }
}
public class This{
    public static void main(String args[]){
        new Person().eat(new Apple());
    }
}
登入後複製

java中this是什麼意思?

這是我自己的認識,也許不正確,看看書中是怎麼說的:Apple需要呼叫Peeler.peel()方法,他是一個外部的工具方法,將執行由於某種原因而必須放在Apple外部的操作(也許是因為該外部方法要應用於許多不同的類,而你卻不想重複這些程式碼)。為了將其自身傳遞給外部方法,必須使用this關鍵字。

分析:設想一個場景,假如各種水果去皮的工作都是一樣的,只要給我水果,我都用同樣的方法去皮。那麼結合上面的例子,傳進來一個水果,我們吃之前getPeeled(),必​​須將此水果作為參數傳遞給外部的peel(),用this來代表自身傳遞給外部方法。

3、當需要傳回目前物件的參考時,就常常在方法寫return this;

這種做法的好處是:當你使用一個物件調用該方法,此方法返回的是經過修改後的對象,且又能使用該對像做其他的操作。因此很容易對一個物件進行多次操作。

public class This{
    int i = 0;
    This increment(){
        i += 2;
        return this;
    }
    void print(){
        System.out.println("i = " + i);
    }
    public static void main(String args[]){
        This x = new This();
        x.increment().increment().print();
    }
}
登入後複製

結果為:

4
登入後複製

4、在建構器中呼叫建構器需要使用this

一個類別有許多建構函數,有時想在一個建構函數中呼叫其他建構函數,以避免程式碼重複,可以使用this關鍵字。在java程式設計思想中有這樣一段話:通常寫this的時候,都是指“這個物件”或“當前物件”,而且它本身表示對目前物件的引用。在建構器中,如果為this添加了參數列表,那麼就有不同的意義。這將產生對符合此參數清單的某個建構器的明確呼叫;這樣呼叫其他建構函式就有了直接的途徑。

java中this是什麼意思?

仔細分析:

從主函數開始,new Flower()會在記憶體分配空間,初始化對象,初始化物件是呼叫建構函數,這裡沒有寫任何參數,當然是呼叫預設建構函數,就是那個無參的構函數。

這個無參的建構函數的第一行程式碼就是this("hi",122);這裡的意思是該無參構造函數又去呼叫帶兩個參數的建構函數,來到帶兩個參數的建構函數,第一行程式碼是this(s);這行程式碼自動匹配帶一個參數的建構函數,發現Flower(String ss)這個比較匹配,都是String類型的參數。

接著呼叫了有一個String型別參數的建構函數,印出:只有String型別的參數的建構子  s = hi;然後回到上一層呼叫函數,就是帶有兩個參數的建構函數,列印輸出:有String和int型別的參數的建構子;再回到上一級,就是無參建構函數,印出:預設建構子

此時建構函數已經初始化完成新建的對象,最後在主函數的最後一行程式碼中列印:petalCount=122  s=hi

畫個圖看得更明白。

java中this是什麼意思?

有幾點要注意:

1,this只可以呼叫一個建構器,在一個建構器中不能同時呼叫兩個構造器;

2,必須將你所呼叫的構造器放在最開始的位置,這也解釋了為什麼不能在一個構造函數中呼叫兩個構造器,那麼第二個勢必不在最開始位置。

3,本例中在有兩個參數的建構函式中可以用this呼叫其他任一個只有一個參數的建構函數,這取決你自己,隨便調哪一個都可以。

4,在建構函式以外的方法內不能使用this呼叫建構函式。程式碼裡面註解的都不能正確編譯。

this總結

1、表示對目前物件的參考!

2、表示用類別的成員變量,而非函數參數。

3、用於在建構方法中引用滿足指定參數類型的建構器(其實也就是建構方法)。但是這裡必須非常注意:只能引用一個建構方法且必須位於開始!

4、很明顯this不能用在static方法中,因為this指涉當前對象,而static則無對象之說。

php中文網,大量的免費Java入門教學,歡迎線上學習!

以上是java中this是什麼意思?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

如何在Spring Tool Suite中運行第一個春季啟動應用程序? 如何在Spring Tool Suite中運行第一個春季啟動應用程序? Feb 07, 2025 pm 12:11 PM

Spring Boot簡化了可靠,可擴展和生產就緒的Java應用的創建,從而徹底改變了Java開發。 它的“慣例慣例”方法(春季生態系統固有的慣例),最小化手動設置

See all articles