国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下)

這篇具有很好參考價(jià)值的文章主要介紹了【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下),筆記,開發(fā)語言,java,intellij-idea

?文章來源地址http://www.zghlxwxcb.cn/news/detail-757793.html

目錄

1、this引用

1.1、為什么要有this引用

1.2、什么是this引用

1.3、?this引用的特性

2、?對(duì)象的構(gòu)造及初始化

2.1、?如何初始化對(duì)象

2.2、構(gòu)造方法

2.2.1、概念?

?2.2.2、特性

?2.3、默認(rèn)初始化

?2.4、就地初始化


【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下),筆記,開發(fā)語言,java,intellij-idea

?

上篇:【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(上)-CSDN博客https://blog.csdn.net/zzzzzhxxx/article/details/134232584?spm=1001.2014.3001.5501

接上篇繼續(xù)對(duì)類和對(duì)象的知識(shí)展開講述。

1、this引用

1.1、為什么要有this引用

先看一個(gè)日期類的例子:?

    public class Date {
        public int year;
        public int month;
        public int day;
        public void setDay(int y, int m, int d){
            year = y;
            month = m;
            day = d;
        }
        public void printDate(){
            System.out.println(year + "/" + month + "/" + day);
        }
        public static void main(String[] args) {
        // 構(gòu)造三個(gè)日期類型的對(duì)象 d1 d2 d3
            Date d1 = new Date();
            Date d2 = new Date();
            Date d3 = new Date();
        // 對(duì)d1,d2,d3的日期設(shè)置
            d1.setDay(2020,9,15);
            d2.setDay(2020,9,16);
            d3.setDay(2020,9,17);
        // 打印日期中的內(nèi)容
            d1.printDate();
            d2.printDate();
            d3.printDate();
        }
    }

以上代碼定義了一個(gè)日期類,然后main方法中創(chuàng)建了三個(gè)對(duì)象,并通過Date類中的成員方法對(duì)對(duì)象進(jìn)行設(shè)置和打印,代碼整體邏輯非常簡(jiǎn)單,沒有任何問題。

但是細(xì)思之下有以下兩個(gè)疑問

1、形參名不小心與成員變量名相同:

    public void setDay(int year, int month, int day){
        year = year;
        month = month;
        day = day;
    }

那函數(shù)體中到底是誰給誰賦值?成員變量給成員變量?參數(shù)給參數(shù)?參數(shù)給成員變量?成員變量參數(shù)?估計(jì)自己都搞不清楚了。

再說了,每次都需要起不同的變量名非常不方便,有沒有一種辦法可以允許我們直接使用相同的變量名,省去繁瑣的起名環(huán)節(jié)?

2、?三個(gè)對(duì)象都在調(diào)用setDate和printDate函數(shù),但是這兩個(gè)函數(shù)中沒有任何有關(guān)對(duì)象的說明,setDate和printDate函數(shù)如何知道打印的是哪個(gè)對(duì)象的數(shù)據(jù)呢?

【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下),筆記,開發(fā)語言,java,intellij-idea

一切讓?this?引用來揭開這層神秘的面紗。?

1.2、什么是this引用

this引用指向當(dāng)前對(duì)象(成員方法運(yùn)行時(shí)調(diào)用該成員方法的對(duì)象),在成員方法中所有成員變量的操作,都是通過該引用去訪問。只不過所有的操作對(duì)用戶是透明的,即用戶不需要來傳遞,編譯器自動(dòng)完成。

    public class Date {
        public int year;
        public int month;
        public int day;
        public void setDay(int year, int month, int day){
            this.year = year;
            this.month = month;
            this.day = day;
        }
        public void printDate(){
            System.out.println(this.year + "/" + this.month + "/" + this.day);
        }
    }

?注意:this引用的是調(diào)用成員方法的對(duì)象。例如當(dāng)調(diào)用a.setDay()是,此時(shí)的this就代指a,如下圖。同理b也一樣。

【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下),筆記,開發(fā)語言,java,intellij-idea

1.3、?this引用的特性

  1. this的類型:對(duì)應(yīng)類類型引用,即哪個(gè)對(duì)象調(diào)用就是哪個(gè)對(duì)象的引用類型
  2. this只能在"成員方法"中使用
  3. 在"成員方法"中,this只能引用當(dāng)前對(duì)象,不能再引用其他對(duì)象
  4. this是“成員方法”第一個(gè)隱藏的參數(shù),編譯器會(huì)自動(dòng)傳遞,在成員方法執(zhí)行時(shí),編譯器會(huì)負(fù)責(zé)將調(diào)用成員方法對(duì)象的引用傳遞給該成員方法,this負(fù)責(zé)來接收。

?在代碼層面來簡(jiǎn)單演示一下隱藏參數(shù)this,注意:下圖右側(cè)中的Date類也是可以通過編譯的

【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下),筆記,開發(fā)語言,java,intellij-idea

2、?對(duì)象的構(gòu)造及初始化

2.1、?如何初始化對(duì)象

通過前面知識(shí)點(diǎn)的學(xué)習(xí)知道,在Java方法內(nèi)部定義一個(gè)局部變量時(shí),必須要初始化,否則會(huì)編譯失敗。

public static void main(String[] args) {
        int a;
        System.out.println(a);
        }
// Error:(26, 28) java: 可能尚未初始化變量a

要讓上述代碼通過編譯,非常簡(jiǎn)單,只需在正式使用a之前,給a設(shè)置一個(gè)初始值即可。如果是對(duì)象:

public static void main(String[] args) {
        Date d = new Date();
        d.printDate();
        d.setDate(2021,6,9);
        d.printDate();
        }
// 代碼可以正常通過編譯

需要調(diào)用之前寫的SetDate方法才可以將具體的日期設(shè)置到對(duì)象中。通過上述例子發(fā)現(xiàn)兩個(gè)問題:

  1. 每次對(duì)象創(chuàng)建好后調(diào)用SetDate方法設(shè)置具體日期,比較麻煩,那對(duì)象該如何初始化?
  2. 局部變量必須要初始化才能使用,為什么字段聲明之后沒有給值依然可以使用?

2.2、構(gòu)造方法

2.2.1、概念?

構(gòu)造方法(也稱為構(gòu)造器)是一個(gè)特殊的成員方法,名字必須與類名相同,在創(chuàng)建對(duì)象時(shí),由編譯器自動(dòng)調(diào)用,并且在整個(gè)對(duì)象的生命周期內(nèi)只調(diào)用一次。

public class Date {
    public int year;
    public int month;
    public int day;
    // 構(gòu)造方法:
// 名字與類名相同,沒有返回值類型,設(shè)置為void也不行
// 一般情況下使用public修飾
// 在創(chuàng)建對(duì)象時(shí)由編譯器自動(dòng)調(diào)用,并且在對(duì)象的生命周期內(nèi)只調(diào)用一次
    public Date(int year, int month, int day){
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("Date(int,int,int)方法被調(diào)用了");
    }
    public void printDate(){
        System.out.println(year + "-" + month + "-" + day);
    }
    public static void main(String[] args) {
// 此處創(chuàng)建了一個(gè)Date類型的對(duì)象,并沒有顯式調(diào)用構(gòu)造方法
        Date d = new Date(2021,6,9); // 輸出Date(int,int,int)方法被調(diào)用了
        d.printDate(); // 2021-6-9
    }
}

?注意:構(gòu)造方法的作用就是對(duì)對(duì)象中的成員進(jìn)行初始化,并不負(fù)責(zé)給對(duì)象開辟空間。

?2.2.2、特性

  1. 名字必須與類名相同
  2. 沒有返回值類型,設(shè)置為void也不行
  3. 創(chuàng)建對(duì)象時(shí)由編譯器自動(dòng)調(diào)用,并且在對(duì)象的生命周期內(nèi)只調(diào)用一次(相當(dāng)于人的出生,每個(gè)人只能出生一次)
  4. ?構(gòu)造方法可以重載(用戶根據(jù)自己的需求提供不同參數(shù)的構(gòu)造方法)
public class Date {
    public int year;
    public int month;
    public int day;
    // 無參構(gòu)造方法
    public Date(){
        this.year = 1900;
        this.month = 1;
        this.day = 1;
    }
    // 帶有三個(gè)參數(shù)的構(gòu)造方法
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void printDate(){
        System.out.println(year + "-" + month + "-" + day);
    }
    public static void main(String[] args) {
        Date d = new Date();
        d.printDate();
    }
}

上述兩個(gè)構(gòu)造方法:名字相同,參數(shù)列表不同,因此構(gòu)成了方法重載。

5、如果用戶沒有顯式定義,編譯器會(huì)生成一份默認(rèn)的構(gòu)造方法,生成的默認(rèn)構(gòu)造方法一定是無參的。

public class Date {
    public int year;
    public int month;
    public int day;
    public void printDate(){
        System.out.println(year + "-" + month + "-" + day);
    }
    public static void main(String[] args) {
        Date d = new Date();
        d.printDate();
    }
}

注意:一旦用戶定義,編譯器則不再生成。

?2.3、默認(rèn)初始化

在上文中提出的第二個(gè)問題:為什么局部變量在使用時(shí)必須要初始化,而成員變量可以不用呢?

【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下),筆記,開發(fā)語言,java,intellij-idea

要搞清楚這個(gè)過程,就需要知道 new 關(guān)鍵字背后所發(fā)生的一些事情:?

