Java 面向?qū)ο螅ㄉ希?/h1>
收錄更新:https://github.com/cunyu1943/JavaPark
目錄
前言
類與對象
屬性
方法
構(gòu)造方法
引用
總結(jié)
前言
學(xué)習(xí)了面向?qū)ο缶幊痰乃枷耄裉炀蛠砜纯疵嫦驅(qū)ο缶幊趟枷朐?Java 中的體現(xiàn) - 類。以及有關(guān)類的相關(guān)知識,比如屬性、方法、引用等。
類與對象
以我們?nèi)粘I顬槔覀儸F(xiàn)在很多人都養(yǎng)寵物,而寵物 都有一些共同狀態(tài),比如名字、毛色、年齡…… 這樣一來我們就可以設(shè)計一個叫做類的東西,用來 代表寵物 這一類事物;
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
}
有了這個類之后,它就相當(dāng)于我們的一個模板,根據(jù)這個模板我們就能夠創(chuàng)建一個個具體的寵物,而這些寵物,就叫做 對象;
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
public static void main(String[] args){
// 創(chuàng)建一個對象
Pet dog = new Pet();
dog.name = "博美";
dog.furColor = "white";
dog.age = 1;
Pet cat = new Pet();
cat.name = "英短";
cat.furColor = "orange";
cat.age = 2;
}
}
屬性
每個寵物都有自己的名字、毛色和年齡等一系列狀態(tài),而這些狀態(tài)就叫做一個類的屬性。而屬性的類型既可以是基本類型(比如上述例子中的 int),也可以是引用類型(上述例子中的 String)。而在 Java 語言中,屬性的命名雖然沒有強制規(guī)定,但是一般都是有一套大家通用的命名方法,即:
若屬性是一個單詞組成,那么一般都是小寫。
若屬性是多個單詞組成,那么則采用駝峰法。
關(guān)于更多的命名規(guī)定,推薦參考阿里巴巴出品的 《Java 開發(fā)手冊》,下載地址:https://github.com/cunyu1943/ebooks
方法
而除開屬性之后,每個對象還能夠有許多其他的功能,就像寵物都能吃東西、會叫……,那么這些他們能夠做的事情,在類里邊就可以用 方法 來進(jìn)行表示。所謂方法就是程序中最小的執(zhí)行單元,一般用于封裝重復(fù)且具有獨立功能的代碼,從而提交代碼的復(fù)用性和可維護(hù)性。
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
// 吃東西對應(yīng)的方法
public void eat(){
System.out.println("吃東西!");
}
// 吠叫對應(yīng)的方法
public void bark(){
System.out.println("吠叫!");
}
}
而對于方法,也有需要注意的幾點:
方法是可以有返回值的,如果要返回對應(yīng)值,則其返回值的類型要與返回值相對于,對于不需要返回值的方法,則將其返回類型設(shè)置為 void; 方法是可以有參數(shù)的,我們上述例子的方法中都是不帶參數(shù)的,但如果我們有需要,就可以加上自己需要的參數(shù),但此時注意要帶上參數(shù)的類型;
總結(jié)起來,可以分為如下四種方法:
無參無返回值
public void methodName(){
……
}
無參有返回值
public boolean methodName(){
……
return false;
}
有參無返回值
public void methodName(String name){
……
}
有參有返回值
public boolean methodName(String name){
……
return false;
}
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
// 具有返回值的方法
int getAge(){
return age;
}
// 帶有參數(shù)的方法
void setAge(int age){
this.age = age;
}
// 吃東西對應(yīng)的方法
void eat(){
System.out.println("吃東西!");
}
// 叫喚對應(yīng)的方法
void bark(){
System.out.println("叫喚!");
}
}
而對于方法命名的方式,也是有一定講究的。因為一般而言方法都是一個類的動作行為,所以 一般都是以動詞開頭,而如果有多個單詞組合,則除開第一個單詞全部小寫之外,后面每個單詞的第一個字母都要使用大寫。
注意到這里有個關(guān)鍵字 return,它主要用于設(shè)置方法的返回。
如果一個方法沒有返回值,那么此時可以省略不寫,一旦書寫,那么就代表著該方法結(jié)束。比如,以下這個方法的兩種書寫方式最終效果都是一樣的。
帶 return
public void fire(){
System.out.println("開火……");
return;
}
不帶 return
public void fire(){
System.out.println("開火……");
}
而如果一個方法有返回值,那么此時 return 就必須寫,它表示結(jié)束方法并返回結(jié)果。
public int sum(int num1, int num2){
return num1 + num2;
}
此外,既然提到了方法,那肯定少不了重寫和重載了,下面就來看看重寫和重載之間的區(qū)別。
重寫
所謂重寫,其實就是子類對父類中允許訪問的方法的實現(xiàn)過程進(jìn)行加工重新編寫,是面向?qū)ο缶幊讨卸鄳B(tài)性的體現(xiàn),通常發(fā)生在父類和子類之間。
重寫時,方法的參數(shù)和返回值都不能改變。通過重寫,子類可以根據(jù)自己的需要,從而去重新定義區(qū)別于父類的行為。
public class Hero{
public void fight(){
System.out.println("戰(zhàn)斗");
}
}
pubilc class Shooter extends Hero{
@Override
public void fight(){
System.out.println("遠(yuǎn)程戰(zhàn)斗");
}
}
重載
而重載則是讓類以統(tǒng)一的方式來處理不同類型數(shù)據(jù)的一種方式。一個類中存在多個同名方法,但他們具有不同的參數(shù)個數(shù)或者類型。
簡單來說,就是在 Java 的一個類中,我們可以創(chuàng)建多個相同名字的方法,但是這些方法之間的參數(shù)和返回值有所不同。
public class Calc{
public int sum(int num1, int num2){
return num1 + num2;
}
public int sum(int num1, int num2, int num3){
return num1 + num2 + num3;
}
public double sum(double num1, double num2){
return num1 + num2;
}
}
構(gòu)造方法
上面我們說了實例(也就是對象)和屬性,那么當(dāng)我們創(chuàng)建一個實例的時候,通常我們想要把它的屬性也給它設(shè)置好。為了實現(xiàn)這一功能,這時候我們可以添加方法,從而達(dá)到這一目的,以上述設(shè)置寵物的年齡為例。
// 首先創(chuàng)建一個實例
Pet pet = new Pet();
// 接著調(diào)用方法設(shè)置年齡
pet.setAge(3);
// 查看設(shè)置年齡是否成功
System.out.println(pet.getAge());
可以發(fā)現(xiàn)通過上述調(diào)用方法的方式是可以完成這一目的的,但假設(shè)我們需要設(shè)置的屬性很多,此時要全部設(shè)置屬性值時就需要調(diào)用許多次 setter 方法,一旦遺漏一個,則實例內(nèi)部狀態(tài)就紊亂了。那我們就想了,有沒有一種簡單點的方法,能夠讓我們在創(chuàng)建實例對象的同時就把內(nèi)部屬性初始化了呢?
答案是:Yes!??????
這時候我們就可以用到一類特殊的方法 - 構(gòu)造方法,以下就來看看這個構(gòu)造方法的特殊之處。
其實在上面我們創(chuàng)建實例的時候就已經(jīng)調(diào)用了構(gòu)造方法了,只不過它是沒有帶任何參數(shù)的構(gòu)造方法。以上述動物類 Pet 為實例,我們來看看如何編寫它的構(gòu)造方法。
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
// 無參構(gòu)造方法
public Pet(){}
// 帶參構(gòu)造方法
public Pet(String name, String furColor, int age){
this.name = name;
this.furColor = furColor;
this.age = age;
}
}
以上我們只是給出了無參的構(gòu)造方法和帶了所有屬性的構(gòu)造方法,除了上面的兩個構(gòu)造方法之外,我們還可以根據(jù)需要創(chuàng)建帶有部分屬性的構(gòu)造方法。可以看到,相比于普通的方法,構(gòu)造方法有著明顯的特點:
沒有返回值:是的,無論是帶參還是不帶參的構(gòu)造函數(shù),它們都是沒有返回值的,而它也是 每個類默認(rèn)的構(gòu)造方法; 方法名同類名一樣:必須確保構(gòu)造方法的名字和類名一致,否則它就不是構(gòu)造方法了;
有了構(gòu)造方法之后,我們創(chuàng)建實例時就可以直接給它初始化了,而不用再去麻煩地調(diào)用各個 setter 方法來初始化實例。
// 調(diào)用無參構(gòu)造方法
Pet pet1 = new Pet();
// 調(diào)用有參構(gòu)造方法
Pet pet2 = new Pet("柯基", "黃色", 1);
?? Tips:對于實例的屬性值,在未經(jīng)構(gòu)造方法初始化時,各數(shù)據(jù)類型都有默認(rèn)值,整型默認(rèn)值為 0,浮點型默認(rèn)值為 0.0,布爾類型默認(rèn)值為 false,引用類型默認(rèn)值為 null。
引用
既然知道了什么是面向?qū)ο笠约懊嫦驅(qū)ο笾械囊恍╆P(guān)鍵知識點如對象、屬性、方法的概念,那我們就趁熱來看看啥是引用。
所謂引用,其實在之前學(xué)習(xí)的時候就已經(jīng)涉及到了。你是否還記得 String 這個特殊的數(shù)據(jù)類型,其實在我們創(chuàng)建一個 String 對象時,也就創(chuàng)建了一個引用。
String str = new String("村雨遙");
其中 str 既是一個變量,也是一個引用,指向一個值為 "村雨遙" 的 String 對象,后續(xù)如果我們要訪問這個 String 對象,就需要使用 str 這個引用來代表它。

