在Java中,final关键字可以修饰变量,方法和类。它们表达的意义如下: 1:修饰变量:该变量赋值之后不可再修改或重新赋值,这种变量可以当成常量使用 2:修饰方法:方法不可被重写
在Java中,final关键字可以修饰变量,方法和类。它们表达的意义如下:
1:修饰变量:该变量赋值之后不可再修改或重新赋值,这种变量可以当成常量使用
2:修饰方法:方法不可被重写
3:修饰类:类不可被继承
本篇文章老谭专门探讨一下第一种情况。
1, 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与static同时使用的话,则应该使用静态初始化块为该成员赋值。
2, final修饰引用类型数据:
假设有以下两个类:
pubic 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属性是可以重新赋值的。
萌萌的IT人