教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

final关键字修饰变量为什么会报错?

更新时间:2021年08月03日18时13分 来源:传智教育 浏览次数:

好口碑IT培训

Java中被final修饰的变量被称之为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值不能改变。如果再次对该变量进行赋值,则程序会在编译时报错。接下来通过一个案例来进行验证,如文件1所示。

文件1 Example10.java

     public class Example10 {
         public static void main(String[] args) {
             final int num = 2; // 第一次可以赋值
             num = 4;             // 再次赋值会报错
         }
     }

程序编译报错,如图1所示。

1627983956568_1.jpg

图1 运行结果

文件1中,当在第4行再次对num赋值时,程序出现了“The final local variable num cannot be assigned. It must be blank and not using a compound assignment(final变量num无法被重新赋值)”的错误。由此可见,被final修饰的变量为常量,它只能被赋值一次,其值不可改变。

文件1中,演示的是局部变量被final修饰的情况,当局部变量使用final关键字进行修饰时,可以在声明变量的同时对变量进行赋值,也可以先声明变量然后再进行有且只有一次的赋值。而当成员变量被final修饰时,在声明变量的同时必须进行初始化赋值,否则程序编译报错,接下来通过一个案例来演示final修饰成员变量和局部变量的情况,如文件2所示。

文件2 Example11.java

     public class Example11 {
         // final修饰的成员变量,必须在声明的同时进行赋值,否则编译错误
         final int m;
         public static void main(String[] args) {
             // final修饰的局部变量,可以先声明,再进行一次赋值
             final int n; 
             n = 4; 
         }
     }

程序编译报错,如图2所示。

1627983962670_2.jpg

图2 运行结果

从图2可以看出,程序出现了编译错误,并提示“The blank final field m may not have been initialized(final修饰的变量m没有初始化)”。这是因为使用final关键字修饰成员变量时,Java虚拟机不会对其进行初始化。因此使用final修饰成员变量时,需要在定义变量的同时赋予一个初始值,下面将第3行代码修改为:

final int m = 0; // 为final修饰的成员变量m初始化赋值

保存后,Eclipse的编辑器将不会提示错误。







猜你喜欢:

final关键字的作用和特点【final关键字的作用详细介绍】

final在Java编程中有什么作用?【Java面试】

final有什么作用?Java中final类的作用

传智教育Java开发课程

0 分享到:
和我们在线交谈!