Java中的構造方法(構造函數(shù))與普通方法區(qū)別及說明
一、明白什么是構造方法,什么是普通方法?
所謂的構造方法,是一種特殊的方法,其作用是用來創(chuàng)建對象時初始化對象,即為對象成員變量賦初始值,總是與new運算符一起使用在創(chuàng)建對象的語句中。
特別的,一個類是可以有多個構造函數(shù),可以根據(jù)參數(shù)個數(shù)的不同或者參數(shù)類型的不同來區(qū)分它們,即為構造函數(shù)的重載。
構造方法是類的一個特殊的成員,在類實例化時會自動調(diào)用,其構造方法定義格式如下:
修飾符 方法名(){}
其中需要注意的是:
- 方法名與類名相同;
- 沒有返回值類型;
- 沒有具體的返回值
例如接下來這個例子,在創(chuàng)建對象的時候,對象成員可以由構造函數(shù)方法進行初始化。
new對象時,都是用構造方法進行實例化的;
例如;Test test = new Test("a");
//Test("a");其中這個就是構造函數(shù),“a”為構造方法的形參;
而普通方法是簡單來說就是完成特定功能的代碼塊。
其定義的格式如下:
修飾符 返回值類型 方法名 (參數(shù)類型 參數(shù)名1,參數(shù)類型 參數(shù)名2,…)
{
函數(shù)體;
return 返回值;
}
其中:返回值類型用于限定返回值的數(shù)據(jù)類型。
二、 明白構造方法和普通方法的特點和作用是什么?
1.構造方法的特點
①構造函數(shù)的主要作用是完成對象的初始化工作,(如果寫的類里面沒有構造函數(shù),那么編譯器會默認加上一個無參數(shù)且方法體為空的構造函數(shù)).
它能夠把定義對象時的參數(shù)傳給對象的域。意即當創(chuàng)建一個對象時,這個對象就被初始化.如果這時構造函數(shù)不為空,則會在創(chuàng)建對象時就執(zhí)行構造函數(shù)里面的代碼:
② 構造函數(shù)的名稱必須與類名相同,包括大小寫。
③ 構造函數(shù)沒有返回值的,也不能用void來進行修飾。如果不小心給構造函數(shù)添加了返回類型,那么這將使這個構造函數(shù)變成一個普通方法了,則在運行時將產(chǎn)生找不到構造方法的錯誤。
④一個類可以定義多個構造方法,如果在定義類時定義構造方法,則編譯系統(tǒng)會自動插入一個無參數(shù)的默認構造器,這個構造器不執(zhí)行任何代碼。
⑥構造方法可以重載,以參數(shù)的個數(shù),類型,順序來重載。例如:
public static void main(String[] args) { Phone p1 = new Phone(); p1.show(); System.out.println("----------------"); Phone p2 = new Phone("vivoxplay5",2999); p2.show(); } } class Phone{ private String brand; //品牌 private int price; //價格 //無參構造方法 public Phone(){ System.out.println("無參構造"); } //有參構造器 public Phone(String brand, int price) { this.brand = brand; this.price = price; System.out.println("有參構造"); } public void show(){ System.out.println(brand+"..."+price); } }
構造方法給成員變量賦值的兩種方式的區(qū)別:
/** * 無參構造方法:給屬性進行初始化 * set/get方法:修改屬性值 * @param args */ public static void main(String[] args) { //無參構造創(chuàng)建對象 Phone p1 = new Phone(); p1.setBrand("vivoxplay5"); p1.setPrice(2999); p1.setBrand("vivo"); p1.show(); System.out.println("----------------"); //有參構造創(chuàng)建對象 Phone p2 = new Phone("vivoxplay5",2999); //這種方式并不是改名,而是將原對象變成垃圾 //p2 = new Phone("vivo",2000); p2.show(); } } class Phone{ private String brand; //品牌 private int price; //價格 public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } //無參構造方法 public Phone(){ System.out.println("無參構造"); } //有參構造器 public Phone(String brand, int price) { this.brand = brand; this.price = price; System.out.println("有參構造"); } public void show(){ System.out.println(brand+"..."+price); } }
2.構造方法的作用
【1】 首先,構造函數(shù)用來生成并初始化對象;
【2】其次,構造函數(shù)可以通過函數(shù)的重寫給對象賦初始值,簡化代碼,例如:
在這段代碼中,本文創(chuàng)建了兩個Person對象,分別賦給了初始值,但是如果創(chuàng)建的對象比較多的話,代碼就顯得很重復,這時可以重載Person類里面的構造方法,以在創(chuàng)建對象的時候就賦給它們初始值,這樣就可以省去重復的代碼了:
在這里有一個問題需要特別的注意:
在默認的情況下,一個類會有一個默認的構造函數(shù),這個構造函數(shù)沒有內(nèi)容也沒有返回值,一般會省略。
在這種情況下,編譯器在編譯的時候會默認加上一個無參且方法體為空的函數(shù)。但是,如果類的構造函數(shù)被重寫了,如上述的例子,Person類已經(jīng)有了一個有參數(shù)有方法體的構造函數(shù),這是編譯器就不會再給它默認加上一個無參且方法體為空的構造函數(shù),可以理解為無參的構造函數(shù)被覆蓋了,這種情況稱為沒有默認構造函數(shù)。
而在函數(shù)的繼承里,子類必須調(diào)用父類的構造函數(shù)。但是子類只能繼承父類的默認的構造函數(shù),如果父類沒有默認的構造函數(shù),那么子類不能從父類繼承默認構造函數(shù),這是子類必須使用super來實現(xiàn)對父類的非默認構造函數(shù)的調(diào)用。
因此,在創(chuàng)建對象的時候,需要先利用super來調(diào)用父類的默認的構造函數(shù)來對對象進行初始化,然后調(diào)用子類自己定義的構造函數(shù)。
3.普通方法的特點與作用
【1】普通方法的特點:
① 方法是解決一類問題的步驟的有序組合;
②一個方法必須屬于某一個類的,獨立于類的方法不存在的;
③Java的普通方法可以操作調(diào)用它從屬的對象和參數(shù)列表中的參數(shù);
④普通方法的調(diào)用方式為:對象.方法名(參數(shù)),如接下來的代碼為例:
public void driverCar (int a,double b) { speed= 50; direction= "南方"; }
⑤Java方法只能有一個返回值,但是“值”的形式具有多樣性
【2】作用:
完成特定功能的代碼塊,即根據(jù)自己項目的需要,進行自己編碼完成項目所需要的功能。
三、明白構造方法和普通方法的調(diào)用方式是怎樣調(diào)用的?
1)構造方法的調(diào)用方式
構造方法分為:無參構造方法和有參構造方法
A. 無參構造方法:
public class Student{ public Student(){ //無參構造方法 System.out.println("無參方法被調(diào)用"); } } public class Test { public static void main (String[] args){ Student stu = new Student(); //實例化Student對象 } }//該方法是無參的構造方法,即構造方法不接收參數(shù),執(zhí)行后輸出即可,無參的構造方法被調(diào)用。
B. 有參構造方法
為一個屬性賦值有兩種方法:
①直接訪問對象屬性
②通過setXxx()方法
如果想在實例化對象的同時就為了對象的屬性進行賦值,可以通過帶參數(shù)的構造方法來實現(xiàn)
public class Student{ private String name; private int age; public Student(String name,int age){ //有參構造方法 this.name = name; this.age = age ; } public void show (){ System.out.println("姓名:"+name+"年齡:"+age); } } public class Test02(){ public static void main (String[] args) { Student stu = new Student("王小五",25); //實例化對象的同時賦值 stu.show(); } }
2)普通方法的調(diào)用方式
普通方法分為 : 有明確返回值的方法和沒有明確返回值的方法
A. 有明確返回值的方法的調(diào)用
可以單獨調(diào)用(無意義),輸出調(diào)用,賦值調(diào)用(推薦)。
public static int sum (int a , int b) { int c = a+b; return c ; } public static void main(String[] args) { //sum(10,20); //單獨調(diào)用 //System.out.println(sum(10,20)); //輸出調(diào)用 int sum01 =sum(10,20); //賦值調(diào)用 }
B. 沒有明確返回值的方法調(diào)用(void類型方法的調(diào)用)
只能單獨使用。(如果一個方法沒有明確的返回值類型,方法定義中“返回值類型”就可以用void代替,表示該方法無返回值類型。)
四、注意事項
① Java中的每一類至少有一個構造方法,如果我們沒有去創(chuàng)建,系統(tǒng)自動會為我們創(chuàng)建一個默認的無參構造方法;
②但是如果我們定義了構造方法,系統(tǒng)就不會再為我們提供默認的無參構造方法了。這個時候想使用無參構造方法必須自己定義。因為實例化對象時,不一定會輸入?yún)?shù),那么沒有無參的構造方法,又不輸入?yún)?shù),就會出錯;
③構造方法需要用public來修飾,若使用private,在其他類中無法將其實例化;
④構造方法是可以重載的。所謂重載,是指一個類中可以定義多個方法名相同,但是參數(shù)不同的方法。調(diào)用時,會根據(jù)不同的參數(shù)自動匹配對應的方法。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot+Querydsl?框架實現(xiàn)復雜查詢解析
本篇主要將介紹的是利用spring query dsl框架實現(xiàn)的服務端查詢解析和實現(xiàn)介紹,對SpringBoot?Querydsl?查詢操作感興趣的朋友一起看看吧2022-05-05sentinel?整合spring?cloud限流的過程解析
這篇文章主要介紹了sentinel?整合spring?cloud限流,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03淺談Java中@Autowired和@Inject注解的區(qū)別和使用場景
本文主要介紹了淺談Java中@Autowired和@Inject注解的區(qū)別和使用場景,@Autowired注解在依賴查找方式和注入方式上更加靈活,適用于Spring框架中的依賴注入,而@Inject注解在依賴查找方式上更加嚴格,適用于Java的依賴注入標準,感興趣的可以了解一下2023-11-11