以上我們說的是一個引用指向一個對象,但是我們也可以用多個引用指向同一個對象。就好比你家買了一輛車,不僅你可以開,你老婆也可以開,你爸媽也可以開。而這時候的車就好比一個“對象”,而使用它的人就是多個“引用”。
// 對象 1
String str1 = new String("村雨遙");
// 對象 2
String str2 = str1;
// 對象 3
String str3 = str1;

總結(jié)
XDM,今天的內(nèi)容就到此結(jié)束了。主要對面向?qū)ο笾械念悺ο蟆傩浴⒎椒ā?gòu)造方法以及引用做了介紹,關(guān)于更多面向?qū)ο蟮闹R,我們下一篇文章中再見!
- END -
瀏覽
40
收錄更新:https://github.com/cunyu1943/JavaPark
目錄
前言
類與對象
屬性
方法
構(gòu)造方法
引用
總結(jié)
前言
學(xué)習(xí)了面向?qū)ο缶幊痰乃枷耄裉炀蛠砜纯疵嫦驅(qū)ο缶幊趟枷朐?Java 中的體現(xiàn) - 類。以及有關(guān)類的相關(guān)知識,比如屬性、方法、引用等。
類與對象
以我們?nèi)粘I顬槔覀儸F(xiàn)在很多人都養(yǎng)寵物,而寵物 都有一些共同狀態(tài),比如名字、毛色、年齡…… 這樣一來我們就可以設(shè)計一個叫做類的東西,用來 代表寵物 這一類事物;
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
}
有了這個類之后,它就相當(dāng)于我們的一個模板,根據(jù)這個模板我們就能夠創(chuàng)建一個個具體的寵物,而這些寵物,就叫做 對象;
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
public static void main(String[] args){
// 創(chuàng)建一個對象
Pet dog = new Pet();
dog.name = "博美";
dog.furColor = "white";
dog.age = 1;
Pet cat = new Pet();
cat.name = "英短";
cat.furColor = "orange";
cat.age = 2;
}
}
屬性
每個寵物都有自己的名字、毛色和年齡等一系列狀態(tài),而這些狀態(tài)就叫做一個類的屬性。而屬性的類型既可以是基本類型(比如上述例子中的 int),也可以是引用類型(上述例子中的 String)。而在 Java 語言中,屬性的命名雖然沒有強制規(guī)定,但是一般都是有一套大家通用的命名方法,即:
若屬性是一個單詞組成,那么一般都是小寫。
若屬性是多個單詞組成,那么則采用駝峰法。
關(guān)于更多的命名規(guī)定,推薦參考阿里巴巴出品的 《Java 開發(fā)手冊》,下載地址:https://github.com/cunyu1943/ebooks
方法
而除開屬性之后,每個對象還能夠有許多其他的功能,就像寵物都能吃東西、會叫……,那么這些他們能夠做的事情,在類里邊就可以用 方法 來進(jìn)行表示。所謂方法就是程序中最小的執(zhí)行單元,一般用于封裝重復(fù)且具有獨立功能的代碼,從而提交代碼的復(fù)用性和可維護(hù)性。
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
// 吃東西對應(yīng)的方法
public void eat(){
System.out.println("吃東西!");
}
// 吠叫對應(yīng)的方法
public void bark(){
System.out.println("吠叫!");
}
}
而對于方法,也有需要注意的幾點:
方法是可以有返回值的,如果要返回對應(yīng)值,則其返回值的類型要與返回值相對于,對于不需要返回值的方法,則將其返回類型設(shè)置為 void;方法是可以有參數(shù)的,我們上述例子的方法中都是不帶參數(shù)的,但如果我們有需要,就可以加上自己需要的參數(shù),但此時注意要帶上參數(shù)的類型;
總結(jié)起來,可以分為如下四種方法:
無參無返回值
public void methodName(){
……
}
無參有返回值
public boolean methodName(){
……
return false;
}
有參無返回值
public void methodName(String name){
……
}
有參有返回值
public boolean methodName(String name){
……
return false;
}
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
// 具有返回值的方法
int getAge(){
return age;
}
// 帶有參數(shù)的方法
void setAge(int age){
this.age = age;
}
// 吃東西對應(yīng)的方法
void eat(){
System.out.println("吃東西!");
}
// 叫喚對應(yīng)的方法
void bark(){
System.out.println("叫喚!");
}
}
而對于方法命名的方式,也是有一定講究的。因為一般而言方法都是一個類的動作行為,所以 一般都是以動詞開頭,而如果有多個單詞組合,則除開第一個單詞全部小寫之外,后面每個單詞的第一個字母都要使用大寫。
注意到這里有個關(guān)鍵字 return,它主要用于設(shè)置方法的返回。
如果一個方法沒有返回值,那么此時可以省略不寫,一旦書寫,那么就代表著該方法結(jié)束。比如,以下這個方法的兩種書寫方式最終效果都是一樣的。
帶 return
public void fire(){
System.out.println("開火……");
return;
}
不帶 return
public void fire(){
System.out.println("開火……");
}
而如果一個方法有返回值,那么此時 return 就必須寫,它表示結(jié)束方法并返回結(jié)果。
public int sum(int num1, int num2){
return num1 + num2;
}
此外,既然提到了方法,那肯定少不了重寫和重載了,下面就來看看重寫和重載之間的區(qū)別。
重寫
所謂重寫,其實就是子類對父類中允許訪問的方法的實現(xiàn)過程進(jìn)行加工重新編寫,是面向?qū)ο缶幊讨卸鄳B(tài)性的體現(xiàn),通常發(fā)生在父類和子類之間。
重寫時,方法的參數(shù)和返回值都不能改變。通過重寫,子類可以根據(jù)自己的需要,從而去重新定義區(qū)別于父類的行為。
public class Hero{
public void fight(){
System.out.println("戰(zhàn)斗");
}
}
pubilc class Shooter extends Hero{
@Override
public void fight(){
System.out.println("遠(yuǎn)程戰(zhàn)斗");
}
}
重載
而重載則是讓類以統(tǒng)一的方式來處理不同類型數(shù)據(jù)的一種方式。一個類中存在多個同名方法,但他們具有不同的參數(shù)個數(shù)或者類型。
簡單來說,就是在 Java 的一個類中,我們可以創(chuàng)建多個相同名字的方法,但是這些方法之間的參數(shù)和返回值有所不同。
public class Calc{
public int sum(int num1, int num2){
return num1 + num2;
}
public int sum(int num1, int num2, int num3){
return num1 + num2 + num3;
}
public double sum(double num1, double num2){
return num1 + num2;
}
}
構(gòu)造方法
上面我們說了實例(也就是對象)和屬性,那么當(dāng)我們創(chuàng)建一個實例的時候,通常我們想要把它的屬性也給它設(shè)置好。為了實現(xiàn)這一功能,這時候我們可以添加方法,從而達(dá)到這一目的,以上述設(shè)置寵物的年齡為例。
// 首先創(chuàng)建一個實例
Pet pet = new Pet();
// 接著調(diào)用方法設(shè)置年齡
pet.setAge(3);
// 查看設(shè)置年齡是否成功
System.out.println(pet.getAge());
可以發(fā)現(xiàn)通過上述調(diào)用方法的方式是可以完成這一目的的,但假設(shè)我們需要設(shè)置的屬性很多,此時要全部設(shè)置屬性值時就需要調(diào)用許多次 setter 方法,一旦遺漏一個,則實例內(nèi)部狀態(tài)就紊亂了。那我們就想了,有沒有一種簡單點的方法,能夠讓我們在創(chuàng)建實例對象的同時就把內(nèi)部屬性初始化了呢?
答案是:Yes!??????
這時候我們就可以用到一類特殊的方法 - 構(gòu)造方法,以下就來看看這個構(gòu)造方法的特殊之處。
其實在上面我們創(chuàng)建實例的時候就已經(jīng)調(diào)用了構(gòu)造方法了,只不過它是沒有帶任何參數(shù)的構(gòu)造方法。以上述動物類 Pet 為實例,我們來看看如何編寫它的構(gòu)造方法。
public class Pet{
// 名字
public String name;
// 毛色
public String furColor;
// 年齡
public int age;
// 無參構(gòu)造方法
public Pet(){}
// 帶參構(gòu)造方法
public Pet(String name, String furColor, int age){
this.name = name;
this.furColor = furColor;
this.age = age;
}
}
以上我們只是給出了無參的構(gòu)造方法和帶了所有屬性的構(gòu)造方法,除了上面的兩個構(gòu)造方法之外,我們還可以根據(jù)需要創(chuàng)建帶有部分屬性的構(gòu)造方法。可以看到,相比于普通的方法,構(gòu)造方法有著明顯的特點:
沒有返回值:是的,無論是帶參還是不帶參的構(gòu)造函數(shù),它們都是沒有返回值的,而它也是 每個類默認(rèn)的構(gòu)造方法; 方法名同類名一樣:必須確保構(gòu)造方法的名字和類名一致,否則它就不是構(gòu)造方法了;
有了構(gòu)造方法之后,我們創(chuàng)建實例時就可以直接給它初始化了,而不用再去麻煩地調(diào)用各個 setter 方法來初始化實例。
// 調(diào)用無參構(gòu)造方法
Pet pet1 = new Pet();
// 調(diào)用有參構(gòu)造方法
Pet pet2 = new Pet("柯基", "黃色", 1);
?? Tips:對于實例的屬性值,在未經(jīng)構(gòu)造方法初始化時,各數(shù)據(jù)類型都有默認(rèn)值,整型默認(rèn)值為 0,浮點型默認(rèn)值為 0.0,布爾類型默認(rèn)值為 false,引用類型默認(rèn)值為 null。
引用
既然知道了什么是面向?qū)ο笠约懊嫦驅(qū)ο笾械囊恍╆P(guān)鍵知識點如對象、屬性、方法的概念,那我們就趁熱來看看啥是引用。
所謂引用,其實在之前學(xué)習(xí)的時候就已經(jīng)涉及到了。你是否還記得 String 這個特殊的數(shù)據(jù)類型,其實在我們創(chuàng)建一個 String 對象時,也就創(chuàng)建了一個引用。
String str = new String("村雨遙");
其中 str 既是一個變量,也是一個引用,指向一個值為 "村雨遙" 的 String 對象,后續(xù)如果我們要訪問這個 String 對象,就需要使用 str 這個引用來代表它。

以上我們說的是一個引用指向一個對象,但是我們也可以用多個引用指向同一個對象。就好比你家買了一輛車,不僅你可以開,你老婆也可以開,你爸媽也可以開。而這時候的車就好比一個“對象”,而使用它的人就是多個“引用”。
// 對象 1
String str1 = new String("村雨遙");
// 對象 2
String str2 = str1;
// 對象 3
String str3 = str1;

總結(jié)
XDM,今天的內(nèi)容就到此結(jié)束了。主要對面向?qū)ο笾械念悺ο蟆傩浴⒎椒ā?gòu)造方法以及引用做了介紹,關(guān)于更多面向?qū)ο蟮闹R,我們下一篇文章中再見!
- END -