📜  Java中的最终静态变量

📅  最后修改于: 2022-05-13 01:54:35.353000             🧑  作者: Mango

Java中的最终静态变量

先决条件:静态变量,final关键字

静态变量:当一个变量的值不变的时候,去实例变量就不是一个好选择。那时我们可以为该变量添加静态修饰符。每当我们将变量声明为静态时,就会在类级别创建一个与对象共享的变量。该静态变量中的任何更改都会反映到其他对象操作。如果我们不初始化静态变量,那么默认情况下 JVM 将为静态变量提供默认值。

但是当我们用 final 修饰符声明一个静态变量时,我们应该注意以下约定:

  • 仅将变量声明为静态可能会导致其值被声明它的类的一个或多个实例更改。
  • 将它们声明为 static final 将帮助您创建一个CONSTANT 。仅存在一份无法重新初始化的变量副本。

关于最终静态变量的要点:

  1. 变量初始化强制:如果静态变量声明为final,那么无论我们是否使用它,我们都必须显式执行初始化,并且JVM不会为final静态变量提供任何默认值。
    // Java program to illustrate the behavior of
    // final static variable
    class Test {
        final static int x;
        public static void main(String[] args)
        {
        }
    }
    

    输出:

    error: variable x not initialized in the default constructor
    
  2. 类加载前的初始化:对于最终的静态变量,我们必须在类加载完成之前进行初始化。我们可以在声明时初始化一个最终的静态变量。
    // Java program to illustrate that final
    // static variable can be initialized
    // at the time of declaration
    class Test {
        final static int x = 10;
        public static void main(String[] args)
        {
            System.out.println(x);
        }
    }
    

    输出:

    10
    
  3. 在静态块内初始化:我们也可以在静态块内初始化最终静态变量,因为我们应该在类之前初始化最终静态变量,并且我们知道静态块在 main() 方法之前执行。
    // Java program to illustrate that final
    // static variable can be initialized
    // inside static block
    class Test {
        final static int x;
        static
        {
            x = 10;
        }
        public static void main(String[] args)
        {
            System.out.println(x);
        }
    }
    

    输出:

    10
    

除了上面提到的方法,如果我们尝试在其他任何地方初始化一个最终的静态变量,那么我们会得到编译时错误。

// Java program to illustrate
// that we can't declare
// final static variable
// within any non-static blocks or methods
class Test {
    final static int x;
    public static void m()
    {
        x = 10;
    }
    public static void main(String[] args)
    {
        System.out.println(x);
    }
}

输出:

error: cannot assign a value to final variable x

final静态变量的实现

class MainClass {
    final static String company = "GFG";
    String name;
    int rollno;
public
    static void main(String[] args)
    {
        MainClass ob = new MainClass();
  
        // If we create a database for GFG org
        // then the company name should be constant
        // It can’t be changed by programmer.
        ob.company = "Geeksforgeeks";
  
        ob.name = "Bishal";
        ob.rollno = 007;
        System.out.println(ob.company);
        System.out.println(ob.name);
        System.out.println(ob.rollno);
    }
}

输出:

error: cannot assign a value to final variable company