在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属性是可以重新赋值的。
本文出自 “老谭” 博客,请务必保留此出处http://tanlan.blog.51cto.com/3450625/1581863
原文地址:http://tanlan.blog.51cto.com/3450625/1581863