亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java編程中構造函數的使用

發布時間:2021-01-15 15:40:37 來源:億速云 閱讀:228 作者:Leah 欄目:編程語言

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

1.構造函數的概念

  很多java新手談到構造函數就會犯暈,我們先來看看什么是構造函數。

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

  2.構造函數的格式

  了解了構造函數的基本概念,現在來寫一個構造函數,希望大家可以了解、記憶其格式,通過實例發現其與普通函數的不同之處。

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

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

  3.構造函數的作用

  通過開頭的介紹,構造函數的輪廓已經漸漸清晰,那么為什么會有構造函數呢?構造函數有什么作用?構造函數是面向對象編程思想所需求的,它的主要作用有以下兩個:

    1) 創建對象。任何一個對象創建時,都需要初始化才能使用,所以任何類想要創建實例對象就必須具有構造函數。

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

  4.構造函數與普通函數的區別

  下面來詳細的分析下構造函數與普通函數的區別,通過兩者的一個對比,希望可以加深對構造函數的概念的理解。

    1) 格式不同:

      構造函數不存在返回類型,函數名與所在類的類名一致;

      普通函數有返回類型,函數名可以根據需求進行命名。

    2)調用時期不同

      構造函數在類的對象創建時就運行;

      普通函數在對象調用時才會執行。

    3)執行次數不同

      一個對象創建后,其構造函數只執行一次,就是創建時執行;

      一個對象創建后,其普通函數可以執行多次,取決于對象的調用次數。

換一種說法來理解。

(1).一般函數是用于定義對象應該具備的功能。而構造函數定義的是,對象在調用功能之前,在建立時,應該具備的一些內容。也就是對象的初始化內容。

(2).構造函數是在對象建立時由jvm調用,給對象初始化。一般函數是對象建立后,當對象調用該功能時才會執行。

(3).普通函數可以使用對象多次調用,構造函數就在創建對象時調用。

(4).構造函數的函數名要與類名一樣,而普通的函數只要符合標識符的命名規則即可。

(5).構造函數沒有返回值類型。

  5.構造函數的使用場景

    分析了那么多構造函數的信息,那么什么時候使用構造函數呢?既然構造函數是對新對象進行初始化,那么當開發中分析事物的時候,發現事物一出現就具備了某些特征時,就可以將其定義在構造函數中,這樣方便快捷,也符合面向對象的編程思想。

  6.構造函數在繼承中的特點

  在繼承中,子類創建的對象可以調用父類的公共方法和屬性,那么子類會不會調用父類的構造函數呢?子類的構造函數與父類的構造函數有什么關系?子類的構造函數需要注意些什么問題呢?下面來解答這三個問題。

    1) 子類會不會調用父類的函數?

      子類繼承父類,子類對象初始化時父類的構造函數也會執行,因為子類需要使用父類中的屬性,子類需要知道是如何初始化的,所以子類初始化必然會調用父類的構造函數(除非父類沒有屬性,那么這個類的描述也太差了點,或者沒有必要去創建這個類了)。

    2) 子類的構造函數與父類的構造函數有什么關系?

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

    3) 子類的構造函數需要注意些什么問題呢?

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

      為什么在第一行?因為需要首先進行初始化。

      為什么不能共存?因為this()代表的本類的其他構造函數,也會去調用super(),出現了this()就沒有必要再出現super()了,重復調用沒有意義。換言之,子類中至少有一個構造函數的開頭為super(),當然可以隱式存在;也就是說至少有一個構造函數的開頭不是this()。

  7.構造函數的擴展

  以上的六條已經講構造函數的概念、特點、使用等問題介紹的比較清楚,下面來介紹幾點與構造函數相關的擴展性的小知識。

    1) 所有的類都有構造函數么?構造函數可以被私有化么?

      既然構造函數用于創建對象并且初始化對象,那么當一個類不需要創建對象時,就不需要定義構造函數,但是在java中,所有的類都擁有構造函數,只是有些類的構造函數對開發人員來說是隱藏不可見的,這一點與我們的預期并不相同,不過換個角度這也很好理解,因為java是面向對象的,我們創建類的目的就是為了創建對象或者創建其子類對象,所以沒有構造函數的類(無法創建對象的類)并沒有什么意義。

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

    2) 構造代碼塊與構造函數有什么相似和不同?

      構造代碼塊用一對“{}”表示,代碼塊位置沒有具體的要求,但必須與類的成員同等級別,在括號的區域內,可以對所有該類的對象進行初始化,也就是說該類對象創建時都會執行到該代碼塊,并且其優先于構造函數執行。構造函數如前面提到的是具有針對性的,而構造代碼塊是作用于所有本類對象的。

構造函數要注意的細節:

(1).當類中沒有定義構造函數時,系統會指定給該類加上一個空參數的構造函數。這個是類中默認的構造函數。當類中如果自定義了構造函數,這時默認的構造函數就沒有了。

備注:可以通過javap命令驗證。

(2).在一個類中可以定義多個構造函數,以進行不同的初始化。多個構造函數存在于類中,是以重載的形式體現的。因為構造函數的名稱都相同。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

腾冲县| 门源| 利津县| 顺义区| 永嘉县| 玉环县| 越西县| 清远市| 白山市| 美姑县| 富平县| 塘沽区| 闵行区| 屯留县| 和田市| 启东市| 苍南县| 永嘉县| 湾仔区| 额敏县| 永胜县| 利津县| 文登市| 香格里拉县| 焉耆| 来凤县| 永清县| 吕梁市| 石嘴山市| 仁化县| 菏泽市| 新营市| 北票市| 新巴尔虎右旗| 界首市| 扶风县| 绥芬河市| 兴义市| 屏山县| 加查县| 昂仁县|