可能重复:
What is the reason behind “non-static method cannot be referenced from a static context”?
Cannot make a static reference to the non-static method
cannot make a static reference to the non-static field
我无法理解我的代码有什么问题。
class Two {
public static void main(String[] args) {
int x = 0;
System.out.println("x = " + x);
x = fxn(x);
System.out.println("x = " + x);
}
int fxn(int y) {
y = 5;
return y;
}
}
线程“main”中的异常java.lang.Error:未解决的编译问题: 无法对类型为二的非静态方法fxn(int)进行静态引用
答案 0 :(得分:30)
由于main
方法为static
而fxn()
方法不是,因此如果不先创建Two
对象,则无法调用该方法。因此,要么将方法更改为:
public static int fxn(int y) {
y = 5;
return y;
}
或将main
中的代码更改为:
Two two = new Two();
x = two.fxn(x);
中详细了解static
答案 1 :(得分:3)
您无法访问方法fxn,因为它不是静态的。静态方法只能直接访问其他静态方法。如果你想在main方法中使用fxn,你需要:
...
Two two = new Two();
x = two.fxn(x)
...
即,创建一个双对象并在该对象上调用该方法。
...或使fxn方法静态。
答案 2 :(得分:1)
您不能从静态方法中引用非静态成员。
非静态成员(例如你的fxn(int y))只能从你班级的一个实例中调用。
示例:
你可以这样做:
public class A
{
public int fxn(int y) {
y = 5;
return y;
}
}
class Two {
public static void main(String[] args) {
int x = 0;
A a = new A();
System.out.println("x = " + x);
x = a.fxn(x);
System.out.println("x = " + x);
}
或者您可以将方法声明为静态。
答案 3 :(得分:0)
静态方法无法访问非静态方法或变量。
public static void main(String[] args)
是一种静态方法,因此无法访问非静态public static int fxn(int y)
方法。
以这种方式试试......
static int fxn(int y)
public class Two {
public static void main(String[] args) {
int x = 0;
System.out.println("x = " + x);
x = fxn(x);
System.out.println("x = " + x);
}
static int fxn(int y) {
y = 5;
return y;
}
}