1. 程式人生 > >Java基礎-建構函式的詳解

Java基礎-建構函式的詳解

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



1.構造方法的作用:

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

如圖:


2.建構函式與普通函式的區別:

(1). 一般函式是用於定義物件應該具備的功能。而建構函式定義的是,物件在呼叫功能之前,在建立時,應該具備的一些內容。也就是物件的初始化內容。

(2). 建構函式是在物件建立時由jvm呼叫給物件初始化。一般函式是物件建立後,當物件呼叫該功能時才會執行。

(3). 普通函式可以使用物件多次呼叫,建構函式就在建立物件時呼叫。

(4). 建構函式的函式名要與類名一樣,而普通的函式只要符合識別符號的命名規則即可。

(5). 建構函式沒有返回值型別。

3.建構函式要注意的細節:

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

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

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

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

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

4.構造程式碼塊:

構造程式碼塊作用:給所有的物件進行統一的初始化。

[java] view plain copy  print?
  1. class Perosn{  
  2.     privateint id;  
  3.     private String name;  
  4.     privateint age;  
  5.     {  
  6.         cry();// 每個Person物件創建出來都會執行這裡的程式碼
  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.     publicint getId() {  
  17.         return id;  
  18.     }  
  19.     publicvoid setId(int id) {  
  20.         this.id = id;  
  21.     }  
  22.     public String getName() {  
  23.         return name;  
  24.     }  
  25.     publicvoid setName(String name) {  
  26.         this.name = name;  
  27.     }  
  28.     publicint getAge() {  
  29.         return age;  
  30.     }  
  31.     publicvoid setAge(int age) {  
  32.         this.age = age;  
  33.     }  
  34.     publicvoid cry(){  
  35.         System.out.println("哇哇哇....");  
  36.     }  
  37. }  

具體作用:

  1:給物件進行初始化。物件一建立就執行並且優先於建構函式。

  2:與建構函式區別

    1:構造程式碼塊和建構函式的區別,構造程式碼塊是給所有物件進行統一初始化, 建構函式給對應的物件初始化。

    2:構造程式碼塊的作用:它的作用就是將所有構造方法中公共的資訊進行抽取。

例如孩子一出生統一哭

程式碼如下:

[java] view plain copy  print?
  1. class Boy {  
  2.     String name;  
  3.     int age;  
  4.     String gender;  
  5.      // 構造程式碼塊,給所有物件進行初始化。
  6.     {  
  7.         System.out.println("哭。。。");  
  8.     }  
  9.     Boy() {  
  10.         System.out.println("無參構造");  
  11.     }  
  12.     Boy(String n, int a, String g) {  
  13.         name = n;  
  14.         age = a;  
  15.         gender = g;  
  16.         System.out.println("有參構造");  
  17.     }  
  18.     void run() {  
  19.         System.out.println("跑...");  
  20.     }  
  21. }  
  22. class Demo9 {  
  23.     publicstaticvoid main(String[] args) {  
  24.         System.out.println();  
  25.         Boy b = new Boy();  
  26.         Boy b2 = new Boy("jack"1"男");  
  27.     }  
  28. }