Java中访问新建内部类实例属性全为0,是什么原因导致的?
问题原因
核心原因是变量名遮蔽(Variable Shadowing):当构造函数的参数名和类的成员变量名完全一致时,方法作用域内的同名参数优先级更高,你编写的nb = nb、piece = piece、length = length本质是把参数的值赋值给参数本身,类的成员变量全程没有被赋值。Java中int类型的成员变量默认初始值为0,因此最终打印结果全部为0。
解决方案
有两种常用的修复方式:
方式1:用this关键字明确指定成员变量
this指代当前类的实例对象,加上this.前缀即可明确标识要赋值的是类的成员变量,而非参数:
public Build(int nb, int piece, int length){ // 调试中可以看到参数值已经传入,但在方法中打印属性时输出全为0 this.nb = nb; this.piece = piece; this.length = length; }
方式2:修改参数命名避免重名
给参数增加区分度的前缀/后缀,避免和成员变量同名,从根源上避免遮蔽问题:
public Build(int inputNb, int inputPiece, int inputLength){ nb = inputNb; piece = inputPiece; length = inputLength; }
补充建议
如果没有特殊业务需求,建议给类的成员变量添加private访问修饰符,仅通过类提供的getter/setter方法访问内部属性,降低类的耦合度,提升代码安全性。
内容的提问来源于stack exchange,提问作者TheMathAI
相关产品推荐
相关产品推荐

