Java 中带有静态块的构造函数重载

javaobject oriented programmingprogramming更新于 2024/11/8 22:36:17

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

在本文中,我们将深入研究 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(具有公共代码的多个构造函数)更加独立和简单。两种方法之间的选择取决于手头项目的具体要求和设计考虑。


相关文章


有用资源