我们可以在Java的默认构造函数中初始化静态变量吗?
类/静态变量属于类,就像实例变量一样,它们是在类内在任何方法之外声明的,但是使用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
声明最终和静态
但是,如果您声明实例变量static,而finalJava编译器将不会在默认构造函数中对其进行初始化,则必须初始化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);
}
}编译时错误
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);
}
}编译时错误
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