亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 构造器重载详解:规则、链式调用与实战代码

什么是 Java 构造器?

构造器 是在内存分配后立即初始化新创建对象的特殊方法。它将对象字段设为期望值,若省略则设为默认值。定义构造器是可选的;若无提供,编译器提供默认构造器,赋标准默认值:

本教程涵盖:

创建 Java 构造器的规则

  1. 构造器名称必须与类名完全一致。
  2. 不能有返回类型,甚至不能是 void。

示例 1 – 第一个构造器

步骤 1:将以下代码输入 Java 编辑器。

class Demo {
    int value1;
    int value2;
    Demo() {
        value1 = 10;
        value2 = 20;
        System.out.println("Inside Constructor");
    }
    public void display() {
        System.out.println("Value1 === " + value1);
        System.out.println("Value2 === " + value2);
    }
    public static void main(String[] args) {
        Demo d1 = new Demo();
        d1.display();
    }
}

步骤 2:编译运行。输出:

Inside Constructor
Value1 === 10
Value2 === 20

Java 构造器重载

Java 允许类定义多个参数列表不同的构造器。编译器按参数数量和类型区分它们。

Account 类的有效构造器可能如下:

Account(int a);
Account(int a, int b);
Account(String a, int b);

示例 2 – 重载构造器

步骤 1:插入以下代码。

class Demo {
    int value1;
    int value2;
    /* Demo() {
        value1 = 10;
        value2 = 20;
        System.out.println("Inside 1st Constructor");
    } */
    Demo(int a) {
        value1 = a;
        System.out.println("Inside 2nd Constructor");
    }
    Demo(int a, int b) {
        value1 = a;
        value2 = b;
        System.out.println("Inside 3rd Constructor");
    }
    public void display() {
        System.out.println("Value1 === " + value1);
        System.out.println("Value2 === " + value2);
    }
    public static void main(String[] args) {
        Demo d1 = new Demo();
        Demo d2 = new Demo(30);
        Demo d3 = new Demo(30, 40);
        d1.display();
        d2.display();
        d3.display();
    }
}

步骤 2:编译运行。会报错,因为添加了带参构造器后默认构造器 Demo() 缺失。要使用默认构造器,必须显式声明:

Demo() {
    // 默认初始化或自定义逻辑
}

取消注释注释块并重新编译,程序即可正确运行。

构造器链

实例化子类时,其父类构造器先执行——这称为 构造器链。

示例 3 – 父子类链式调用

步骤 1:复制下面代码。

class Demo {
    int value1;
    int value2;
    Demo() {
        value1 = 1;
        value2 = 2;
        System.out.println("Inside 1st Parent Constructor");
    }
    Demo(int a) {
        value1 = a;
        System.out.println("Inside 2nd Parent Constructor");
    }
    public void display() {
        System.out.println("Value1 === " + value1);
        System.out.println("Value2 === " + value2);
    }
    public static void main(String[] args) {
        DemoChild d1 = new DemoChild();
        d1.display();
    }
}
class DemoChild extends Demo {
    int value3;
    int value4;
    DemoChild() {
        // super(5); // 取消注释调用重载父类构造器
        value3 = 3;
        value4 = 4;
        System.out.println("Inside the Constructor of Child");
    }
    public void display() {
        System.out.println("Value1 === " + value1);
        System.out.println("Value2 === " + value2);
        System.out.println("Value3 === " + value3);
        System.out.println("Value4 === " + value4);
    }
}

步骤 2:运行程序。因子类构造器未显式调用 super(),默认 Demo() 先运行。预期输出:

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value3 === 3
Value4 === 4

步骤 3:要调用重载父类构造器 Demo(int a),在子类构造器首行放 super(5);。取消注释该行并重新运行:

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value3 === 3
Value4 === 4

当需要特定父类构造器在子类逻辑前运行时,使用 super(...) 是强制的。

java

  1. 掌握 C# 构造函数重载:灵活创建对象的多种姿势
  2. Java Hello World:你的第一个程序
  3. 精通 Java 构造器:类型、用法与实战示例
  4. Java 枚举构造器详解与实战示例
  5. 精通 Java String.indexOf():定位子字符串与实战示例
  6. 精通 Java String compareTo():语法、用例与实战示例
  7. Java static 详解:静态变量、方法、代码块与实战示例
  8. Java 判断素数(质数)的完整指南与代码实现
  9. Java 打印 1 到 100 之间所有素数:完整代码与步骤解析
  10. Java 中 char 与 String 相互转换:实用示例与最佳实践
  11. Java 判断阿姆斯特朗数(自幂数):for 循环与 while 循环实现
  12. Java 插入排序算法详解:核心原理、完整代码与步骤演示