在 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
声明 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);
}
}编译时错误
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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP