Java类调用与变量访问问题:实例调用报错但类直接访问正常
解决Java中实例访问类成员标红的问题
这问题我之前也碰到过,核心是你搞混了Java里静态成员和非静态成员的访问规则,咱们一步步理清楚:
问题根源
你能通过Questions.Score正常访问,但用实例QuestionBank.Score会标红,说明Score变量是被static关键字修饰的静态变量。静态变量属于类本身,而不是属于某个具体的实例对象,所以虽然Java语法上允许用实例访问静态成员,但IDE会标红警告(这是不符合代码规范的写法),而你遵循的操作说明应该是针对非静态成员的场景。
两种解决方案
方案1:改成非静态成员(符合你的操作说明)
如果你希望通过实例对象访问Score,那把Questions类里的Score变量的static修饰符去掉,让它变成非静态成员:
public class Questions { // 去掉static修饰符,变成非静态成员 public int Score; // 其他成员... }
这样在主类里实例化后,用QuestionBank.Score访问就不会标红了,完全符合操作说明的写法。
方案2:保持静态成员,规范访问方式
如果你确实需要Score是静态变量(比如用来记录全局共享的分数),那继续保留static修饰,但要改用类名直接访问,这是Java静态成员的规范写法:
// 规范写法:类名.静态成员 Questions.Score = 100;
此时IDE的标红是在提醒你不符合编码规范,你可以选择忽略这个警告,或者调整IDE的检查规则,但更推荐遵循规范用类名访问。
补充:静态vs非静态的核心区别
- 静态成员(static):属于类,所有实例共享同一份内存,不需要实例化就能访问。
- 非静态成员:属于实例对象,每个实例都有自己的一份,必须先创建实例才能访问。
内容的提问来源于stack exchange,提问作者sim2018
相关产品推荐
相关产品推荐

