Java 中使用静态块的构造函数重载


实例化对象的行为会调用其对应的构造函数,这是面向对象编程中许多功能的基础。值得注意的是,在任何使用对象的程序中都始终存在一个默认构造函数——由编译器无缝创建,方便使用。

在本讨论中,我们将深入探讨在 Java 中使用静态块的构造函数重载。构造函数重载是在一个类中定义多个具有不同参数的构造函数的概念。

语法

Public class class_name {
   Class_name() {
   }
   Class_name(par1, par2..) {
   }
}

使用带有静态块的构造函数可以在对象初始化期间提供更多功能和灵活性。

算法

使用静态块的构造函数重载,请按照以下步骤操作:

  • 步骤 1 - 创建一个具有多个具有不同参数的构造函数的类。

  • 步骤 2 - 使用“static”关键字创建一个静态块

    此块将在类加载到内存中时执行一次。

  • 步骤 3 - 加载类时,将首先执行静态块,然后在创建对象时执行构造函数。

  • 步骤 4 - 将根据提供的参数调用构造函数。

方法 1:定义单独的静态块

此方法涉及分别定义静态块和重载的构造函数。

示例

Class Class_name{
   Static {
   }
   Public class_name(){
   }
   Public class_name(int value) {
   }
   Public class_name(string name) {
   }
   //Other methods
}

在此方法中,类可以具有参数列表不同的重载构造函数,这些构造函数还包括初始化代码。还有一个单独的静态块用于类的静态初始化。此块将执行一次。

示例

在此示例中,我们将演示方法 1

class Emp { int id, exp;String name;static String company;
   static { company = "XYZ Corp"; }
   public Emp(){
      System.out.println("-"
                           + "\t"
                           + "-"
                           + "\t"
                           + "-"
                           + "\t"
                           + "\t"
                           + "-"); }
   public Emp(int id, String name){ System.out.println(id + "\t" + name + "\t"
                           + company + "\t" + exp); }
   public Emp(int id, String name, int exp) {
      System.out.println(id + "\t" + name + "\t"  + company + "\t" + exp); }
}
public class Way2Class {
   public static void main(String[] args) {
      System.out.println("Id"
                           + "\t"
                           + "Name"
                           + "\t"
                           + "Company"
                           + "\t"
                           + "Exp");
      Emp obj1 = new Emp(001, "Apoorva");
      Emp obj2 = new Emp(004, "Anu", 10);
      Emp obj3 = new Emp();
   }
}

输出

Id	Name	Company	Exp
1	Apoorva	XYZ Corp	0
4	Anu	XYZ Corp	10
-	-	-		-

解释

在一间公司里,任何工龄的员工都在同一家公司。因此,如果公司变量中没有传入值,则会自动使用同一家公司名称设置公司名称。为此,我们使用了静态块。

方法 2:从构造函数调用静态方法

要执行共享的初始化代码,可以在类中声明静态方法,并从构造函数中调用它们。

示例

public class Way2Class {
   private int value;
   private String name;

   private static void initialize() {
      System.out.println("Common initialization code");
   }

   public Way2Class() {
      initialize();
      value = 0;
      name = "Default";
      System.out.println("No-arg constructor called");
   }

   public Way2Class(int value) {
      initialize();
      this.value = value;
      name = "Value";
      System.out.println("Int constructor called");
   }

   public Way2Class(String name) {
      initialize();
      value = 0;
      this.name = name;
      System.out.println("String constructor called");
   }

   public static void main(String[] args) {
      Way2Class obj1 = new Way2Class();
      Way2Class obj2 = new Way2Class(10);
      Way2Class obj3 = new Way2Class("Hello");
   }
}

输出

Common initialization code
No-arg constructor called
Common initialization code
Int constructor called
Common initialization code
String constructor called

解释

此图例中的 Way2Class 类包含三个构造函数,每个构造函数都调用静态 initialize() 方法来执行共享的初始化代码。每个构造函数都调用在类中指定的静态函数 initialize()。在创建对象时,将根据提供的参数调用相应的构造函数,并使用静态方法 initialize() 执行公共初始化代码。

方法 1 和方法 2 的比较

标准

方法 1

方法 2

类型

单独的静态块

从构造函数调用静态方法

方法

使用不同的构造函数重用公共静态方法。

使用公共构造函数的单独静态方法。

方法逻辑

使用静态块的构造函数重载

使用静态块的构造函数重载

结论

虽然方法 2(从构造函数调用静态方法)在代码组织和继承方面提供了更大的灵活性,但方法 1(具有公共代码的多个构造函数)更独立且更简单。两种方法的选择取决于项目的具体要求和设计考虑。

更新于:2023年8月1日

411 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.