1. 程式人生 > >JAVA之類,建構函式和構造程式碼塊

JAVA之類,建構函式和構造程式碼塊

類:

        在我們的日常生活中,對於事物的描述無非就是描述事物的屬性和行為。如:人的身高,體重,年齡等稱為屬性,人會說話,會跑步,會做飯等等稱為行為。

        而對於Java中的類,無非也是如此,包含了屬性和行為。

類的定義:

  • 屬性:對應類中的成員變數
  • 行為:對應類中的成員函式

例如:

public class User {
    public User() {
    }
    public User(String username, int age) {
        this.username = username;
        this.age = age;
    }
    private String username;
    private int age;
    public String say(String str){
        return  str;
    }
    public void sleep(){

    }
}

分析:

        首先建立了一個User類,其中使用者名稱(username),年齡(age)是User類的成員變數。說話(say),睡覺(sleep)是User類的行為,而其餘兩個則是User類的無參構造器和有參構造器。

這裡我們提到了一個成員變數,那麼這個成員變數跟我們曾幾何時學習的區域性變數有什麼關係呢?

成員變數和區域性變數的關係:

成員變數:

  • 成員變數直接定義在類中。
  • 成員變數在這個類中有效。
  • 成員變數隨著物件的建立而存在,消失而消失,存在於物件所在的堆記憶體中。
區域性變數:
  • 區域性變數定義在方法中,引數上,語句中。
  • 區域性變數只在自己所屬的大括號內有效,大括號結束,區域性變數失去作用域。
  • 區域性變數存在與棧記憶體中,隨著所屬區域的執行而存在,結束而釋放。

建構函式定義:用於給物件進行初始化,是給與之對應的物件進行初始化,它具有針對性,函式中的一種。

特點:

  • 該函式的名稱和所在類的名稱相同。
  • 不需要定義返回值型別。
  • 該函式沒有具體的返回值。
注:所有的物件建立時,都需要初始化才能使用

注意事項:一個類在定義時,如果沒有定義過建構函式,那麼該類中會自動生成一個空引數的建構函式,為了方便該類建立物件,完成初始化。如果在類中自定義了建構函式,那麼預設的建構函式就沒有了。

一個類中,可以有多個建構函式,因為它們的函式名稱是相同的,所以只能通過引數列表進行區分。所以,一個類中如果出現多個建構函式,它們的存在是以過載體現的。 

上面具體的介紹了一下建構函式的定義,特點等等。但是同樣還有很多疑問,如他和一般函式有那些區別呢和構造程式碼塊有什麼區別呢等等問題。

建構函式和一般函式的區別:

  • 建構函式是在物件建立時,被呼叫,使用者物件的初始化。而且物件的初始化動作只執行一次。
  • 一般函式,是物件建立完成後,需要呼叫才執行,可以被呼叫多次。
  • 建構函式和一般函式的定義格式不同。
構造程式碼塊和建構函式的區別:
  • 構造程式碼塊是給所有的物件進行初始化,也就說,所有的物件都會呼叫一個程式碼塊。只要建立物件,就會呼叫這個程式碼塊。
  • 建構函式是給與之對應的物件進行初始化,它具有針對性。
問:構造程式碼塊和建構函式的執行順序是什麼?

以一個簡單的案例展示一個它們的執行順序:

User類:

public class User {
    private String username;
    private int age;
    {
        System.out.println("構造程式碼塊");
    }

    public User() {
        System.out.println("無參構造方法");
    }
    public User(String username, int age) {
        this.username = username;
        this.age = age;
        System.out.println("有參構造方法");
    }
}

測試類:

    public static void main(String[] args) {
        User u = new User();
        User user = new User("張三",18);
    }

執行結果:
構造程式碼塊
無參構造方法
構造程式碼塊
有參構造方法

結果分析:通過案例的驗證,我們確定了構造程式碼塊在構造方法之前執行構造程式碼塊在每次建立物件時都會執行構造方法之被呼叫一次,而且是針對性的

總結:書讀百遍其義自見。只有基礎紮實了,才能勇攀高峰。加油!!!加油!!!加油!!!