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

Java跨类访问数组元素报错:无法对非静态方法getAttempts()做静态引用

解决“Cannot make a static reference to the non-static method getAttempts()”错误

这个错误的核心原因很直白:你试图用类名直接调用非静态方法,但非静态方法是属于对象实例的,不是类本身的“公共资源”。

先理清楚逻辑

你的getAttempts()是Word类中的非静态方法,这意味着每个Word对象实例都有自己独立的attempts数组——毕竟你的create方法也是给每个Word对象的数组元素设为空字符串。所以调用这个方法必须基于具体的Word对象,而不是Word类本身。

结合你的场景修正代码

你已经创建了Word[]数组(假设这个数组叫wordArray),每个元素都是Word的实例。在Letter类的循环里,你需要遍历这个数组中的每个Word对象,然后通过对象来调用getAttempts(),而不是直接用Word.getAttempts()。

先看你可能的错误写法:

// 错误:用类名调用非静态方法
for (int i = 0; i < wordArray.length; i++) {
    String attempt = Word.getAttempts()[i];
}

再看正确的写法:

// 正确:通过数组中的Word实例调用方法
for (int i = 0; i < wordArray.length; i++) {
    // 先获取当前循环到的Word对象
    Word currentWord = wordArray[i];
    // 通过对象调用getAttempts(),拿到该实例对应的attempts数组
    String[] attempts = currentWord.getAttempts();
    // 接下来根据你的需求处理数组,比如取对应位置的元素
    String targetAttempt = attempts[...]; // 这里替换成你需要的索引值
}

额外补充:静态vs非静态的本质区别

  • 静态方法/变量:属于类本身,所有该类的实例共享同一个副本,调用时用类名.方法名。
  • 非静态方法/变量:属于每个对象实例,每个实例都有自己独立的副本,必须用对象实例.方法名调用。

你的attempts数组是每个Word对象独有的,所以getAttempts()设计成非静态是合理的,只要对应到具体实例调用就没问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:27:02