将变量设为静态和最终变量时应遵循哪些规则?
静态变量-静态变量也称为类变量。您可以使用关键字声明一个静态变量。一旦声明了一个静态变量,则无论在该类中创建了多少个对象,在类中都只有一个副本。
public static int num = 39;
final-声明变量final后,您将无法为它重新赋值。当您声明类的变量static和final时,我们将其设为常量。
须遵守的规则
初始化是强制性的-在Java中初始化类的实例变量不是强制性的。如果在编译时未初始化它们,则Java编译器会在默认构造函数中对其进行初始化。
但是,如果您声明实例变量static,而finalJava编译器将不会在默认构造函数中对其进行初始化,则必须初始化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