大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java中的構造函數重載教學

Java中的構造函數重載教學

更新時間:2020-09-17 15:26:38 來源:動力節點 瀏覽3106次

我們什么時候需要構造函數重載?

有時候需要用不同的方式初始化一個對象。這可以使用構造函數重載來完成。例如,Thread類有8種類型的構造函數。如果我們不想指定某個線程的任何內容,那么我們可以簡單地使用Thread類的默認構造函數,但是如果我們需要指定線程名稱,那么我們可以使用String參數來調用Thread類的參數化構造函數,如下所示:

Thread?t=?new?Thread?("?MyThread?");

讓我們舉一個例子來理解構造函數重載的需要。考慮以下只有一個構造函數帶三個參數的類Box的實現。

//?An?example?class?to?understand?need?of
//?constructor?overloading.
class?Box
{
????double?width,?height,depth;
?
????//?constructor?used?when?all?dimensions
????//?specified
????Box(double?w,?double?h,?double?d)
????{
????????width?=?w;
????????height?=?h;
????????depth?=?d;
????}
?
????//?compute?and?return?volume
????double?volume()
????{
????????return?width?*?height?*?depth;
????}
}

我們可以看到Box()構造函數需要三個參數。這意味著Box對象的所有聲明必須將三個參數傳遞給Box()構造函數。例如,以下語句目前無效:

Box ob = new Box();

由于Box()需要三個參數,因此在沒有它們的情況下調用它是錯誤的。假設我們只需要一個沒有初始維度的盒子對象,或者想要通過只指定一個將用于所有三個維度的值來初始化一個多維數據集。從Box類的上述實現中,我們無法使用這些選項。

這些類型的初始化對象的不同方式的問題可以通過構造函數重載來解決。下面是帶構造函數重載的類Box的改進版本。

//?Java?program?to?illustrate
//?Constructor?Overloading
class?Box
{
????double?width,?height,?depth;
?
????//?constructor?used?when?all?dimensions
????//?specified
????Box(double?w,?double?h,?double?d)
????{
????????width?=?w;
????????height?=?h;
????????depth?=?d;
????}
?
????//?constructor?used?when?no?dimensions
????//?specified
????Box()
????{
????????width?=?height?=?depth?=?0;
????}
?
????//?constructor?used?when?cube?is?created
????Box(double?len)
????{
????????width?=?height?=?depth?=?len;
????}
?
????//?compute?and?return?volume
????double?volume()
????{
????????return?width?*?height?*?depth;
????}
}
?
//?Driver?code
public?class?Test
{
????public?static?void?main(String?args[])
????{
????????//?create?boxes?using?the?various
????????//?constructors
????????Box?mybox1?=?new?Box(10,?20,?15);
????????Box?mybox2?=?new?Box();
????????Box?mycube?=?new?Box(7);
?
????????double?vol;
?
????????//?get?volume?of?first?box
????????vol?=?mybox1.volume();
????????System.out.println("?Volume?of?mybox1?is?"?+?vol);
?
????????//?get?volume?of?second?box
????????vol?=?mybox2.volume();
????????System.out.println("?Volume?of?mybox2?is?"?+?vol);
?
????????//?get?volume?of?cube
????????vol?=?mycube.volume();
????????System.out.println("?Volume?of?mycube?is?"?+?vol);
????}
}


輸出:

Volume?of?mybox1?is?3000.0
Volume?of?mybox2?is?-1.0
Volume?of?mycube?is?343.0

在構造函數重載中使用this()

可以在構造函數重載期間使用this()引用來從參數化構造函數中隱式調用默認構造函數。請注意,this()應該是構造函數中的第一條語句。

//?Java?program?to?illustrate?role?of?this()?in
//?Constructor?Overloading
class?Box
{
????double?width,?height,?depth;
????int?boxNo;
?
????//?constructor?used?when?all?dimensions?and
????//?boxNo?specified
????Box(double?w,?double?h,?double?d,?int?num)
????{
????????width?=?w;
????????height?=?h;
????????depth?=?d;
????????boxNo?=?num;
????}
?
????//?constructor?used?when?no?dimensions?specified
????Box()
????{
????????//?an?empty?box
????????width?=?height?=?depth?=?0;
????}
?
????//?constructor?used?when?only?boxNo?specified
????Box(int?num)
????{
????????//?this()?is?used?for?calling?the?default
????????//?constructor?from?parameterized?constructor
????????this();
?
????????boxNo?=?num;
????}
?
????public?static?void?main(String[]?args)
????{
????????//?create?box?using?only?boxNo
????????Box?box1?=?new?Box(1);
?
????????//?getting?initial?width?of?box1
????????System.out.println(box1.width);
????}
}


輸出:

0.0

正如我們在上面的程序中看到的那樣,我們在對象創建期間僅使用框編號調用Box(int num)構造函數。通過在其中使用this()語句,默認的構造函數(Box())將從其中隱式調用,它將使用-1初始化Box的尺寸。

注意:構造函數調用應該是構造函數體中的第一條語句。例如,以下片段無效并引發編譯時錯誤。

Box(int?num)
{
????boxNo?=?num;

????/?*構造函數調用必須是第一個
???????語句在構造函數中*?/
????this();?/*錯誤*/
}

在構造函數重載時要注意的重點:

●調用構造函數必須是Java中構造函數的第一條語句。

●如果我們已經定義了任何參數化構造函數,那么編譯器不會創建默認構造函數。反之亦然,如果我們沒有定義任何構造函數,編譯器在編譯過程中會默認創建默認構造函數(也稱為no-arg構造函數)

●在java中,遞歸構造函數調用無效。

構造函數重載與方法重載

嚴格來說,構造函數重載與方法重載有點類似。如果我們想要使用不同數量的參數來初始化一個對象,那么當我們需要基于不同參數的方法的不同定義時,我們必須執行構造函數重載,因為我們會重載方法。

java重載構造方法

以上就是動力節點java培訓機構的小編針對“Java中的構造函數重載教學”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲视频免费在线 | 国产美女亚洲精品久久久久久 | 亚洲欧洲精品视频在线观看 | 狠狠色噜噜狠狠狠狠2018 | 欧美成人一区二区三区 | 一本一本久久a久久精品综合 | 在线看一级片 | 成人影院www在线观看 | 亚洲精品久久久久久久无 | 一区二区在线播放福利视频 | 中日韩欧美一级毛片 | 国产香蕉一区二区在线网站 | 欧美日韩三 | 亚洲欧美日韩国产综合久 | 91亚色视频在线观看 | 欧美在线一区二区三区精品 | 手机看片福利盒子久久 | 九九精品视频在线观看九九 | 色综合久久一区二区三区 | 黄色成人在线网站 | 国产不卡福利 | 老司机精品在线观看 | 亚洲精品第一页中文字幕 | 青青青线在线观看 | 四虎影院com| 国产精品视频公开费视频 | 精品无人乱码一区二区三区 | 久久国产乱子伦免费精品 | 狠狠色丁香婷综合久久 | 亚洲国产精品久久久久久 | 九九99九九精彩网站 | 欧美日韩色视频 | 久草这里只有精品 | 伊人久久久久久久久香港 | 模特精品视频一区 | 国产一区二区精品久久小说 | 狠狠婷婷 | 欧美一级视频免费 | 亚洲精品动漫一区二区三区在线 | 久久精品国产精品亚洲婷婷 | 亚洲精品一区二区三区在线看 |