声明变量为静态(static)和最终(final)时,需要遵循哪些规则?
静态变量 − 静态变量也称为类变量。可以使用关键字`static`声明变量。一旦将变量声明为静态,无论创建多少个对象,类中都只有一个副本。
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
要使此程序正常工作,需要在静态块中初始化`final static`变量,如下所示:
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
广告