真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java編程中構(gòu)造函數(shù)的使用

Java編程中構(gòu)造函數(shù)的使用?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、移動互聯(lián)產(chǎn)品、全網(wǎng)營銷推廣服務(wù)為核心業(yè)務(wù)。10年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

1.構(gòu)造函數(shù)的概念

很多java新手談到構(gòu)造函數(shù)就會犯暈,我們先來看看什么是構(gòu)造函數(shù)。

首先,構(gòu)造函數(shù)是函數(shù)的一種特殊形式,特殊在哪里?構(gòu)造函數(shù)中不需要定義返回類型(void是無需返回值的意思,請注意區(qū)分兩者),且構(gòu)造函數(shù)的名稱與所在的類名完全一致,其余的與函數(shù)的特性相同,可以帶有參數(shù)列表,可以存在函數(shù)的重載現(xiàn)象。

  2.構(gòu)造函數(shù)的格式

了解了構(gòu)造函數(shù)的基本概念,現(xiàn)在來寫一個(gè)構(gòu)造函數(shù),希望大家可以了解、記憶其格式,通過實(shí)例發(fā)現(xiàn)其與普通函數(shù)的不同之處。

public class Demo{
    private int num=0;
    //無參構(gòu)造函數(shù)
   Demo()
    {
     System.out.println("constractor_run");
    }
   //有參構(gòu)造函數(shù)
    Demo(int num)
    {
      System.out.println("constractor_args_run");
    }
    //普通成員函數(shù)
    public void demoFunction()
    {
      System.out.println("function_run");
    }
  }

在這里要說明一點(diǎn),如果在類中我們不聲明構(gòu)造函數(shù),JVM會幫我們默認(rèn)生成一個(gè)空參數(shù)的構(gòu)造函數(shù);如果在類中我們聲明了帶參數(shù)列表的構(gòu)造函數(shù),JVM就不會幫我們默認(rèn)生成一個(gè)空參數(shù)的構(gòu)造函數(shù),我們想要使用空參數(shù)的構(gòu)造函數(shù)就必須自己去顯式的聲明一個(gè)空參的構(gòu)造函數(shù)。

  3.構(gòu)造函數(shù)的作用

通過開頭的介紹,構(gòu)造函數(shù)的輪廓已經(jīng)漸漸清晰,那么為什么會有構(gòu)造函數(shù)呢?構(gòu)造函數(shù)有什么作用?構(gòu)造函數(shù)是面向?qū)ο缶幊趟枷胨枨蟮?,它的主要作用有以下兩個(gè):

1) 創(chuàng)建對象。任何一個(gè)對象創(chuàng)建時(shí),都需要初始化才能使用,所以任何類想要創(chuàng)建實(shí)例對象就必須具有構(gòu)造函數(shù)。

2) 對象初始化。構(gòu)造函數(shù)可以對對象進(jìn)行初始化,并且是給與之格式(參數(shù)列表)相符合的對象初始化,是具有一定針對性的初始化函數(shù)。

  4.構(gòu)造函數(shù)與普通函數(shù)的區(qū)別

下面來詳細(xì)的分析下構(gòu)造函數(shù)與普通函數(shù)的區(qū)別,通過兩者的一個(gè)對比,希望可以加深對構(gòu)造函數(shù)的概念的理解。

1) 格式不同:

構(gòu)造函數(shù)不存在返回類型,函數(shù)名與所在類的類名一致;

普通函數(shù)有返回類型,函數(shù)名可以根據(jù)需求進(jìn)行命名。

2)調(diào)用時(shí)期不同

構(gòu)造函數(shù)在類的對象創(chuàng)建時(shí)就運(yùn)行;

普通函數(shù)在對象調(diào)用時(shí)才會執(zhí)行。

3)執(zhí)行次數(shù)不同

一個(gè)對象創(chuàng)建后,其構(gòu)造函數(shù)只執(zhí)行一次,就是創(chuàng)建時(shí)執(zhí)行;

一個(gè)對象創(chuàng)建后,其普通函數(shù)可以執(zhí)行多次,取決于對象的調(diào)用次數(shù)。

換一種說法來理解。

(1).一般函數(shù)是用于定義對象應(yīng)該具備的功能。而構(gòu)造函數(shù)定義的是,對象在調(diào)用功能之前,在建立時(shí),應(yīng)該具備的一些內(nèi)容。也就是對象的初始化內(nèi)容。

(2).構(gòu)造函數(shù)是在對象建立時(shí)由jvm調(diào)用,給對象初始化。一般函數(shù)是對象建立后,當(dāng)對象調(diào)用該功能時(shí)才會執(zhí)行。

(3).普通函數(shù)可以使用對象多次調(diào)用,構(gòu)造函數(shù)就在創(chuàng)建對象時(shí)調(diào)用。

(4).構(gòu)造函數(shù)的函數(shù)名要與類名一樣,而普通的函數(shù)只要符合標(biāo)識符的命名規(guī)則即可。

(5).構(gòu)造函數(shù)沒有返回值類型。

  5.構(gòu)造函數(shù)的使用場景

分析了那么多構(gòu)造函數(shù)的信息,那么什么時(shí)候使用構(gòu)造函數(shù)呢?既然構(gòu)造函數(shù)是對新對象進(jìn)行初始化,那么當(dāng)開發(fā)中分析事物的時(shí)候,發(fā)現(xiàn)事物一出現(xiàn)就具備了某些特征時(shí),就可以將其定義在構(gòu)造函數(shù)中,這樣方便快捷,也符合面向?qū)ο蟮木幊趟枷搿?/p>

  6.構(gòu)造函數(shù)在繼承中的特點(diǎn)

