首页 > Java > java教程 > 尽管在构造函数中进行了初始化,为什么我的 Java 字段仍为空?

尽管在构造函数中进行了初始化,为什么我的 Java 字段仍为空?

Susan Sarandon
发布: 2024-11-29 18:03:10
原创
918 人浏览过

Why Are My Java Fields Null Despite Initialization in the Constructor?

Java 字段初始化中的混乱:影子的作用

在类构造函数中声明和初始化字段时,您可能会遇到令人费解的情况:尽管您进行了初始化工作,但字段仍然为空或保留其默认值。发生这种情况是由于一种称为阴影的现象。

范围和阴影

Java中的每个实体都有一个范围,它决定了它可以在哪里使用其简单名称进行引用。当您在类中声明字段时,它们的作用域涵盖整个类主体,包括嵌套声明。

局部变量与字段

在构造函数中,您可能会无意中引入与字段同名的局部变量。局部变量的作用域较窄,仅在构造函数体内扩展。当局部变量使用与字段相同的名称声明时,它们会遮蔽字段,这意味着局部变量在其范围内优先。

遮蔽示例:

考虑这段代码:

public class Sample {

    private String[] elements;
    private int capacity;

    public Sample() {
        int capacity = 10;
        String[] elements;
        elements = new String[capacity];
    }
}
登录后复制

这里,构造函数遮蔽导致了混乱。局部变量容量和元素优先于字段,导致字段成员保持为 null 或初始化为其默认值(0 表示 int,null 表示引用)。

潜在解决方案:

为了避免阴影,请考虑对局部变量使用唯一的名称,或者使用其限定名称显式引用该字段(例如 this.elements、这个.容量)。例如:

public Sample() {
    this.capacity = 10;
    this.elements = new String[capacity];
}
登录后复制

其他遮蔽实例

遮蔽也可以与构造函数参数一起发生。如果构造函数参数与字段同名,则该参数在构造函数主体中优先。要在这种情况下访问该字段,请使用带有此限定的名称。

避免建议:

为了防止由于阴影导致的意外行为,通常建议使用不同的名称字段、局部变量和构造函数参数的名称。

以上是尽管在构造函数中进行了初始化,为什么我的 Java 字段仍为空?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板