
众所周知,在Java中,final关键字可以修饰变量,方法和类。它们表达的意义如下:
1:修饰变量:该变量赋值之后不可再修改或重新赋值,这种变量可以当成常量使用
2:修饰方法:方法不可被重写
3:修饰类:类不可被继承
本篇文章老谭专门探讨一下final修饰变量的情况。
先看下面的代码片段:
public class FinalDemo {
final int NUM;
void m1() {
final int NUM1;
}
}
该段代码编译不会成功。final修饰的类成员NUM是必须赋值的,最简单的写法就是使用如下语句:
final int NUM=20;
而final修饰方法中的局部变量则无需同时赋初始值,可以在使用之前赋值,但不可多次赋值。
但是可以使用初始化块或构造方法为final修饰的类成员赋值,而且实例初始化块甚至可以出现在类成员声明之前:
public class FinalDemo {
final int NUM;
{
NUM=20;
}
void m1() {
final int NUM1;
}
}
使用构造方法为final修饰的类成员赋值也是可行的:
public class FinalDemo {
final int NUM;
public FinalDemo() {
NUM = 20;
}
void m1() {
final int NUM1;
}
}
类似的,如果final与static同时使用的话,则应该使用静态初始化块为该成员赋值。
另外一种情况是final修饰的引用类型。
假设有以下两个类:
public class User{
int num;
}
public class FinalDemo {
final User user = new User();
public static void main(String[] args) {
FinalDemo demo = new FinalDemo();
demo.user = new User();
}
}
编译时demo.user=new User();这句代码会出现编译错误,因为user是final修饰的,不可重新赋值。但是以下代码能够成功编译:
public class FinalDemo {
final User user = new User();
public static void main(String[] args) {
FinalDemo demo = new FinalDemo();
demo.user.num = 30;
}
}
因为final变量中的非final属性是可以重新赋值的。
免责声明:以上内容(如有图片或文字亦包括在内)为网络用户上传并发布,不代表百科参考网的观点和立场,本平台仅提供信息存储服务,如有侵权直接联系Q-30513-26917,请注明出处:https://www.2333.org.cn/2333/12591.html