在繼承中,子類創(chuàng)建的對象可以調(diào)用父類的公共方法和屬性,那么子類會不會調(diào)用父類的構(gòu)造函數(shù)呢?子類的構(gòu)造函數(shù)與父類的構(gòu)造函數(shù)有什么關(guān)系?子類的構(gòu)造函數(shù)需要注意些什么問題呢?下面來解答這三個(gè)問題。

1) 子類會不會調(diào)用父類的函數(shù)?

子類繼承父類,子類對象初始化時(shí)父類的構(gòu)造函數(shù)也會執(zhí)行,因?yàn)樽宇愋枰褂酶割愔械膶傩裕宇愋枰朗侨绾纬跏蓟?,所以子類初始化必然會調(diào)用父類的構(gòu)造函數(shù)(除非父類沒有屬性,那么這個(gè)類的描述也太差了點(diǎn),或者沒有必要去創(chuàng)建這個(gè)類了)。

2) 子類的構(gòu)造函數(shù)與父類的構(gòu)造函數(shù)有什么關(guān)系?

子類的構(gòu)造函數(shù)中默認(rèn)的第一行有一條隱式語句super(),該語句會訪問父類中的空參數(shù)構(gòu)造函數(shù),除非父類中沒有空參數(shù)的構(gòu)造函數(shù),那么子類構(gòu)造函數(shù)的第一行必須顯式調(diào)用父類的構(gòu)造函數(shù),即super(int x,…) 。

3) 子類的構(gòu)造函數(shù)需要注意些什么問題呢?

子類的構(gòu)造函數(shù)中,super()語句代表調(diào)用了父類的構(gòu)造函數(shù);this()語句代表調(diào)用了子類自身的構(gòu)造函數(shù)。需要注意的是,如果這兩條語句顯式寫出來必須放在構(gòu)造方法的第一行,而且這兩條語句不能共存,一個(gè)構(gòu)造函數(shù)中的第一行要么是this()要么是super()。

為什么在第一行?因?yàn)樾枰紫冗M(jìn)行初始化。

為什么不能共存?因?yàn)閠his()代表的本類的其他構(gòu)造函數(shù),也會去調(diào)用super(),出現(xiàn)了this()就沒有必要再出現(xiàn)super()了,重復(fù)調(diào)用沒有意義。換言之,子類中至少有一個(gè)構(gòu)造函數(shù)的開頭為super(),當(dāng)然可以隱式存在;也就是說至少有一個(gè)構(gòu)造函數(shù)的開頭不是this()。

  7.構(gòu)造函數(shù)的擴(kuò)展

以上的六條已經(jīng)講構(gòu)造函數(shù)的概念、特點(diǎn)、使用等問題介紹的比較清楚,下面來介紹幾點(diǎn)與構(gòu)造函數(shù)相關(guān)的擴(kuò)展性的小知識。

1) 所有的類都有構(gòu)造函數(shù)么?構(gòu)造函數(shù)可以被私有化么?

既然構(gòu)造函數(shù)用于創(chuàng)建對象并且初始化對象,那么當(dāng)一個(gè)類不需要創(chuàng)建對象時(shí),就不需要定義構(gòu)造函數(shù),但是在java中,所有的類都擁有構(gòu)造函數(shù),只是有些類的構(gòu)造函數(shù)對開發(fā)人員來說是隱藏不可見的,這一點(diǎn)與我們的預(yù)期并不相同,不過換個(gè)角度這也很好理解,因?yàn)閖ava是面向?qū)ο蟮?,我們?chuàng)建類的目的就是為了創(chuàng)建對象或者創(chuàng)建其子類對象,所以沒有構(gòu)造函數(shù)的類(無法創(chuàng)建對象的類)并沒有什么意義。

而對于第二個(gè)問題,一個(gè)類不想要外界創(chuàng)建其對象時(shí),就可以將其構(gòu)造函數(shù)私有化,本類中提供返回對象的方法,并且多數(shù)情況下提供的對象是唯一的,單例設(shè)計(jì)模式就是一個(gè)很好的例子,而當(dāng)我們開發(fā)中需要保證對象唯一性的時(shí)候,往往就采取這種做法。

2) 構(gòu)造代碼塊與構(gòu)造函數(shù)有什么相似和不同?

構(gòu)造代碼塊用一對“{}”表示,代碼塊位置沒有具體的要求,但必須與類的成員同等級別,在括號的區(qū)域內(nèi),可以對所有該類的對象進(jìn)行初始化,也就是說該類對象創(chuàng)建時(shí)都會執(zhí)行到該代碼塊,并且其優(yōu)先于構(gòu)造函數(shù)執(zhí)行。構(gòu)造函數(shù)如前面提到的是具有針對性的,而構(gòu)造代碼塊是作用于所有本類對象的。

構(gòu)造函數(shù)要注意的細(xì)節(jié):

(1).當(dāng)類中沒有定義構(gòu)造函數(shù)時(shí),系統(tǒng)會指定給該類加上一個(gè)空參數(shù)的構(gòu)造函數(shù)。這個(gè)是類中默認(rèn)的構(gòu)造函數(shù)。當(dāng)類中如果自定義了構(gòu)造函數(shù),這時(shí)默認(rèn)的構(gòu)造函數(shù)就沒有了。

備注:可以通過javap命令驗(yàn)證。

(2).在一個(gè)類中可以定義多個(gè)構(gòu)造函數(shù),以進(jìn)行不同的初始化。多個(gè)構(gòu)造函數(shù)存在于類中,是以重載的形式體現(xiàn)的。因?yàn)闃?gòu)造函數(shù)的名稱都相同。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


網(wǎng)站題目:Java編程中構(gòu)造函數(shù)的使用
本文URL:http://weahome.cn/article/gogodj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部