鍍金池/ 教程/ Java/ Java構(gòu)造器(構(gòu)造方法)
Java for循環(huán)
Java接口
Java是什么?
Java命名約定
java中方法重載和方法重寫的區(qū)別
Java運(yùn)算符
Java抽象類
Java快速入門
Java實(shí)例初始化程序塊
Java靜態(tài)綁定和動(dòng)態(tài)綁定
Java do-while循環(huán)
Java對(duì)象克隆
Java Object類
Java聚合
Java繼承
Java this關(guān)鍵字
Java虛擬機(jī)內(nèi)部體系結(jié)構(gòu)
Java構(gòu)造器(構(gòu)造方法)
Eclipse安裝和配置
Java多態(tài)
Java方法重載
Java while循環(huán)
Java教程
Java按值調(diào)用和引用調(diào)用
Java strictfp關(guān)鍵字
Java封裝
Java語言特點(diǎn)
Java數(shù)組
Java instanceof運(yùn)算符
Java包裝類
Java命令行參數(shù)
Java包
Java面向?qū)ο螅∣OP)概念
簡(jiǎn)單Java程序
Java基礎(chǔ)實(shí)例程序
Java對(duì)象和類
Java continue語句
Java抽象類和接口的區(qū)別
C++ VS Java比較
Java if/else語句
Java switch語句
Java歷史
Java變量和數(shù)據(jù)類型
安裝Java環(huán)境(Linux)
Java JDK安裝和配置
Hello Java程序的內(nèi)部細(xì)節(jié)
Java break語句
Java方法重寫
Java Unicode編碼系統(tǒng)
怎么樣開始學(xué)習(xí)Java編程?
對(duì)象和類之間的區(qū)別
Java訪問修飾符
Java super關(guān)鍵字
Java注釋
JDK,JRE和JVM之間的區(qū)別
Java final關(guān)鍵字
Java static關(guān)鍵字

Java構(gòu)造器(構(gòu)造方法)

java中的構(gòu)造方法是一種特殊類型的方法,用于初始化對(duì)象。Java構(gòu)造函數(shù)在對(duì)象創(chuàng)建時(shí)被調(diào)用。 它構(gòu)造值,即提供對(duì)象的數(shù)據(jù),這是為什么它被稱為構(gòu)造函數(shù)。

創(chuàng)建java構(gòu)造函數(shù)的規(guī)則

構(gòu)造函數(shù)基本上定義了兩個(gè)規(guī)則。它們分別如下 -

  1. 構(gòu)造函數(shù)名稱必須與其類名稱相同
  2. 構(gòu)造函數(shù)必須沒有顯式返回類型

Java構(gòu)造函數(shù)的類型

有兩種類型的構(gòu)造函數(shù):

  1. 默認(rèn)構(gòu)造函數(shù)(無參數(shù)構(gòu)造函數(shù))
  2. 參數(shù)化構(gòu)造函數(shù)

1. Java默認(rèn)構(gòu)造函數(shù)(無參數(shù)構(gòu)造函數(shù))

沒有參數(shù)的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)的語法如下:

<class_name>(){}

默認(rèn)構(gòu)造函數(shù)的示例:

在這個(gè)例子中,在Bike類中創(chuàng)建了無參數(shù)(no-arg)構(gòu)造函數(shù)。它將在對(duì)象創(chuàng)建時(shí)被調(diào)用。

class Bike1 {
    Bike1() {
        System.out.println("Bike is created");
    }

    public static void main(String args[]) {
        Bike1 b = new Bike1();
    }
}

上面的示例代碼運(yùn)行結(jié)果如下 -

Bike is created

規(guī)則:如果類中沒有構(gòu)造函數(shù),編譯器會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)構(gòu)造函數(shù)。

問題: 默認(rèn)構(gòu)造函數(shù)的目的是什么?

默認(rèn)構(gòu)造函數(shù)根據(jù)類型為對(duì)象提供默認(rèn)值,如:0,null等。

顯示默認(rèn)值的默認(rèn)構(gòu)造函數(shù)示例

class Student3 {
    int id;
    String name;

    void display() {
        System.out.println(id + " " + name);
    }

    public static void main(String args[]) {
        Student3 s1 = new Student3();
        Student3 s2 = new Student3();
        s1.display();
        s2.display();
    }
}

運(yùn)行上面代碼,得到如下結(jié)果 -

0 null
0 null

解釋: 在上面的類中,代碼中并沒有創(chuàng)建任何構(gòu)造函數(shù),但編譯器自動(dòng)提供了一個(gè)默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)分別為字段:idname 分別提供了0null值。

2. Java參數(shù)化構(gòu)造函數(shù)

具有參數(shù)的構(gòu)造函數(shù)稱為參數(shù)化構(gòu)造函數(shù)。

問題: 為什么使用參數(shù)化構(gòu)造函數(shù)?
回答: 參數(shù)化構(gòu)造函數(shù)用于為不同對(duì)象提供不同初始化的值。

參數(shù)化構(gòu)造函數(shù)的示例
在這個(gè)例子中,我們創(chuàng)建了具有兩個(gè)參數(shù)的Student類的構(gòu)造函數(shù)。構(gòu)造函數(shù)中柯有任意數(shù)量的參數(shù)。

