Java 为什么我不´;在我的构造函数方法中不需要使用static?

Java 为什么我不´;在我的构造函数方法中不需要使用static?,java,oop,Java,Oop,我正在用Java创建一个名为addCustomer的静态方法的类,该方法为我返回该类的一个实例,如下所示: import java.util.ArrayList; public class Customer { private ArrayList<Double> transactions; private String name; public static Customer addCustomer(String name, Double

我正在用Java创建一个名为addCustomer的静态方法的类,该方法为我返回该类的一个实例,如下所示:

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方法中使用它而不是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);
    }
私人客户(字符串名称,双重交易){
this.name=名称;
事务=新的ArrayList();
交易。添加(交易);
}
公共静态客户addCustomer(字符串名称,双事务){
返回新客户(名称、交易);
}

我认为由于静态方法addCustomer(),我必须在构造函数中放入静态修饰符,但我的IDE说构造函数中不允许使用静态修饰符。而且,这对我来说没有任何意义,我可以像这样使用addCustomer()方法(没有静态in构造函数),那么为什么我仍然可以使用它,即使它不是一个静态方法,并且其中的变量也不是静态的呢?

这就是我要做的:

import java.util.ArrayList;

public class Customer {
    private ArrayList<Double> transactions;
    private String name;

    public Customer(String name, Double transaction) {
        this.name = name;
    }
}

构造函数方法需要与类同名(区分大小写)。它还需要是
public ClassName
,没有通常的返回值。

这是因为您将构造函数与
new
构造一起使用。这与调用一个方法完全不同。在静态方法中没有
这个
,实例方法就是调用一个实例。静态方法,调用一个类。当您使用
new
操作符时,会对新实例调用构造函数。它们与方法不同。构造函数是特殊的。您不需要现有实例来调用它们(这使它们感觉是静态的),但它们可以访问
引用(这使它们感觉是非静态的)。最好把它们看作是自己的东西,这与所有其他方法不同。
import java.util.ArrayList;

public class Customer {
    private ArrayList<Double> transactions;
    private String name;

    public Customer(String name, Double transaction) {
        this.name = name;
    }
}
import java.util.ArrayList;

public class Customer {
    private ArrayList<Double> transactions;
    private String name;

    public Customer(String name, Double transaction) {
    this.name = name;
    }

    public static Customer addCustomer(String name, Double transaction) {
        return new Customer(name, transaction);
    }
}