我们可以在 Java 的默认构造函数中初始化静态变量吗?
javaobject oriented programmingprogramming更新于 2024/6/29 23:34:00
类/静态变量属于一个类,就像实例变量一样,它们在类内、任何方法之外声明,但是使用 static 关键字。
它们可以在编译时访问,您可以在实例化类之前/不实例化类的情况下访问它们,整个类中只有一个静态字段的副本可用,即静态字段的值在所有对象中都是相同的。您可以使用 static 关键字定义静态字段。
如果您在类中声明静态变量,如果您尚未初始化它,就像实例变量一样,编译器会在默认构造函数中使用默认值初始化它们。
是的,您也可以使用构造函数初始化这些值。
示例
public class DefaultExample { static String name; static int age; DefaultExample() { name = "Krishna"; age = 25; } public static void main(String args[]) { new DefaultExample(); System.out.println(DefaultExample.name); System.out.println(DefaultExample.age); } }
输出
Krishna 25
声明 final 和 static
但是,如果您将实例变量声明为 static 和 final,Java 编译器将不会在默认构造函数中对其进行初始化,因此,必须初始化 static 和 final 变量。如果不这样做,将生成编译时错误。
示例
public class DefaultExample { static final String name; static final int age; public static void main(String args[]) { new DefaultExample(); System.out.println(DefaultExample.name); System.out.println(DefaultExample.age); } }
Compile time error
DefaultExample.java:2: error: variable name not initialized in the default constructor static final String name; ^ DefaultExample.java:3: error: variable age not initialized in the default constructor static final int age; ^ 2 errors
但是,如果您尝试初始化声明为 final 和 static 的变量,编译器会将其视为初始化变量的尝试,并会产生编译时错误。
示例
public class DefaultExample { static final String name; static final int age; DefaultExample() { name = "Krishna"; age = 25; } public static void main(String args[]) { new DefaultExample(); System.out.println(DefaultExample.name); System.out.println(DefaultExample.age); } }
Compile time error
OutputDeviceAssignedDefaultExample.java:5: error: cannot assign a value to final variable name name = "Krishna"; ^ DefaultExample.java:6: error: cannot assign a value to final variable age age = 25; ^ 2 errors