先给出 New Bing 的回答:
在本教程中,我们将探讨Java中的辅助类和工具类的区别。我们首先将研究它们的含义以及如何创建它们。
辅助类提供了Java程序整体运行所需的功能。辅助类包含了其他类用于执行重复任务的方法,这些任务并不是应用程序的核心目的。
顾名思义,它们通过提供一些功能来帮助其他类。
它们包含用于实现琐碎和重复任务的方法,使整个代码库具有模块化和可重用性,可在多个类之间进行重用。
辅助类可以被实例化,并且可以包含实例变量、实例方法和静态方法。
在我们的应用程序中可以存在多个辅助类的实例。当不同的类具有共同的功能时,我们可以将这些功能组合在一起,形成一个辅助类,该类可以在应用程序的某些类中访问。
我们将创建一个示例辅助类以进一步理解这个概念。
要创建一个辅助类,我们使用默认的访问修饰符来定义类名。默认的访问修饰符确保只有在同一个包中的类才能访问这个类、它的方法和变量:
class MyHelperClass {
public double discount;
public MyHelperClass(double discount) {
if (discount > 0 && discount < 1) {
this.discount = discount;
}
}
public double discountedPrice(double price) {
return price - (price * discount);
}
public static int getMaxNumber(int[] numbers) {
if (numbers.length == 0) {
throw new IllegalArgumentException("确保数组不为空");
}
int max = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
return max;
}
public static int getMinNumber(int[] numbers) {
if (numbers.length == 0) {
throw new IllegalArgumentException("确保数组不为空");
}
int min = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] < min) {
min = numbers[i];
}
}
return min;
}
}
在定义了类之后,我们可以添加尽可能多的相关实例方法和静态方法。
辅助类可以有实例方法,因为它们可以被实例化。
从上面的代码片段中可以看到,我们在MyHelperClass
中既有实例方法,也有静态方法:
@Test
void whenCreatingHelperObject_thenHelperObjectShouldBeCreated() {
MyHelperClass myHelperClassObject = new MyHelperClass(0.10);
assertNotNull(myHelperClassObject);
assertEquals(90, myHelperHelperClass myHelperClassObject = new MyHelperClass(0.10);
assertNotNull(myHelperClassObject);
assertEquals(90, myHelperClassObject.discountedPrice(100.00));
int[] numberArray = {15, 23, 66, 3, 51, 79};
assertEquals(79, MyHelperClass.getMaxNumber(numberArray));
assertEquals(3, MyHelperClass.getMinNumber(numberArray));
}
从测试中可以看到,创建了一个辅助对象。辅助类中的静态方法通过类名访问。 收到。
在Java中,工具类是一种提供静态方法的类,可在应用程序中被访问和使用。工具类中的静态方法用于执行应用程序中的常见例程。
工具类无法被实例化,有时是无状态的,没有静态变量。我们将工具类声明为final
,并且其所有方法必须是static
。
由于我们不希望工具类被实例化,因此引入了私有构造函数。拥有私有构造函数意味着Java不会为我们的工具类创建默认构造函数。构造函数可以为空。
工具类的目的是为程序内部执行某些功能提供方法,而主要类则专注于解决核心问题。
工具类的方法通过类名访问。这使得我们的代码在保持模块化的同时更具灵活性。
Java中有诸如java.util.Arrays
、java.lang.Math
、java.util.Scanner
、java.util.Collections
等工具类。
创建工具类与创建辅助类并没有太大的区别。在创建工具类时有一些细微的差别。
要创建一个工具类,我们使用public
访问修饰符,并将类声明为final
。在创建工具类时使用final
关键字意味着该类将保持不可更改。它不能被继承或实例化。
让我们创建一个名为MyUtilityClass
的工具类:
public final class MyUtilityClass {
private MyUtilityClass(){}
public static String returnUpperCase(String stringInput) {
return stringInput.toUpperCase();
}
public static String returnLowerCase(String stringInput) {
return stringInput.toLowerCase();
}
public static String[] splitStringInput(String stringInput, String delimiter) {
return stringInput.split(delimiter);
}
}
另一个需要遵守的规则是,工具类的所有方法都是static
的,并具有public
访问修饰符。
由于工具类中只有静态方法,这些方法只能通过类名访问:
@Test
void whenUsingUtilityMethods_thenAccessMethodsViaClassName(){
assertEquals(MyUtilityClass.returnUpperCase("iniubong"), "INIUBONG");
assertEquals(MyUtilityClass.returnLowerCase("AcCrA"), "accra");
}
上述示例中,工具类中的returnUpperCase()
和returnLowerCase()
方法只能通过类名来访问。
Java 中的辅助类(Helper) 和工具类(Utility) 通常具有相同的目的。有时开发人员会将这两个术语互换使用。
这是因为它们通过提供处理某些任务的方法来为其他类提供补充功能,这些任务并不是应用程序的核心功能。
尽管它们非常相似,但 它们之间存在一些细微的差别:
在本文中,我们探讨了Java中的辅助类和工具类的概念。我们发现辅助类和工具类在性质上非常相似,因为它们在应用程序中的使用方式相似。
我们详细介绍了如何创建辅助类和工具类。
在使用 Java 创建健壮的应用程序时,我们应始终记住将执行重复任务的相似但独立的方法分组到辅助类或工具类中。有时,软件工程师和开发人员在创建工具类或辅助类时可能违背 Java 的面向对象编程范式,但它们使我们的代码库具有模块化和可重用性。
与往常一样,本教程的代码可以在GitHub上找到。