在本文中,我们将借助示例了解 Java 构造函数及其类型。

什么是构造函数?

构造函数是 JAVA 中的一种特殊成员函数,其名称与类名相同。它用于在创建对象时对其进行初始化。

示例 1:Java 构造函数

class DemoExample {
    DemoExample() {
        // constructor body
    }
}

这里,DemoExample()是一个构造函数。它与类的名称相同,并且没有任何返回类型,甚至没有void

JAVA中的构造函数没有返回类型,甚至没有void。它在对象创建时或创建实例时调用。


Java 构造函数的类型

  • 无参数构造函数
  • 参数化构造函数
  • 默认构造函数

无参数构造函数

  • 无参构造函数是不接受任何参数的构造函数。

示例 2:Java 无参构造函数

class Rectangle {
    double length, width;

    //No-argument constructor
    Rectangle() {
        setDetails(52, 47);
    }

    void setDetails(double l, double w) {
        length = l;
        width = w;
    }

    void display() {
        System.out.println("-----------------------");
        System.out.println("Length: " + length);
        System.out.println("Width: " + width);
        System.out.println("Area: " + calcArea());
    }

    double calcArea() {
        return length * width;
    }
}

class ConstructorDemo1 {
    public static void main(String[] args) {
        Rectangle r1 = new Rectangle();
        r1.display();
    }
}

示例 2 输出

-----------------------
Length: 52.0
Width: 47.0
Area: 2444.0

参数化构造函数

  • Java 参数化构造函数可以接受一个或多个参数/参数。
  • 此类构造函数称为参数化构造函数或带参数的构造函数。

示例 3:Java 参数化构造函数

class Rectangle {
    double length, width;

    //Parameterized constructor
    Rectangle(double l, double w) {
        setDetails(l, w);
    }

    void setDetails(double l, double w) {
        length = l;
        width = w;
    }

    void display() {
        System.out.println("-----------------------");
        System.out.println("Length: " + length);
        System.out.println("Width: " + width);
        System.out.println("Area: " + calcArea());
    }

    double calcArea() {
        return length * width;
    }
}

class ConstructorDemo2 {
    public static void main(String[] args) {
        Rectangle r1 = new Rectangle(101, 70);
        r1.display();
    }
}

示例 3 输出

-----------------------
Length: 101.0
Width: 70.0
Area: 7070.0

默认构造函数

  • 当用户定义的构造函数没有显式声明时,Java编译器会自动创建一个无参构造函数。这种构造函数称为默认构造函数
  • 每个类都有自己的默认构造函数。
  • 默认构造函数不接受参数。
  • 编译器声明的构造函数使用默认值初始化对象。
  • 一旦用户定义了自己的默认构造函数,编译器将使用它来初始化对象。

示例 4:Java 默认构造函数

class Rectangle {
    double length, width;

    void display() {
        System.out.println("-----------------------");
        System.out.println("Length: " + length);
        System.out.println("Width: " + width);
    }
}

class ConstructorDemo3 {
    public static void main(String[] args) {
        Rectangle r1 = new Rectangle();
        r1.display();
    }
}

示例 4 输出

-----------------------
Length: 0.0
Width: 0.0

任何未初始化的实例变量都将由默认构造函数使用默认值进行初始化。

Type Default Value
boolean false
byte 0
short 0
int 0
long 0L
char u0000
float 0.0f
double 0.0d
object Reference null

总结

  • 实例化对象时会隐式调用构造函数。
  • 构造函数的名称必须与类相同,并且 Java 构造函数不能有返回类型。
  • 如果类不包含任何显式构造函数的声明,Java 编译器会在运行时自动创建默认构造函数。
  • 构造函数的类型:
    • 无参数构造函数:- 不接受任何参数的构造函数
    • 参数化构造函数:- 接受一个或多个参数的构造函数
    • 默认构造函数:如果没有显式定义,Java 编译器会自动创建构造函数。
  • 构造函数不能是static,abstractfinal