You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构造函数初始化私有数组遇变量遮蔽,无法后续使用该数组怎么办?

问题:私有数组在构造函数中被当作局部变量,导致后续线程无法访问

我正在完成学校的编程练习,要求将数组声明为私有,仅通过构造函数对其进行实例化。我的代码如下:

public class Mapland extends Thread {
    private int groining;
    private int[] sepulcher;
    public Mapland(int[] b) {
        int[] sepulcher = new int[b.length];
    }
    public int getGroining() {
        return this.groining;
    }
    public void run() {
        groining = Integer.MIN_VALUE;
        for (int i = 0; i < sepulcher.length; i++) {
            if (getGroining() < this.sepulcher[i]) {
                this.groining = this.sepulcher[i];
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

问题在于构造函数中的sepulcher被当作局部变量处理,导致我后续无法使用该数组。尝试在其前添加this.也没有效果,请问我该如何解决?


解决方案:正确初始化私有数组并复制传入内容

嘿,这问题我熟,帮你捋清楚!

你现在的核心问题有两个:

  1. 构造函数里重新声明了局部变量int[] sepulcher,直接把类的私有成员变量给“屏蔽”了——相当于你在构造函数里新建了一个和成员变量同名的局部数组,和类里的sepulcher半毛钱关系都没有。
  2. 就算你去掉了局部声明,你也只是给数组分配了空间,没把传入的b数组内容复制进去,这样你的私有数组只是个空架子,后续遍历也没意义。

修改后的构造函数应该是这样的:

public Mapland(int[] b) {
    // 直接给类的私有成员数组赋值,不要重新声明变量
    this.sepulcher = new int[b.length];
    // 把传入数组b的内容复制到私有数组里,两种方式选一个就行
    System.arraycopy(b, 0, this.sepulcher, 0, b.length);
    // 或者用循环复制:
    // for (int i = 0; i < b.length; i++) {
    //     this.sepulcher[i] = b[i];
    // }
}

再给你补个小细节:在run()方法里最好加个空指针判断,避免构造函数没正确初始化数组导致的异常,优化后的run()方法:

public void run() {
    groining = Integer.MIN_VALUE;
    // 先判断数组是否有效
    if (sepulcher == null || sepulcher.length == 0) {
        return;
    }
    // 用增强for循环更简洁
    for (int num : sepulcher) {
        if (getGroining() < num) {
            this.groining = num;
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

这样修改后,私有数组就能被正确初始化,线程里也能正常访问并使用它了。

内容的提问来源于stack exchange,提问作者GeorgeNoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:41:16