声明变量为静态(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

更新于:2019年7月30日

248 次浏览

启动您的职业生涯

完成课程后获得认证

开始学习
广告