日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14)

發(fā)布時(shí)間:2025/10/17 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:CHAITANYA SINGH

來(lái)源:通過(guò)示例學(xué)習(xí)Java編程(14):Java中的構(gòu)造函數(shù)-方家話題

構(gòu)造函數(shù)是用來(lái)初始化新創(chuàng)建的對(duì)象的代碼塊。構(gòu)造函數(shù)類似于java中的實(shí)例方法(Instance Method),但它不是一個(gè)方法(Method),因?yàn)樗鼪](méi)有返回類型。簡(jiǎn)而言之,構(gòu)造函數(shù)和方法是不同的(在本指南的末尾將有更多的介紹)。人們經(jīng)常把Java中的構(gòu)造函數(shù)稱為特殊類型的方法。

構(gòu)造函數(shù)的名稱必須與與類名相同,如下圖中的java代碼所示:public class MyClass{//This is the constructorMyClass(){}..}

注意,構(gòu)造函數(shù)名與類名必須一致,并且沒(méi)有返回類型。

構(gòu)造函數(shù)是如何工作的?

下面我們通過(guò)一個(gè)例子來(lái)幫助大家理解構(gòu)造函數(shù)的工作原理。我們先創(chuàng)建一個(gè)名字叫MyClass的類:

MyClass obj = new MyClass();

以上代碼的意思就是通過(guò)new關(guān)鍵字來(lái)創(chuàng)建類MyClass的對(duì)象并調(diào)用這個(gè)類的構(gòu)造函數(shù)來(lái)初始化這個(gè)新創(chuàng)建的對(duì)象,然后把這個(gè)對(duì)象賦值給對(duì)象變量obj。語(yǔ)句new MyClass()表示創(chuàng)建一個(gè)新的關(guān)于類MyClass的對(duì)象并調(diào)用構(gòu)造函數(shù)來(lái)初始化這個(gè)新創(chuàng)建的對(duì)象。

下面我們來(lái)通過(guò)代碼實(shí)例來(lái)解釋什么是新創(chuàng)建對(duì)象的初始化。

一個(gè)簡(jiǎn)單的java構(gòu)造函數(shù)程序

這里我們基于類Hello創(chuàng)建了一個(gè)對(duì)象obj,然后我們顯示這個(gè)對(duì)象的實(shí)例變量name的值。在構(gòu)造函數(shù)里面,我們給變量name賦值“BeginnersBook.com”,在賦值語(yǔ)句里面的this關(guān)鍵字表示引用當(dāng)前的對(duì)象。我們將在下一個(gè)教程中詳細(xì)介紹this關(guān)鍵字。

public class Hello {String name;//ConstructorHello(){this.name = "BeginnersBook.com";}public static void main(String[] args) {Hello obj = new Hello();System.out.println(obj.name);}}

輸出:

BeginnersBook.com

構(gòu)造函數(shù)的類型

構(gòu)造函數(shù)有三種類型:默認(rèn)構(gòu)造函數(shù)、無(wú)參數(shù)構(gòu)造函數(shù)和參數(shù)化構(gòu)造函數(shù)。

默認(rèn)構(gòu)造函數(shù)

如果在類(class)中沒(méi)有定義代碼來(lái)實(shí)現(xiàn)任何構(gòu)造函數(shù),Java編譯器將會(huì)在編譯的字節(jié)碼里面為你插入默認(rèn)構(gòu)造函數(shù)。不會(huì)在源代碼(java文件)中找到它,因?yàn)槟J(rèn)構(gòu)造函數(shù)是在編譯期間由編譯器插入到代碼中,并且存在于.class文件中,所以你在源代碼(java文件)里面是看不到這個(gè)默認(rèn)構(gòu)造函數(shù)的。這個(gè)過(guò)程如下圖所示:

注:如果你在類(class)里面實(shí)現(xiàn)了任何構(gòu)造函數(shù),那么Java編譯器將不會(huì)在你的代碼中插入默認(rèn)構(gòu)造函數(shù)。

無(wú)參數(shù)構(gòu)造函數(shù)

不帶參數(shù)的構(gòu)造函數(shù)稱為無(wú)參數(shù)構(gòu)造函數(shù),其形式看上去與默認(rèn)構(gòu)造函數(shù)相同,但是無(wú)參數(shù)構(gòu)造函數(shù)里面可以有任何代碼,而默認(rèn)構(gòu)造函數(shù)里面則是空的。

注:雖然您可能會(huì)看到一些人聲稱默認(rèn)構(gòu)造函數(shù)和無(wú)參數(shù)構(gòu)造函數(shù)是相同的,但實(shí)際上它們并不相同,只要是你寫(xiě)的構(gòu)造函數(shù),就不能稱之為默認(rèn)構(gòu)造函數(shù)。

示例:無(wú)參數(shù)構(gòu)造函數(shù)

class Demo{public Demo(){System.out.println("This is a no argument constructor");}public static void main(String args[]) {new Demo();}}

輸出:

This is a no argument constructor

參數(shù)化構(gòu)造函數(shù)

帶參數(shù)的構(gòu)造函數(shù)稱為參數(shù)化構(gòu)造函數(shù)。

示例1:參數(shù)化構(gòu)造函數(shù)

在這個(gè)例子中,我們定義的類Employee里面有一個(gè)帶有兩個(gè)參數(shù)(id,name)的參數(shù)化構(gòu)造函數(shù)。用這個(gè)類Employee創(chuàng)建兩個(gè)對(duì)象,obj1和obj2,在創(chuàng)建obj1和obj2時(shí)都調(diào)用了這個(gè)參數(shù)化構(gòu)造函數(shù),分別往里面?zhèn)髁藘商撞煌膮?shù):10245、"Chaitanya"和92232、"Negan",傳進(jìn)去的參數(shù)都賦值給了類的成員變量empId和empName,后面的代碼把obj1和obj2的empId和empName分別打印出來(lái),見(jiàn)下圖:

