【发布时间】:2023-03-25 06:20:01
【问题描述】:
我正在使用名为 addCustomer 的静态方法在 Java 中创建一个类,该方法为我返回此类的一个实例,如下所示:
import java.util.ArrayList;
public class Customer {
private ArrayList<Double> transactions;
private String name;
public static Customer addCustomer(String name, Double transaction){
this.name = name;
return new Customer();
}
}
它在 addCustomer 方法的第一行给我一个错误
this.name = name;
因为我不能在静态方法中使用非静态变量,这对我来说完全有意义。但后来我尝试为同一个类创建一个私有构造函数(具有名称和事务值),并在我的 addCustomer 方法中使用它而不是 Customer()。 像这样:
private Customer(String name, Double transaction){
this.name = name;
transactions = new ArrayList<Double>();
transactions.add(transaction);
}
public static Customer addCustomer(String name, Double transaction){
return new Customer(name,transaction);
}
由于静态方法 addCustomer(),我认为我必须在构造函数中放置静态修饰符,但我的 IDE 说它不允许在构造函数中。而且,这对我来说没有任何意义,我可以像这样使用 addCustomer() 方法(在构造函数中没有静态),那么即使它不是静态方法和里面的变量,为什么我仍然可以使用它不是很好吗?
【问题讨论】:
-
这是因为您将构造函数与
new构造一起使用。这与调用方法完全不同。 -
在静态方法中没有
this -
实例方法,你调用一个实例。静态方法,你调用一个类。当您使用
new运算符时,会在新实例上调用构造函数。它们与方法不同。 -
构造函数是特殊的。您不需要现有实例来调用它们(这使它们感觉是静态的),但它们可以访问
this引用(这使它们感觉非静态)。最好将它们视为与所有其他方法不同的自己的东西。