当final修饰成员属性时的疑问

来源:3-1 final关键字的使用(上)

WittChen

2020-12-23 08:50:41

# 具体遇到的问题
当final修饰成员属性,只声明不初始化的时候,创建对象的时候是怎么运行的
# 报错信息的截图
http://img.mukewang.com/climg/5fe2933f093437ac04870254.jpg

# 尝试过的解决思路和结果
1、我可以理解为final修饰的变量,只能被赋值一次,然后就不可以再次改变,这就是为什么,声明可以不初始化,之后赋值也没问题

2、类中的成员属性,当创建对象也就是new的时候,成员属性是会被默认赋值的,而且在构造方法中,是可以用this的,那么我可以理解,在调用构造的时候,这个对象的实例已经被创建出来了,成员属性的默认值全部已经赋值好了。

3、那么问题来了,final修饰的成员属性,这时为什么没有被赋值

思考结果:难道是java可以在实例创建的时候不为那些被final修饰的且为初始化的成员属性赋值,必须到构造代码块或者构造方法中初始化一遍才行,那么问题又来了,既然可以做到这个地步,那么为什么不更加灵活点在普通方法中也可以赋值呢?
# 粘贴全部相关代码,切记添加代码注释(请勿截图)

在这里输入代码,可通过选择【代码语言】突出显示

写回答

1回答

好帮手慕阿满

2020-12-23

同学你好,final修饰的成员属性没有默认值,在使用前必须赋初值。所以创建实例时,也不能为final修饰的成员属性赋初值。不一定在构造方法或构造代码块中初始化,可以在定义final成员属性时就赋初值。

使用final修饰的成员属性重点在赋初值后不能被修改,普通方法中不能为final修饰的方法赋初值。

祝学习愉快~


0

0 学习 · 16556 问题

查看课程