public class Employee {int empId; String empName; //parameterized constructor with two parametersEmployee(int id, String name){ this.empId = id; this.empName = name; } void info(){System.out.println("Id: "+empId+" Name: "+empName);} public static void main(String args[]){ Employee obj1 = new Employee(10245,"Chaitanya"); Employee obj2 = new Employee(92232,"Negan"); obj1.info(); obj2.info(); } }

輸出:Id: 10245 Name: ChaitanyaId: 92232 Name: Negan

例2:參數(shù)化構(gòu)造函數(shù)

在這個(gè)例子中,我們有兩個(gè)構(gòu)造函數(shù),一個(gè)默認(rèn)構(gòu)造函數(shù)和一個(gè)參數(shù)化構(gòu)造函數(shù)。當(dāng)我們?cè)谑褂胣ew關(guān)鍵字創(chuàng)建對(duì)象而且不傳遞任何參數(shù)時(shí),系統(tǒng)將調(diào)用默認(rèn)構(gòu)造函數(shù),但是如果我們?cè)谑褂胣ew關(guān)鍵字創(chuàng)建對(duì)象的時(shí)候傳遞了參數(shù),那么系統(tǒng)將調(diào)用與傳遞的參數(shù)列表匹配的參數(shù)化構(gòu)造函數(shù)。

class Example2{private int var;//default constructorpublic Example2(){this.var = 10;}//parameterized constructorpublic Example2(int num){this.var = num;}public int getValue(){return var;}public static void main(String args[]){Example2 obj = new Example2();Example2 obj2 = new Example2(100);System.out.println("var is: "+obj.getValue());System.out.println("var is: "+obj2.getValue());}}

輸出:

var is: 10var is: 100

如果我們類中只實(shí)現(xiàn)了參數(shù)化構(gòu)造函數(shù),而沒(méi)有實(shí)現(xiàn)默認(rèn)構(gòu)造函數(shù)(不帶參數(shù)的),會(huì)發(fā)生什么?

class Example3{private int var;public Example3(int num){var=num;}public int getValue(){return var;}public static void main(String args[]){Example3 myobj = new Example3();System.out.println("value of var is: "+myobj.getValue());}}

輸出:編譯報(bào)錯(cuò)

原因:在代碼Example3 myobj = new Example3();中,我們調(diào)用了類Example3里面的不含參數(shù)的默認(rèn)構(gòu)造函數(shù),還記得我們?cè)谏厦嫣岬降?#xff0c;一旦我們?cè)陬惱锩嬗袑?shí)現(xiàn)帶參數(shù)的構(gòu)造函數(shù),那么編譯器就不會(huì)自動(dòng)在背后給我們插入不含參數(shù)的默認(rèn)構(gòu)造函數(shù),而代碼new Example3();調(diào)用了類(class)Example3的不存在的默認(rèn)構(gòu)造函數(shù),當(dāng)然編譯就會(huì)報(bào)錯(cuò)啦!

如果我們從上面的代碼中刪除參數(shù)化構(gòu)造函數(shù)的實(shí)現(xiàn)代碼,那么程序編譯和運(yùn)行都不會(huì)有問(wèn)題,因?yàn)榫幾g器會(huì)在編譯的過(guò)程中將默認(rèn)構(gòu)造函數(shù)插入到您的代碼中。

構(gòu)造函數(shù)鏈

當(dāng)構(gòu)造函數(shù)調(diào)用同一個(gè)類的另一個(gè)構(gòu)造函數(shù)時(shí),這稱為構(gòu)造函數(shù)鏈,見(jiàn)下圖:

super()

每當(dāng)我們調(diào)用子類構(gòu)造函數(shù)時(shí),它都隱式地調(diào)用了父類的構(gòu)造函數(shù),可以把這理解為編譯器在子類構(gòu)造函數(shù)的開(kāi)頭插入了super();語(yǔ)句。

