java之構造函數詳解

我們人出生的時候,有些人一出生之後再起名字的,但是有些人一旦出生就已經起好名字的。那麼我們在java裏面怎麼在對象一旦創建就賦值呢?



1.構造方法的作用:

構造方法作用:對對象進行初始化.

如圖:


2.構造函數與普通函數的區別:

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

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

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

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

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

3.構造函數要注意的細節:

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

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

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

[java] view plain copy
  1. class Perosn{  
  2.     private int id;  
  3.       
  4.     private String name;  
  5.       
  6.     private int age;  
  7.       
  8.     public Perosn(){  
  9.         cry();  
  10.     }  
  11.     public Perosn(int id, String name, int age) {  
  12.         this.id = id;  
  13.         this.name = name;  
  14.         this.age = age;  
  15.     }  
  16.     public int getId() {  
  17.         return id;  
  18.     }  
  19.     public void setId(int id) {  
  20.         this.id = id;  
  21.     }  
  22.     public String getName() {  
  23.         return name;  
  24.     }  
  25.     public void setName(String name) {  
  26.         this.name = name;  
  27.     }  
  28.     public int getAge() {  
  29.         return age;  
  30.     }  
  31.     public void setAge(int age) {  
  32.         this.age = age;  
  33.     }  
  34.       
  35.       
  36.     public void cry(){  
  37.         System.out.println("哇哇哇....");  
  38.     }  
  39.       
  40. }  

問題:要求每個小孩出生都會哭,這份代碼有兩個構造函數,如果需要每個小孩出生都要哭的話,那麼就需要在不同的構造函數中都調用cry()函數,但是這樣子的話造成了代碼重複問題,那麼怎麼解決呢?構造代碼塊。

4.構造代碼塊:

構造代碼塊作用:給所有的對象進行統一的初始化。

[java] view plain copy
  1. class Perosn{  
  2.     private int id;  
  3.       
  4.     private String name;  
  5.       
  6.     private int age;  
  7.       
  8.     {  
  9.         cry();// 每個Person對象創建出來都會執行這裏的代碼  
  10.     }  
  11.       
  12.     public Perosn(){  
  13.         cry();  
  14.     }  
  15.     public Perosn(int id, String name, int age) {  
  16.         this.id = id;  
  17.         this.name = name;  
  18.         this.age = age;  
  19.     }  
  20.     public int getId() {  
  21.         return id;  
  22.     }  
  23.     public void setId(int id) {  
  24.         this.id = id;  
  25.     }  
  26.     public String getName() {  
  27.         return name;  
  28.     }  
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.     public int getAge() {  
  33.         return age;  
  34.     }  
  35.     public void setAge(int age) {  
  36.         this.age = age;  
  37.     }  
  38.       
  39.       
  40.     public void cry(){  
  41.         System.out.println("哇哇哇....");  
  42.     }  
  43.       
  44. }  

具體作用:

  1:給對象進行初始化。對象一建立就運行並且優先於構造函數。

  2:與構造函數區別

    1:構造代碼塊和構造函數的區別,構造代碼塊是給所有對象進行統一初始化, 構造函數給對應的對象初始化。

    2:構造代碼塊的作用:它的作用就是將所有構造方法中公共的信息進行抽取。

例如孩子一出生統一哭

代碼如下:

[java] view plain copy
  1. class Boy {  
  2.   
  3.     String name;  
  4.     int age;  
  5.     String gender;  
  6.      // 構造代碼塊,給所有對象進行初始化。  
  7.     {  
  8.         System.out.println("哭。。。");  
  9.     }  
  10.        
  11.     Boy() {  
  12.         System.out.println("無參構造");  
  13.     }  
  14.   
  15.     Boy(String n, int a, String g) {  
  16.         name = n;  
  17.         age = a;  
  18.         gender = g;  
  19.         System.out.println("有參構造");  
  20.     }  
  21.   
  22.     void run() {  
  23.         System.out.println("跑...");  
  24.     }  
  25.   
  26. }  
  27.   
  28. class Demo9 {  
  29.   
  30.     public static void main(String[] args) {  
  31.   
  32.         System.out.println();  
  33.         Boy b = new Boy();  
  34.   
  35.         Boy b2 = new Boy("jack"1"男");  
  36.   
  37.     }  
  38. }  

發佈了38 篇原創文章 · 獲贊 16 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章