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
相关产品推荐
相关产品推荐

