这个问题已经在这里有一个答案:
我得到一个错误,说“非静态变量constantInteger不能从静态上下文中引用”
如何添加所有三个整数无需改变自己的水平?
public class VariableAdder {
final int constantInteger = 5;
int instanceInteger = 10;
public static void main(String[] args) {
int methodInteger = 20;
int result = constantInteger + instanceInteger + methodInteger;
System.out.println(result);
}
}
预期结果:增加两个实例变量和一个方法变量和打印。实际结果:错误
谢谢大家的帮助!
你不能用一个实例变量(Class级别,非静态,最终/非最终)一个静态方法中(main()
你的情况)。
实例化VariableAdder
和使用实例来引用实例变量将解决你的问题。事情是这样的:
public class VariableAdder {
final int constantInteger = 5;
int instanceInteger = 10;
public static void main(String[] args) {
VariableAdder t = new VariableAdder();
int methodInteger = 20;
int result = t.constantInteger + t.instanceInteger + methodInteger;
System.out.println(result);
}
如果你是不是在找创建一个实例,声明constantInteger
和instanceInteger
静态和直接访问它们的main()
内
实例变量和实例不变意味着你才能访问他们需要一个实例。为了您的代码示例,这意味着创建类VariableAdder
的一个实例。要创建一个实例调用构造函数。在Windows 10下成功地与JDK 11.0.2运行
public class VariableAdder {
final int constantInteger = 5;
int instanceInteger = 10;
/** Constructor */
public VariableAdder() {
}
public static void main(String[] args) {
int methodInteger = 20;
// Create an instance of class 'VariableAdder'
VariableAdder adder = new VariableAdder();
int result = adder.constantInteger + adder.instanceInteger + methodInteger;
System.out.println(result);
}
}
这应该工作:
final static int constantInteger = 5;
static int instanceInteger = 10;
public static void main(String[] args) {
int methodInteger = 20;
int result = constantInteger + instanceInteger + methodInteger;
System.out.println(result);
}
编辑:OR
final static int constantInteger = 5;
static int instanceInteger = 10;
public static void main(String[] args) {
MyClass runner = new MyClass();
int ti=runner.instanceInteger;
int methodInteger = 20;
int result = constantInteger + instanceInteger + methodInteger;
System.out.println(result);
}