class MyParentClass {MyParentClass(){System.out.println("MyParentClass Constructor");}}class MyChildClass extends MyParentClass{MyChildClass() {System.out.println("MyChildClass Constructor");}public static void main(String args[]) {new MyChildClass();}}

輸出:

MyParentClass ConstructorMyChildClass Constructor

構(gòu)造函數(shù)重載

構(gòu)造函數(shù)重載指的是同一個(gè)類里面定義實(shí)現(xiàn)了多個(gè)不同參數(shù)列表的構(gòu)造函數(shù),雖然這些構(gòu)造函數(shù)的名字都是一樣的(和類名一樣),但在創(chuàng)建這個(gè)類的對(duì)象的時(shí)候,如果傳進(jìn)去的參數(shù)不同,調(diào)用的構(gòu)造函數(shù)也是不同的。

Java的復(fù)制構(gòu)造函數(shù)

復(fù)制構(gòu)造函數(shù)用于將一個(gè)對(duì)象的值復(fù)制到另一個(gè)對(duì)象。

class JavaExample{ String web; JavaExample(String w){ web = w;} /* This is the Copy Constructor, it * copies the values of one object* to the another object (the object* that invokes this constructor)*/JavaExample(JavaExample je){ web = je.web; } void disp(){System.out.println("Website: "+web);} public static void main(String args[]){ JavaExample obj1 = new JavaExample("BeginnersBook"); /* Passing the object as an argument to the constructor* This will invoke the copy constructor*/JavaExample obj2 = new JavaExample(obj1); obj1.disp(); obj2.disp(); } }

輸出:Website: BeginnersBookWebsite: BeginnersBook

要點(diǎn)回顧:

1. 每個(gè)類都有一個(gè)構(gòu)造函數(shù),不管它是普通類還是抽象類。

2. 構(gòu)造函數(shù)不是方法,它們沒(méi)有任何返回類型。

3. 構(gòu)造函數(shù)名應(yīng)該與類名匹配。

4. 構(gòu)造函數(shù)可以使用任何訪問(wèn)說(shuō)明符,它們也可以聲明為私有。在java中可以使用私有構(gòu)造函數(shù),但是私有構(gòu)造函數(shù)的作用域局限在類里面。

5. 我們也可以定義一個(gè)和類名相同的方法,但方法必須要定義返回值的數(shù)據(jù)類型,我們可以據(jù)此判斷和類名相同的方法和構(gòu)造函數(shù)的區(qū)別。

6. 如果我們沒(méi)有在類中定義和實(shí)現(xiàn)任何構(gòu)造函數(shù),編譯器就會(huì)在編譯的時(shí)候自動(dòng)在后臺(tái)的代碼中插入默認(rèn)構(gòu)造函數(shù)。

7. this()和super()這兩個(gè)語(yǔ)句如果放在構(gòu)造函數(shù)代碼里面,一定要放在構(gòu)造函數(shù)代碼里面的第一行。如果我們的代碼里面沒(méi)有這兩個(gè)語(yǔ)句,編譯器會(huì)在后臺(tái)的代碼中自動(dòng)插入這兩個(gè)語(yǔ)句。

8. 構(gòu)造函數(shù)可以重載(overload),但不能重寫(xiě)(override)。這意味著我們可以在類中重載(overload)構(gòu)造函數(shù),但不能重寫(xiě)(override)構(gòu)造函數(shù)。

9. 構(gòu)造函數(shù)不能繼承。

10. 如果父類(super class)沒(méi)有定義無(wú)參數(shù)構(gòu)造函數(shù)(默認(rèn)構(gòu)造函數(shù)),那么編譯器也不會(huì)自動(dòng)在子類(child class)的后臺(tái)代碼里面自動(dòng)插入默認(rèn)構(gòu)造函數(shù)。

11. 接口沒(méi)有構(gòu)造函數(shù)。

12. 抽象類可以有構(gòu)造函數(shù),抽象類的構(gòu)造函數(shù)在創(chuàng)建具體類的對(duì)象的時(shí)候被調(diào)用到。

13. 構(gòu)造函數(shù)代碼里面還可以調(diào)用同一個(gè)類的另一個(gè)構(gòu)造函數(shù),使用方法就是通過(guò)調(diào)用this()方法,例如,在一個(gè)構(gòu)造函數(shù)里面要調(diào)用另一個(gè)帶參數(shù)的構(gòu)造函數(shù),可以用這樣的寫(xiě)法:this(parameter list),這里parameter list就是傳進(jìn)去的幾個(gè)參數(shù)。

構(gòu)造函數(shù)(constructor)與方法(method)的區(qū)別

1. 構(gòu)造函數(shù)的目的是初始化類的對(duì)象,而方法的目的是通過(guò)執(zhí)行java代碼來(lái)執(zhí)行任務(wù)。

2. 構(gòu)造函數(shù)不能是抽象的(abstract)、最終的(final)、靜態(tài)的(static)和同步的(synchronised),而方法則可以是。

3. 構(gòu)造函數(shù)沒(méi)有返回類型,而方法有返回類型。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。