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

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上))

這篇具有很好參考價值的文章主要介紹了初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

個人主頁(找往期文章包括但不限于本期文章中不懂的知識點):我要學(xué)編程(?_?)-CSDN博客

目錄

面向?qū)ο蟮某醪秸J(rèn)知

面向?qū)ο笈c面向過程的區(qū)別

類的定義和使用?

類的定義格式

類的實例化

this引用

什么是this引用?

this引用的特性

對象的構(gòu)造及初始化

如何初始化對象(的成員變量)

構(gòu)造方法?


本期我們就來學(xué)習(xí)面向?qū)ο蟆?/p>

面向?qū)ο蟮某醪秸J(rèn)知

Java是一門純面向?qū)ο蟮恼Z言(Object Oriented Program,簡稱OOP),在面向?qū)ο蟮氖澜缋?,一切皆為對象。面向?qū)ο笫墙鉀Q問題的一種思想,主要依靠對象之間的交互完成一件事情。用面向?qū)ο蟮乃枷雭砩婕俺绦?,更符合人們對事物的認(rèn)知,對于大型程序的設(shè)計、擴(kuò)展以及維護(hù)都非常友好。

面向?qū)ο笈c面向過程的區(qū)別

面向過程:注重的是過程;面向?qū)ο螅鹤⒅氐氖菍ο蟆?/p>

例如:我們要吃飯了。首先,得找一個飯館子,再點菜,最后再吃飯。

如果是面向過程的話,就需要關(guān)注這些過程:找飯館子的過程,點菜,吃飯。

如果是面向?qū)ο蟮脑挘托枰P(guān)注這些對象:我們自己,飯館子,菜。不需要關(guān)注過程了。

從這里就可以簡單看出對象比過程要簡單。

注意:面向過程和面相對象并不是一門語言,而是解決問題的方法,沒有那個好壞之分,都有其專門的應(yīng)用場景。

類的定義和使用?

類是用來描述對象的。

例如:一個學(xué)生就是一個對象(Java中一切皆對象),我們現(xiàn)在如果想要來描述這個學(xué)生的話,就得用類來描述。

類的定義格式

//class為定義類的關(guān)鍵字,ClassName為類的名字,{}中為類的主體。
//類中包含的內(nèi)容稱為類的成員。屬性主要是用來描述類的,稱之為類的成員屬性或者類成員變量。
//方法主要說明類具有哪些功能,稱為類的成員方法。

// 創(chuàng)建類
class ClassName{
    field; // 字段(屬性) 或者 成員變量 :定義再類當(dāng)中,方法外部的變量
    method; // 行為 或者 成員方法
}

?成員變量分為兩種:一種是普通成員變量,一種是靜態(tài)成員變量。

普通成員變量:public?int age;? ? ? 靜態(tài)成員變量:public static int age;??

成員方法也分為兩種:一種是普通成員方法,一種是靜態(tài)成員方法。

普通成員方法:public void func()? ? ?靜態(tài)成員方法:public static void func()

我們現(xiàn)在就來描述一個學(xué)生對象。

class Student {
    public String name;//名字
    public int age;//年齡

    public void func(){
        System.out.println("姓名:"+name+" 年齡:"+age);
    }
}

注意事項:類名注意采用大駝峰。定義成員前寫法統(tǒng)一為public,后面會詳細(xì)解釋。此處寫的方法不帶 static 關(guān)鍵字,后面會詳細(xì)解釋。

練習(xí):定義一個類:狗

class Dog{
    public String name;//名字
    public int age;//年齡
    public void func(){
        System.out.println(name+" :汪汪汪~~~");
    }
}

