📜  Java中的静态和非静态空白最终变量(1)

📅  最后修改于: 2023-12-03 15:16:34.595000             🧑  作者: Mango

Java中的静态和非静态空白最终变量

在Java中,空白最终变量是指声明为final但未初始化的变量。静态空白最终变量和非静态空白最终变量之间存在一些差异。

静态空白最终变量

静态空白最终变量是静态的,并且在类初始化期间仅被赋值一次。它们可以通过类名直接访问,并且在整个程序中都具有相同的值。以下是一个示例:

public class MyClass {
    public static final int MY_CONSTANT;
    static {
        MY_CONSTANT = 5;
    }
}

在上面的示例中,MY_CONSTANT是一个静态空白最终变量,它在静态代码块中被初始化为5。由于它是静态的,因此可以通过类名直接访问,如下所示:

int constantValue = MyClass.MY_CONSTANT;

请注意,静态空白最终变量的名称通常使用大写字母和下划线分隔符,以表示它们是常量并且应该在声明时进行初始化。

非静态空白最终变量

与静态空白最终变量不同,非静态空白最终变量仅在实例化类的每个实例时赋值一次。它们不能通过类名直接访问,并且每个实例都可以具有不同的值。以下是一个示例:

public class MyClass {
    public final int MY_CONSTANT;
    public MyClass(int constantValue) {
        MY_CONSTANT = constantValue;
    }
}

在上面的示例中,MY_CONSTANT是一个非静态空白最终变量。它被声明为public,并且仅在构造函数中被赋值一次。由于它是非静态的,因此无法通过类名直接访问或更改MY_CONSTANT的值。

MyClass myClass1 = new MyClass(5);
MyClass myClass2 = new MyClass(10);
int constantValue1 = myClass1.MY_CONSTANT; // 5
int constantValue2 = myClass2.MY_CONSTANT; // 10

请注意,非静态空白最终变量的名称通常使用小写字母和下划线分隔符,以表示它们只能在声明时或构造函数中进行初始化。

结论

静态空白最终变量和非静态空白最终变量之间存在差异。静态空白最终变量是静态的,每个实例都可以具有不同的值,可以直接通过类名访问。非静态空白最终变量是非静态的,每个实例都具有相同的值,无法通过类名直接访问或更改值。根据需要选择正确的类型。