Snake si = new Snake();

在程序?qū)用嬷皇呛?jiǎn)單的一條語句,在JVM層面需要做好多事情,下面簡(jiǎn)單介紹下:

  1. 檢測(cè)對(duì)象對(duì)應(yīng)的類是否加載了,如果沒有加載則加載
  2. 為對(duì)象分配內(nèi)存空間
  3. 處理并發(fā)安全問題,比如:多個(gè)線程同時(shí)申請(qǐng)對(duì)象,JVM要保證給對(duì)象分配的空間不沖突
  4. 初始化所分配的空間,即:對(duì)象空間被申請(qǐng)好之后,對(duì)象中包含的成員已經(jīng)設(shè)置好了初始值,比如:

    【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下),筆記,開發(fā)語言,java,intellij-idea

  5. 設(shè)置對(duì)象頭信息
  6. 調(diào)用構(gòu)造方法,給對(duì)象中各個(gè)成員賦值

?2.4、就地初始化

在聲明成員變量時(shí),就直接給出了初始值。

public class Date {
    public int year = 1900;
    public int month = 1;
    public int day = 1;
    public Date(){
    }
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public static void main(String[] args) {
        Date d1 = new Date(2021,6,9);
        Date d2 = new Date();
    }
}

【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下),筆記,開發(fā)語言,java,intellij-idea?

博主推薦:?

?【LeetCode力扣】42. 接雨水-CSDN博客https://blog.csdn.net/zzzzzhxxx/article/details/134104222?spm=1001.2014.3001.5502

【LeetCode力扣】189 53 輪轉(zhuǎn)數(shù)組 | 最大子數(shù)組和-CSDN博客https://blog.csdn.net/zzzzzhxxx/article/details/134095703?spm=1001.2014.3001.5502?

如果覺得作者寫的不錯(cuò),求給博主一個(gè)大大的點(diǎn)贊支持一下,你們的支持是我更新的最大動(dòng)力!

如果覺得作者寫的不錯(cuò),求給博主一個(gè)大大的點(diǎn)贊支持一下,你們的支持是我更新的最大動(dòng)力!

如果覺得作者寫的不錯(cuò),求給博主一個(gè)大大的點(diǎn)贊支持一下,你們的支持是我更新的最大動(dòng)力!

?

