如果您尝试编译此类,则会
在 Data 类型的构造函数中收到一条错误消息,作为
非法修饰符。仅允许公开,受保护和私有。

静态属于类,构造函数属于对象
我们知道静态方法,静态块或变量属于该类。而构造函数属于该对象,并在使用 new 运算符创建实例时调用。由于构造函数不是类属性,因此有理由认为它不能是静态的。
静态块 / 方法无法访问非静态变量
我们知道静态方法不能访问非静态变量。静态块也是如此。
现在,构造函数的主要目的是初始化对象变量。因此,如果我们将构造函数设置为静态,则无法初始化对象变量。这将破坏使用创建对象的构造函数的全部目的。因此,使构造函数为非静态是合理的。
注意,我们不能this在静态方法中使用引用对象变量。下面的代码将定义编译错误,因为:不能在静态上方中使用它。
public static void main(String args []){ System.out.println(this.id);}

静态构造函数将破坏继承
在Java中,每个类都隐式扩展了对象类。我们可以定义一个类层次结构,其中子类构造函数调用超类构造函数。这是通过super()方法调用完成的。大多数情况下,JVM自动调用超类构造函数,但有时如果超类中有多个构造函数,我们必须手动调用它们。
package
com.journaldev.util;class Data {Data() {System.out.println("Data Constructor"); }}public class DataChild extends Data{ publicDataChild() {super();//JRE calls it explicitly, calling here for explanationSystem.out.println("DataChild Constructor"); } public static void main(Stringargs[]) {DataChilddc =newDataChild(); }}
Data ConstructorDataChild Constructor
如果,您看一下super()方法,它不是静态的。因此,如果构造函数转换静态,我们将无法使用它,这将破坏java中的继承性。
Java静态构造方法替代
如果要在类中初始化一些静态变量,则可以使用静态块。请注意,我们无法将参数传递给静态块,因此,如果您要初始化静态变量,则也可以在常规构造函数中执行此操作。
class Data {publicstaticintcount;static{count= 0; }Data(intc) {//not recommended since the count is class variable//and shared among all the objects of the class
count=c
; }}总结
我们说明了为什么不允许使用Java静态构造函数。我们可以使用静态块以及构造函数本身来初始化静态变量。