注意事項: 1. 一般一個文件當(dāng)中只定義一個類(推薦),雖然可以定義多個類,但是只能有一個類被public 修飾。?2. main方法所在的類一般(不是絕對(如下圖1所示)要使用public修飾。(注意:Eclipse默認(rèn)會在public修飾的類中找main方法) 3. public修飾的類必須要和文件名相同 4. 不要輕易去修改public修飾的類的名稱,如果要修改,通過開發(fā)工具修改(如下圖2所示)。?5. 每一個類都會生成一個對應(yīng)的字節(jié)碼文件(如下圖3)。

?圖1:初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

圖2:

?當(dāng)只有一個類時,就可以修改成功。

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

當(dāng)有多個類時,就會修改失敗。

修改同上步驟,但修改的結(jié)果不同。

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

圖3:

在……out /?production?……目錄下。?

下面是怎么查看的視頻

JavaSE篇(類和對象(上))怎么查看字節(jié)碼文件-CSDN直播

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

類的實例化

我們在定義了一個類的同時就相當(dāng)于創(chuàng)建了一種新的類型。和int,char一樣,只不過int,char這些是Java的內(nèi)置類型,而類是用戶自定義的類型。既然創(chuàng)建了類型,我們就肯定會用這個類型來定義變量。舉個簡單的例子:我們拿到int類型,就可以使用int類型來創(chuàng)建一個變量 int a = 0;? 同樣這個類也是可以這樣的,我們把用類定義一個變量的過程稱為類的實例化(我們更喜歡說是用類創(chuàng)建對象的過程)。

public class Test {
    public static void main(String[] args) {
        //java中使用new關(guān)鍵字,來配合類名實例化對象
        Student student = new Student();//通過new來實例化對象
        //通過 . 來訪問類的屬性和方法(功能)
        student.name = "張三";
        student.age = 18;
        student.func();
    }
}

//創(chuàng)建一個類
class Student{
    //屬性
    String name;
    int age;
    //功能(方法)
    public void func(){
        System.out.println("姓名:"+name+" 年齡:"+age);
    }
}

注意:一個類可以實例化多個對象。

可能會有小伙伴發(fā)現(xiàn):類有點像我們C語言學(xué)過的結(jié)構(gòu)體。沒錯這個類和結(jié)構(gòu)體是非常類似的。

this引用

public class Test{
    public static void main(String[] args) {
        //實例化三個對象
        Date date1 = new Date();
        Date date2 = new Date();
        Date date3 = new Date();

        //設(shè)置時間
        date1.SetDate(2024,3,25);
        date2.SetDate(2024,3,26);
        date3.SetDate(2024,3,27);

        //打印結(jié)果,看看是否設(shè)置成功
        date1.PrintDate();
        date2.PrintDate();
        date3.PrintDate();
    }
}

class Date{
    //屬性
    public int year;
    public int month;
    public int day;

    //方法
    public void SetDate(int y, int m, int d){
        year = y;
        month = m;
        day = d;
    }
    public void PrintDate(){
        System.out.println(year+"/"+month+"/"+day);
    }

}

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

上面是最終的打印結(jié)果,由此可知我們設(shè)置的時間是對的。

但是又有一些新的問題:

1. 如果我們在設(shè)置時間的方法的參數(shù)也是year month day ,那就會發(fā)生一些錯誤(打印的結(jié)果是全部是0,如下圖所示)?

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

這是什么原因造成的呢?其實我們在C語言階段已經(jīng)學(xué)習(xí)過了(當(dāng)全局變量與局部變量的變量名一樣時,全局變量會被屏蔽,遵循局部變量優(yōu)先原則)?,同樣Java中也是如此,這里的year,month,day都是局部變量,那么也就是局部變量給局部變量賦值,因此得不到我們想要的結(jié)果(為什么是0呢?后面會有解釋)。

2. PrintDate方法怎么知道自己要打印誰的值呢?其實這個是比較好解釋的,因為前面有?對象. 來說明是在哪個對象下調(diào)用這個方法。

上述的所有問題都可以用 this 來解決。我們首先來說第二點,其實上面那個解釋是沒問題的,但如果我們用更底層的知識來解釋的話,就是用this引用來解釋。

什么是this引用?

this引用指向當(dāng)前對象(成員方法運(yùn)行時調(diào)用該成員方法的對象),在成員方法中所有成員變量的操作,都是通過該引用去訪問。

那上面的代碼我們就可以改成下面:

public class Test{
    public static void main(String[] args) {
        //實例化三個對象
        Date date1 = new Date();
        Date date2 = new Date();
        Date date3 = new Date();

        //設(shè)置時間
        date1.SetDate(2024,3,25);
        date2.SetDate(2024,3,26);
        date3.SetDate(2024,3,27);

        //打印結(jié)果,看看是否設(shè)置成功
        date1.PrintDate();
        date2.PrintDate();
        date3.PrintDate();
    }
}

class Date{
    //屬性
    public int year;
    public int month;
    public int day;

    //方法
    public void SetDate(int year, int month, int day){
        //這個也就聲明了是當(dāng)前對象
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void PrintDate(){
        //即使能夠識別,我們也要加上this
        System.out.println(this.year+"/"+this.month+"/"+this.day);
    }

}

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

注意:this引用指向的是調(diào)用成員方法的對象?。

this引用的特性

1. this的類型:對應(yīng)類的類型引用,即哪個對象調(diào)用就是哪個對象的引用類型(誰調(diào)用this所在的方法,this就指向誰)。

2. this只能在"成員方法"中使用。

3. 在"成員方法"中,this只能引用當(dāng)前對象,不能再引用其他對象。

4. this是“成員方法”第一個隱藏的參數(shù),編譯器會自動傳遞,在成員方法執(zhí)行時,編譯器會負(fù)責(zé)將調(diào)用成員方法的對象的引用傳遞給該成員方法,this負(fù)責(zé)來接收。

因此我們以后調(diào)用成員方法或者成員變量時,都應(yīng)該加上this。

對象的構(gòu)造及初始化

如何初始化對象(的成員變量)

通過前面知識點的學(xué)習(xí),我們知道,在Java方法內(nèi)部定義一個局部變量時,必須要初始化,否則會編譯失敗,但是我們用類創(chuàng)建的對象不初始化竟然不會報錯(如下圖:)。初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

這就是默認(rèn)初始化。?

Date d = new Date(2021,6,9);

在程序?qū)用嬷皇呛唵蔚囊粭l語句,在JVM層面需要做好多事情,下面簡單介紹下:

1. 檢測對象對應(yīng)的類是否加載了,如果沒有加載則加載。

2. 為對象分配內(nèi)存空間。

3. 處理并發(fā)安全問題 比如:多個線程同時申請對象,JVM要保證給對象分配的空間不沖突。

4. 初始化所分配的空間 即:對象空間被申請好之后,對象中包含的成員已經(jīng)設(shè)置好了初始值。根據(jù)不同的類型會默認(rèn)初始化不同的值(如下表)。

數(shù)據(jù)類型 默認(rèn)值
byte 0
char '\u0000'
short 0
int 0
long 0L
boolean false
float 0.0f
double 0.0
reference null

如果我們想重新初始化時,初始化的方式就是 . 成員變量 ,再賦值就可以了。還有一種初始化就是在創(chuàng)建成員變量時,就直接給予初始值,這種初始化叫就地初始化。下面就是就地初始化:初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

構(gòu)造方法?

構(gòu)造方法(也稱為構(gòu)造器)是一個特殊的成員方法,名字必須與類名相同,沒有返回值類型,即使是void也不行。在創(chuàng)建對象時,由編譯器自動調(diào)用,并且在整個對象的生命周期內(nèi)只調(diào)用一次。同樣構(gòu)造方法也可以對我們創(chuàng)建的對象進(jìn)行初始化。那怎么調(diào)用這個方法呢?(如下圖所示:)

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

由此可見:當(dāng)我們實例化一個對象的時候,就自動地調(diào)用了這個構(gòu)造方法。?那又有一個新的問題來了:當(dāng)我們沒有寫構(gòu)造方法的時候,但是我們依舊實例化了一個對象啊,那也會調(diào)用構(gòu)造方法嗎?沒錯,當(dāng)我們沒有提供任何構(gòu)造方法時,編譯器會自動給我們提供一個不帶參數(shù)的構(gòu)造方法;一旦我們自己寫了構(gòu)造方法之后,編譯器就不再提供了。

注意:1. 構(gòu)造方法是可以被重載的。

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

2. 只有當(dāng)調(diào)用完構(gòu)造方法之后,對象才算被被創(chuàng)建成功了。?

3.在構(gòu)造方法中可以通過this()來調(diào)用其它構(gòu)造方法。初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

這個this()來調(diào)用其它構(gòu)造方法的時候,有一些限制條件:(1)this()這條語句必須是在調(diào)用這條語句的構(gòu)造方法的有效代碼的第一行。初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

(2) 不能形成循環(huán)。初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

4. 絕大多數(shù)情況下使用public來修飾,特殊場景下會被private修飾(后面會學(xué)習(xí)到)?

使用IDEA快速生成構(gòu)造方法的步驟:

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上)),Java,java,開發(fā)語言,JavaSE