到了這里,關(guān)于【JavaSE】基礎(chǔ)筆記 - 類和對(duì)象(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【JavaSE語法】類和對(duì)象(一)

    【JavaSE語法】類和對(duì)象(一)

    1.1 什么是面向?qū)ο?Java是一門純面向?qū)ο蟮恼Z言(Object Oriented Program,簡(jiǎn)稱 OOP ),在面向?qū)ο蟮氖澜缋?,一切皆為?duì)象。面向?qū)ο笫墙鉀Q問題的一種思想,主要 依靠對(duì)象之間的交互完成一件事情 1.2 面向?qū)ο笈c面向過程 注意:面向過程和面相對(duì)象并不是一門語言,而是解決問

    2024年02月05日
    瀏覽(22)
  • 【javaSE】?jī)?nèi)部類(來自類和對(duì)象的補(bǔ)充)

    【javaSE】?jī)?nèi)部類(來自類和對(duì)象的補(bǔ)充)

    hellohello~,大家好????,這里是E綿綿呀???,如果覺得這篇文章還不錯(cuò)的話還請(qǐng)點(diǎn)贊????收藏??????關(guān)注????,如果發(fā)現(xiàn)這篇文章有問題的話,歡迎各位評(píng)論留言指正,大家一起加油!一起chin up!????? ?? 個(gè)人主頁 :E綿綿的博客 ?? 所屬專欄: JAVASE題目練習(xí)

    2024年04月27日
    瀏覽(18)
  • Java基礎(chǔ)——類和對(duì)象

    Java基礎(chǔ)——類和對(duì)象

    目錄 一、類和對(duì)象的基本概念 二、類與對(duì)象的定義與使用 1.創(chuàng)建類的語法: 2.?創(chuàng)建具體的對(duì)象: ?3.范例(創(chuàng)建一個(gè)Person 類的對(duì)象) ?三、static?? (一)static修飾屬性(類屬性、類變量) (二)static修飾方法(類方法、工具方法) (三)static修飾代碼塊(靜態(tài)代

    2024年02月02日
    瀏覽(29)
  • 【手把手帶你學(xué)JavaSE】第六篇:類和對(duì)象

    【手把手帶你學(xué)JavaSE】第六篇:類和對(duì)象

    對(duì)了!給大家推薦一個(gè)刷題學(xué)習(xí)、面試神器——??途W(wǎng) 里面有非常多的題庫,跟面試經(jīng)驗(yàn)~非常的良心??! 什么是類? 什么是對(duì)象? 怎么去理解這兩個(gè)抽象的概念呢? Java是一門純面向?qū)ο蟮恼Z言(Object Oriented Program,繼承OOP),在面向?qū)ο蟮氖澜缋?,一切皆為?duì)象。 面向?qū)ο?/p>

    2023年04月20日
    瀏覽(90)
  • 【Java|基礎(chǔ)篇】類和對(duì)象

    【Java|基礎(chǔ)篇】類和對(duì)象

    本篇文章主要講解了下面三個(gè)問題 類的定義和實(shí)例化 構(gòu)造方法 this 眾所周知面向過程和面向?qū)ο笫莾煞N重要的編程思想,而Java是屬于面向?qū)ο笠活惖恼Z言.面向?qū)ο?Object Oriented Programming,簡(jiǎn)稱 “oop”). 面向?qū)ο笥腥筇匦? 封裝 繼承和多態(tài) .這些內(nèi)容后面會(huì)詳細(xì)介紹. 在

    2024年02月05日
    瀏覽(21)
  • 【Java 基礎(chǔ)】類和對(duì)象 & 方法重載詳解

    【Java 基礎(chǔ)】類和對(duì)象 & 方法重載詳解

    《 Java 零基礎(chǔ)入門到精通 》 專欄持續(xù)更新中。通過本專欄你將學(xué)習(xí)到 Java 從 入門 到 進(jìn)階 再到 實(shí)戰(zhàn) 的全套完整內(nèi)容,所有內(nèi)容均將集中于此專欄。無論是初學(xué)者還是有經(jīng)驗(yàn)的開發(fā)人員,都可從本專欄獲益。 訂閱專欄后添加我微信或者進(jìn)交流群,進(jìn)群可找我領(lǐng)取 前端/Java

    2023年04月11日
    瀏覽(19)
  • 零基礎(chǔ)入門 Java | 五分鐘學(xué)會(huì) Java 類和對(duì)象

    零基礎(chǔ)入門 Java | 五分鐘學(xué)會(huì) Java 類和對(duì)象

    《 Java 零基礎(chǔ)入門到精通 》 專欄持續(xù)更新中。通過本專欄你將學(xué)習(xí)到 Java 從 入門 到 進(jìn)階 再到 實(shí)戰(zhàn) 的全套完整內(nèi)容,所有內(nèi)容均將集中于此專欄。無論是初學(xué)者還是有經(jīng)驗(yàn)的開發(fā)人員,都可從本專欄獲益。 訂閱專欄后添加我微信或者進(jìn)交流群,進(jìn)群可找我領(lǐng)取 前端/Java

    2023年04月10日
    瀏覽(25)
  • Java零基礎(chǔ)手把手保姆級(jí)教程_類和對(duì)象(超詳細(xì))

    Java零基礎(chǔ)手把手保姆級(jí)教程_類和對(duì)象(超詳細(xì))

    1.1 類和對(duì)象的理解 客觀存在的事物皆為對(duì)象 ,所以我們也常常說萬物皆對(duì)象。 類 類的理解 類是對(duì)現(xiàn)實(shí)生活中一類具有共同屬性和行為的事物的抽象 類是對(duì)象的數(shù)據(jù)類型,類是具有相同屬性和行為的一組對(duì)象的集合 簡(jiǎn)單理解:類就是對(duì)現(xiàn)實(shí)事物的一種描述 類的組成 屬性:

    2024年02月05日
    瀏覽(49)
  • Java開發(fā)+Intellij-idea+Maven+工程構(gòu)建

    Java開發(fā)+Intellij-idea+Maven+工程構(gòu)建

    Intellij-idea是一款流行的Java集成開發(fā)環(huán)境,它支持Maven作為項(xiàng)目管理和構(gòu)建工具。Maven可以幫助開發(fā)者自動(dòng)下載項(xiàng)目依賴的jar包,執(zhí)行編譯、測(cè)試、打包等生命周期任務(wù)。本資源將介紹如何在Intellij-idea中創(chuàng)建、導(dǎo)入、轉(zhuǎn)換和編譯Maven工程,以及如何配置Maven的相關(guān)參數(shù)和插件。

    2024年02月01日
    瀏覽(103)
  • 【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    掌握 抽象類和接口的定義、使用、區(qū)別、常見設(shè)計(jì)模式; 抽象類是代碼開發(fā)中的重要組成部分,利用抽象類可以明確地定義子類需要覆寫的方法,這樣相當(dāng)于在語法程度上對(duì)子類進(jìn)行了嚴(yán)格的定義限制,代碼的開發(fā)也就更加標(biāo)準(zhǔn)。下面具體介紹抽象類的概念。 普通類可以直

    2024年02月16日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包