首页 > 其他 > 详细

您掌握了final关键字吗?

时间:2014-11-25 02:15:28      阅读:221      评论:0      收藏:0      [点我收藏+]

Java中,final关键字可以修饰变量,方法和类。它们表达的意义如下:

1:修饰变量:该变量赋值之后不可再修改或重新赋值,这种变量可以当成常量使用

2:修饰方法:方法不可被重写

3:修饰类:类不可被继承

本篇文章老谭专门探讨一下第一种情况。

1,??final变量的赋值:

1
2
3
4
5
6
public?class?FinalDemo?{
?????????final?int?NUM;
?????????void?m1()?{
???????????????????final?int?NUM1;
?????????}

该段代码编译不会成功。final修饰的类成员NUM是必须与声明时同时赋值的,即要使用如下语句:

1
final?int?NUM=20;

final修饰方法中的局部变量则无需同时赋初始值,可以在使用之前赋值,但不可多次赋值。

但是可以使用初始化块为final修饰的类成员赋值,而且实例初始化块甚至可以出现在类成员声明之前:

1
2
3
4
5
6
7
8
9
public?class?FinalDemo?{
?????????final?int?NUM;
????????{
????????????NUM=20;
????????}
?????????void?m1()?{
????????????final?int?NUM1;
?????????}

类似的,如果finalstatic同时使用的话,则应该使用静态初始化块为该成员赋值。

?

2,??final修饰引用类型数据:

假设有以下两个类:

1
2
3
4
5
6
7
8
9
10
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();这句代码会出现编译错误,因为userfinal修饰的,不可重新赋值。但是以下代码能够成功编译:

1
2
3
4
5
6
7
public?class?FinalDemo?{
?????????final?User?user=new?User();
????????public?static?void?main(String[]?args)?{
???????????????????????????FinalDemo?demo=new?FinalDemo();
???????????????????????????demo.user.num=30;
????????

final变量中的非final属性是可以重新赋值的。

您掌握了final关键字吗?

原文:http://aijuans.iteye.com/blog/2159806

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!