?下面是詳細(xì)視頻:

https://live.csdn.net/v/374793?spm=1001.2014.3001.5501

好啦!本期JavaSE類和對象(上)的學(xué)習(xí)就到此結(jié)束啦!我們下一期再一起學(xué)習(xí)吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-844434.html

到了這里,關(guān)于初始Java篇(JavaSE基礎(chǔ)語法)(5)(類和對象(上))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【JavaSE】Java基礎(chǔ)語法(十八):接口

    【JavaSE】Java基礎(chǔ)語法(十八):接口

    接口就是一種公共的規(guī)范標(biāo)準(zhǔn),只要符合規(guī)范標(biāo)準(zhǔn),大家都可以通用。 Java中接口存在的兩個意義 用來定義規(guī)范 用來做功能的拓展 接口用interface修飾 類實現(xiàn)接口用implements表示 接口不能實例化 我們可以創(chuàng)建接口的實現(xiàn)類對象使用 接口的子類 要么重寫接口中的所有抽

    2024年02月06日
    瀏覽(20)
  • 【JavaSE】基礎(chǔ)筆記 - 類和對象(上)

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

    ? 目錄 1、面向?qū)ο蟮某醪秸J(rèn)知 1.1、什么是面向?qū)ο?1.2、面向?qū)ο笈c面向過程 ?2. 類定義和使用 2.1、簡單認(rèn)識類 2.2、類的定義格式 2.3、自定義類舉例說明 2.3.1、定義一個狗類? 2.3.2、定義一個學(xué)生類 3、類的實例化 3.1、什么是實例化 3.2、類和對象的說明 ? Java是一門 純面向

    2024年02月05日
    瀏覽(24)
  • 【JavaSE】基礎(chǔ)筆記 - 類和對象(下)

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

    ? 目錄 1、this引用 1.1、為什么要有this引用 1.2、什么是this引用 1.3、?this引用的特性 2、?對象的構(gòu)造及初始化 2.1、?如何初始化對象 2.2、構(gòu)造方法 2.2.1、概念? ?2.2.2、特性 ?2.3、默認(rèn)初始化 ?2.4、就地初始化 ? 上篇: 【JavaSE】基礎(chǔ)筆記 - 類和對象(上)-CSDN博客 https://blo

    2024年02月04日
    瀏覽(23)
  • 【JavaSE】java刷題——基礎(chǔ)語法熟練應(yīng)用

    【JavaSE】java刷題——基礎(chǔ)語法熟練應(yīng)用

    通過本篇題目,可以讓初學(xué)Java的小伙伴們更加熟練Java的基礎(chǔ)語法~ 歡迎關(guān)注個人主頁:逸狼 創(chuàng)造不易,可以點點贊嗎~ 如有錯誤,歡迎指出~ ?題述:編寫程序數(shù)一下 1到 100 的所有整數(shù)中出現(xiàn)多少個數(shù)字9 分兩步 取個位上的9 ?有9 19 29……99 有10個 取十位上的9 ?有90 91 92 93…

    2024年04月17日
    瀏覽(24)
  • 【JavaSE】Java基礎(chǔ)語法(十二):ArrayList

    【JavaSE】Java基礎(chǔ)語法(十二):ArrayList

    集合和數(shù)組的區(qū)別 : 共同點:都是存儲數(shù)據(jù)的容器 不同點:數(shù)組的容量是固定的,集合的容量是可變的 ArrayList : 可調(diào)整大小的數(shù)組實現(xiàn) 是一種特殊的數(shù)據(jù)類型,泛型。 怎么用呢 ? 在出現(xiàn)E的地方我們使用引用數(shù)據(jù)類型替換即可 舉例:ArrayList, ArrayList 成員方法 : 案例需求

    2024年02月06日
    瀏覽(26)
  • 【JavaSE】Java基礎(chǔ)語法(二十五):異常

    【JavaSE】Java基礎(chǔ)語法(二十五):異常

    異常的概述 異常就是程序出現(xiàn)了不正常的情況 異常的體系結(jié)構(gòu) 編譯時異常 都是Exception類及其子類 必須顯示處理,否則程序就會發(fā)生錯誤,無法通過編譯 運(yùn)行時異常 都是RuntimeException類及其子類 無需顯示處理,也可以和編譯時異常一樣處理 圖示 如果程序出現(xiàn)了問題,我們

    2024年02月06日
    瀏覽(39)
  • 【JavaSE】Java基礎(chǔ)語法(十六):抽象類

    【JavaSE】Java基礎(chǔ)語法(十六):抽象類

    當(dāng)我們在做子類共性功能抽取時,有些方法在父類中并沒有具體的體現(xiàn),這個時候就需要抽象類了! 在Java中,一個沒有方法體的方法應(yīng)該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽 象類! 抽象類和抽象方法必須使用 abstract 修飾 抽象類中不一定有抽

    2024年02月07日
    瀏覽(50)
  • 【JavaSE】Java基礎(chǔ)語法(二十一):內(nèi)部類

    【JavaSE】Java基礎(chǔ)語法(二十一):內(nèi)部類

    內(nèi)部類概念 在一個類中定義一個類。舉例:在一個類A的內(nèi)部定義一個類B,類B就被稱為內(nèi)部類 內(nèi)部類定義格式 格式舉例: 內(nèi)部類的訪問特點 內(nèi)部類可以直接訪問外部類的成員,包括私有 外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對象 示例代碼: 成員內(nèi)部類的定義位置 在類中

    2024年02月07日
    瀏覽(32)
  • 【JavaSE】Java基礎(chǔ)語法(三十一):可變參數(shù)

    【JavaSE】Java基礎(chǔ)語法(三十一):可變參數(shù)

    可變參數(shù)介紹 可變參數(shù)又稱參數(shù)個數(shù)可變,用作方法的形參出現(xiàn),那么方法參數(shù)個數(shù)就是可變的了 方法的參數(shù)類型已經(jīng)確定,個數(shù)不確定,我們可以使用可變參數(shù) 可變參數(shù)定義格式 可變參數(shù)的注意事項 這里的變量其實是一個數(shù)組 如果一個方法有多個參數(shù),包含可變參數(shù),可

    2024年02月08日
    瀏覽(22)
  • 【JavaSE】Java基礎(chǔ)語法(十三):Java 中的集合(十分全面)

    【JavaSE】Java基礎(chǔ)語法(十三):Java 中的集合(十分全面)

    List (對付順序的好幫?): 存儲的元素是有序的、可重復(fù)的。 Set (注重獨???的性質(zhì)): 存儲的元素是?序的、不可重復(fù)的。 Queue (實現(xiàn)排隊功能的叫號機(jī)): 按特定的排隊規(guī)則來確定先后順序,存儲的元素是有序的、可重復(fù)的。 Map (? key 來搜索的專家): 使?鍵值對(key-value)存

    2024年02月10日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包