class Student4 {
    int id;
    String name;

    Student4(int i, String n) {
        id = i;
        name = n;
    }

    void display() {
        System.out.println(id + " " + name);
    }

    public static void main(String args[]) {
        Student4 s1 = new Student4(111, "Karan");
        Student4 s2 = new Student4(222, "Aryan");
        s1.display();
        s2.display();
    }
}

運(yùn)行上面代碼,得到如下結(jié)果 -

111 Karan
222 Aryan

Java構(gòu)造函數(shù)重載

構(gòu)造方法重載是Java中的一種技術(shù),一個(gè)類可以有任何數(shù)量的參數(shù)列表不同的構(gòu)造函數(shù)。編譯器通過構(gòu)造函數(shù)參數(shù)列表中的參數(shù)數(shù)量及其類型來區(qū)分這些構(gòu)造函數(shù)。

構(gòu)造函數(shù)重載示例

class Student5 {
    int id;
    String name;
    int age;

    Student5(int i, String n) {
        id = i;
        name = n;
    }

    Student5(int i, String n, int a) {
        id = i;
        name = n;
        age = a;
    }

    void display() {
        System.out.println(id + " " + name + " " + age);
    }

    public static void main(String args[]) {
        Student5 s1 = new Student5(111, "Karan");
        Student5 s2 = new Student5(222, "Aryan", 25);
        s1.display();
        s2.display();
    }
}

上面示例代碼,執(zhí)行后輸出結(jié)果如下 -

111 Karan 0
222 Aryan 25

java的構(gòu)造函數(shù)和方法之間的區(qū)別

構(gòu)造函數(shù)和方法之間有許多區(qū)別,它們?nèi)缦旅媪谐?-

Java構(gòu)造函數(shù) Java方法
構(gòu)造器用于初始化對(duì)象的狀態(tài)(數(shù)據(jù))。 方法用于暴露對(duì)象的行為。
構(gòu)造函數(shù)不能有返回類型。 方法一般都有返回類型。
構(gòu)造函數(shù)隱式調(diào)用。 方法要顯式調(diào)用。
如果沒有指定任何構(gòu)造函數(shù),java編譯器提供一個(gè)默認(rèn)構(gòu)造函數(shù)。 在任何情況下編譯器都不會(huì)提供默認(rèn)的方法調(diào)用。
構(gòu)造函數(shù)名稱必須與類名稱相同。 方法名稱可以或可以不與類名稱相同(隨意)。

Java拷貝構(gòu)造函數(shù)

在Java中沒有復(fù)制構(gòu)造函數(shù)。但是可以將一個(gè)對(duì)象的值復(fù)制到另一個(gè)中,就像C++中的復(fù)制構(gòu)造函數(shù)。

在java中有很多方法可以將一個(gè)對(duì)象的值復(fù)制到另一個(gè)對(duì)象中。它們分別是:

  • 通過構(gòu)造函數(shù)
  • 通過將一個(gè)對(duì)象的值分配給另一個(gè)對(duì)象
  • 通過Object類的clone()方法

在這個(gè)例子中,使用java構(gòu)造函數(shù)將一個(gè)對(duì)象的值復(fù)制到另一個(gè)對(duì)象中。

class Student6 {
    int id;
    String name;

    Student6(int i, String n) {
        id = i;
        name = n;
    }

    Student6(Student6 s) {
        id = s.id;
        name = s.name;
    }

    void display() {
        System.out.println(id + " " + name);
    }

    public static void main(String args[]) {
        Student6 s1 = new Student6(111, "Karan");
        Student6 s2 = new Student6(s1);
        s1.display();
        s2.display();
    }
}

上面示例代碼,執(zhí)行后輸出結(jié)果如下 -

111 Karan
111 Karan

不使用構(gòu)造函數(shù)復(fù)制值

可以通過將對(duì)象值分配給另一個(gè)對(duì)象,將一個(gè)對(duì)象的值復(fù)制到另一個(gè)對(duì)象中。 在這種情況下,不需要?jiǎng)?chuàng)建構(gòu)造函數(shù)。

class Student7 {
    int id;
    String name;

    Student7(int i, String n) {
        id = i;
        name = n;
    }

    Student7() {
    }

    void display() {
        System.out.println(id + " " + name);
    }

    public static void main(String args[]) {
        Student7 s1 = new Student7(111, "Karan");
        Student7 s2 = new Student7();
        s2.id = s1.id;
        s2.name = s1.name;
        s1.display();
        s2.display();
    }
}

上面示例代碼,執(zhí)行后輸出結(jié)果如下 -

111 Karan
111 Karan

問題1: 構(gòu)造函數(shù)有返回值 ?

回答: 是的,構(gòu)造函數(shù)返回當(dāng)前類的實(shí)例(不能指定返回值類型,但它會(huì)返回一個(gè)值)。

問題2: 可以構(gòu)造函數(shù)執(zhí)行其他任務(wù)而不是初始化?

回答: 是的,比如:對(duì)象創(chuàng)建,啟動(dòng)線程,調(diào)用方法等。你可以像在方法中執(zhí)行的任何操作一樣,在構(gòu)造函數(shù)中也可以做到這些。