柚子快報邀請碼778899分享:開發(fā)語言 Java 類和對象
柚子快報邀請碼778899分享:開發(fā)語言 Java 類和對象
目錄
1、面向?qū)ο蟮某醪秸J知
2、類定義和使用
?2、1 簡單認識類
2、2類的定義
3、類的實例化
3、1什么是實例化
3、2類和對象的說明使用?
?編輯
4、this引用?
4、1什么是this引用
4、2 this引用的特性
5、對象的構(gòu)造及初始化
5、1構(gòu)造方法
?5、2默認初始化
5、3就地初始值
本篇博客學習Java類與對象。會涉及到許多新的概念,小伙伴們認真看完并及時鞏固消化知識點哦
1、面向?qū)ο蟮某醪秸J知
Java是一門純面向?qū)ο蟮恼Z言(Object Oriented Program,簡稱OOP),在面向?qū)ο蟮氖澜缋?,一切皆為對象。面向?qū)ο笫墙鉀Q問題的一種思想,主要依靠對象之間的交互完成一件事情。用面向?qū)ο蟮乃枷雭砩婕俺绦?,更符合人們對事物的認知,對于大型程序的設計、擴展以及維護都非常友好。
面向?qū)ο笈c面向過程的區(qū)別:面向?qū)ο螅鹤⒅氐氖菍ο螅ńY(jié)果)(1.找對象 2.創(chuàng)建對象 3.使用對象),如像洗衣服注重的只有洗衣機,衣服和洗衣粉幾個對象是如何交互完成工作的,而不注意是怎么洗的面向過程:注重的是過程,如洗衣服時洗衣服的過程必須每個環(huán)節(jié)都在,少一個環(huán)節(jié)都不行,按照這種方式寫代碼,將來擴展或維護起來會很麻煩
?以洗衣服為例,感受面向過程與面向?qū)ο缶幊陶Z言的區(qū)別。
面向過程編程語言就像傳統(tǒng)洗衣方式一樣。 ?
傳統(tǒng)的方式:注重的是洗衣服的過程,少了一個環(huán)節(jié)可能都不行。 而且不同衣服洗的方式,時間長度,擰干方式都不同,處理起來就比較麻煩。如果將來要洗鞋子,那就是另一種放方式。按照該種方式來寫代碼,將來擴展或者維護起來會比較麻煩。
而面向過程編程語言就像現(xiàn)代洗衣方式一樣。
注:面向過程和面相對象并不是一門語言,而是解決問題的方法,沒有那個好壞之分,都有其專門的應用場景?。
2、類定義和使用
面相對象程序設計關(guān)注的是對象,而對象是現(xiàn)實生活中的實體,比如:洗衣機。但是洗衣機計算機并不認識,需要開發(fā)人員告訴給計算機什么是洗衣機。
上圖左側(cè)就是對洗衣機簡單的描述,該過程稱為對洗衣機對象(實體)進行抽象(對一個復雜事物的重新認知),但是這些簡化的抽象結(jié)果計算機也不能識別,開發(fā)人員可以采用某種面相對象的編程語言來進行描述,比如:Java語言。?
?2、1 簡單認識類
類是用來對一個實體(對象)來進行描述的,主要描述該實體(對象)具有哪些屬性(外觀尺寸等),哪些功能(用來干啥),描述完成后計算機就可以識別了。 在Java語言中,如何對上述的洗衣機類來進行定義呢?
2、2類的定義
在java中定義類中,class為定義類的關(guān)鍵字。WashMachin為類名(建議采用大駝峰式命名)。{}中為類的主體。類中包含的內(nèi)容稱為類的成員。屬性主要是描述類的,稱之為類的成員屬性或類的成員變量。而方法主要說明類有哪些功能,稱之為類的成員方法。因此,類的主體由成員變量和成員方法構(gòu)成,合稱為類的成員。
? ? //創(chuàng)建洗衣機類
?public class WashMachine { ? ? //洗衣機屬性(成員變量) ? ? ? ? public String brand; // 品牌 ? ? ? ? public String type; // 型號 ? ? ? ? public double weight; // 重量 ? ? ? ? public double length; // 長 ? ? ? ? public double width; // 寬 ? ? ? ? public double height; // 高 ? ? ? ? public String color; // 顏色 ? ?//洗衣機的行為(成員方法) ? ? ? ? public void washClothes(){ // 洗衣服 ? ? ? ? ? ? System.out.println("洗衣功能"); ? ? ? ? }
? ? ? ? public void dryClothes(){ // 脫水 ? ? ? ? ? ? System.out.println("脫水功能"); ? ? ? ? }
? ? ? ? public void setTime(){ // 定時 ? ? ? ? ? ? System.out.println("定時功能"); ? ? ? ? } } ?
注意事項: 1. 一般一個文件當中只定義一個類 2. main方法所在的類一般要使用public修飾 3. public修飾的類必須要和文件名相同 4. 不要輕易去修改public修飾的類的名稱。
采用Java語言將洗衣機在計算機中定義完成,經(jīng)過Javac文件之后形成 .class文件。在JVM上=的基礎上計算機就可以識別了。??
3、類的實例化
3、1什么是實例化
定義了一個類,就相當于在計算機中定義了一種新的類型,與int,double類似,只不過int和double是java語言自帶的內(nèi)置類型,而類是用戶自定義了一個新的類型,比如上述的:WashMachine類。是(一種新定義的類型)有了這些自定義的類型之后,就可以使用這些類來定義實例(或者稱為對象)。用類類型創(chuàng)建對象的過程,稱為類的實例化,在java中采用new關(guān)鍵字,配合類名來實例化對象。
//創(chuàng)建狗類
public class PetDog {
//狗的屬性(成員變量)
public String name;
public String color;
//狗的行為(成員方法)
public void bark(){
System.out.println("汪汪汪~~~");
}
public void eat(){
System.out.println("吃狗糧...");
}
}
public class Test {
public static void main(String[] args) {
PetDog dog1 = new PetDog(); //通過new實例化對象
dog1.name = "大黃";//用"對象名."來訪問對象的成員(變量/方法)
dog1.color = "黑黃色";
dog1.bark();
dog1.eat();
}
}
?注意事項:1.new 關(guān)鍵字用于創(chuàng)建一個對象的實例. 2.使用 . 來訪問對象中的屬性和方法. 3.同一個類可以創(chuàng)建對個實例.
3、2類和對象的說明使用?
1. 類只是一個模型一樣的東西,用來對一個實體進行描述,限定了類有哪些成員. 2. 類是一種自定義的類型,可以用來定義變量. 3. 一個類可以實例化出多個對象,實例化出的對象 占用實際的物理空間,存儲類成員變量 4. 做個比方。類實例化出對象就像現(xiàn)實中使用建筑設計圖建造出房子,類就像是設計圖,只設計出需要什么東西,但是并沒有實體的建筑存在,同y樣類也只是一個設計,實例化出的對象才能實際存儲數(shù)據(jù),占用物理空間。
4、this引用?
4、1什么是this引用
this引用指向當前對象(成員方法運行時調(diào)用該成員方法的對象),在成員方法中所有成員變量的操作,都是通過該引用去訪問。 public class PetDog { ? ? public String name; ? ? public int age; ? ? public String color;
? ? public void SetPetDog(String name, int age, String color) { ? ? ? ? this.name = name; ? ? ? ? this.age = age; ? ? ? ? this.color = color; ? ? }
? ? public void say(){ ? ? ? ? System.out.println(this.name+"說我"+this.age+"歲了是"+this.color); ? ? } } public class Test { ? ? ? ? public static void main(String[] args) { ? ? ? ? ? ? PetDog dog1 = new PetDog(); ? ? ? ? ? ? dog1.SetPetDog("大黃",3,"黑黃色"); ? ? ? ? ? ? dog1.say(); ? ? ? ? } }
4、2 this引用的特性
1. this的類型:對應類類型引用,即哪個對象調(diào)用就是哪個對象的引用類型 2. this只能在"成員方法"中使用。不能在靜態(tài)方法中使用。 3. 在"成員方法"中,this只能引用當前對象,不能再引用其他對象
總結(jié)this用法
1、通過this訪問當前對象的成員變量。
2、通過this訪問當前對象的成員方法
3、通過this訪問當前對象的其他構(gòu)造方法(必須放在該方法的第一行!)
5、對象的構(gòu)造及初始化
先看上述this引用來賦值初始化示范代碼
? public void SetPetDog(String name, int age, String color) { ? ? ? ? this.name = name; ? ? ? ? this.age = age; ? ? ? ? this.color = color; ? ? }
需要調(diào)用之前寫的SetPetDog方法才可以將具體的日期設置到對象中。通過上述例子發(fā)現(xiàn)問題并引發(fā)思考: 1. 每次對象創(chuàng)建好后調(diào)用SetDate方法設置具體日期,比較麻煩。
2、局部變量必須要初始化才能使用,那么成員變量聲明后,沒有賦值直接使用會報錯嗎
這就得引出構(gòu)造方法了
5、1構(gòu)造方法
構(gòu)造方法(也稱為構(gòu)造器)是一個特殊的成員方法,名字必須與類名相同,在創(chuàng)建對象時,由編譯器自動調(diào)用,并且 在整個對象的生命周期內(nèi)只調(diào)用一次。注意:構(gòu)造方法的作用就是對對象中的成員進行初始化,并不負責給對象開辟空間。
構(gòu)造方法必須滿足的條件;
1、方法名與類名相同
2、方法名的前面無返回值
3、構(gòu)造方法中不能使用return語句返回一個值,但是可以單獨寫return語句作為方法的結(jié)束。
public class Date {
public int year;
public int month;
public int day;
//構(gòu)造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
System.out.println("Date(int,int,int)構(gòu)造方法被調(diào)用了");
}
public void printDate() {
System.out.println(year + "-" + month + "-" + day);
}
}
public class Test {
public static void main(String[] args) {
Date date = new Date(2024,6,2);
date.printDate();
}
}
注意:在創(chuàng)建對象時由編譯器自動調(diào)用,并且在對象的生命周期內(nèi)只調(diào)用一次?。
構(gòu)造方法的重載;
構(gòu)造方法重載的條件
1、方法名相同
2、參數(shù)不同(個數(shù)不同/依次類型不同)
// 無參構(gòu)造方法
public Date(){
}
// 帶有三個參數(shù)的構(gòu)造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
注意:
如果用戶沒有定義構(gòu)造方法,編譯器會生成一份默認的構(gòu)造方法,生成的默認構(gòu)造方法一定是無參的。
一旦用戶定義構(gòu)造方法,編譯器則不再生成構(gòu)造方法。
可以在無參構(gòu)造方法中通過this調(diào)用帶有三個參數(shù)的構(gòu)造方法但是this(參數(shù));必須是構(gòu)造方法中第一條語句,并且不能形成環(huán)。
?5、2默認初始化
首先,必須對局部變量和全局變量的區(qū)別有清晰認知。
局部變量:定義在方法中的變量。
全局變量:定義在類中方法外的變量,成員變量就是全局變量。
在上文中提出的第二個問題:為什么在使用時局部變量必須要初始化,而成員變量可以不用呢?
Date date = new Date(2024,6,2);
要搞清楚這個過程,就需要知道 new 關(guān)鍵字背后所發(fā)生的一些事情:?
在程序?qū)用嬷皇呛唵蔚囊粭l語句,在JVM層面需要做好多事情,下面簡單介紹下:
1. 檢測對象對應的類是否加載了,如果沒有加載則加載 2. 為對象分配內(nèi)存空間 3. 處理并發(fā)安全問題 比如:多個線程同時申請對象,JVM要保證給對象分配的空間不沖突
4. 初始化所分配的空間?被申請好以后,對象中包含的成員就已經(jīng)設置好了初始值.
5、3就地初始值
在聲明成員變量時,就直接給出初始值。
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) {
}
}
?注意:代碼編譯完成后,編譯器會將所有給成員初始化的這些語句添加到各個構(gòu)造函數(shù)中
本篇類和對象就學習到這里啦,是不是收獲滿滿呢,如果覺得文章寫的不錯,留下小紅心再走吧。后面學習面向?qū)ο缶幊陶Z言的三大特征,關(guān)注我,不要錯過哦!~
柚子快報邀請碼778899分享:開發(fā)語言 Java 類和對象
好文閱讀
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。