将变量设为静态和最终变量时应遵循哪些规则?

静态变量-静态变量也称为类变量。您可以使用关键字声明一个静态变量。一旦声明了一个静态变量,则无论在该类中创建了多少个对象,在类中都只有一个副本。

public static int num = 39;

final-声明变量final后,您将无法为它重新赋值。当您声明类的变量static和final时,我们将其设为常量。

须遵守的规则

  • 初始化是强制性的-在Java中初始化类的实例变量不是强制性的。如果在编译时未初始化它们,则Java编译器会在默认构造函数中对其进行初始化。

但是,如果您声明实例变量static,而final Java编译器将不会在默认构造函数中对其进行初始化,则必须初始化static和final变量。如果您不编译,则会生成错误。

示例

class Data{
   static final int num;
}
public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("value of the constant: "+Data.num);
   }
}

编译时错误

ConstantsExample.java:2: error: variable num not initialized in the default constructor
static final int num;
                   ^
1 error
  • 初始化只能在静态块中进行-当变量同时声明为static和final时,则只能在静态块中对其进行初始化,如果尝试在其他位置进行初始化,则编译器会假定您正在尝试将值重新分配给它并生成编译时错误-

class Data{
   static final int num;
   Data(int i){
      num = i;
   }
}

public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("value of the constant: "+Data.num);
   }
}

编译时错误

ConstantsExample.java:4: error: cannot assign a value to final variable num
   num = i;
    ^
1 error

为了使该程序正常工作,您需要将静态块中的最终静态变量初始化为-

class Data{
   static final int num;
   static{
      num = 1000;
   }
}

public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("value of the constant: "+Data.num);
   }
}

输出结果

value of the constant: 1000