无法从类型Two对静态方法fxn(int)进行静态引用

时间:2012-07-15 12:09:42

标签: java

  

可能重复:
  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)进行静态引用

4 个答案:

答案 0 :(得分:30)

由于main方法为staticfxn()方法不是,因此如果不先创建Two对象,则无法调用该方法。因此,要么将方法更改为:

public static int fxn(int y) {
    y = 5;
    return y;
}

或将main中的代码更改为:

Two two = new Two();
x = two.fxn(x);

Java Tutorials

中详细了解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)

  1. 静态方法无法访问非静态方法或变量。

  2. public static void main(String[] args)是一种静态方法,因此无法访问非静态public static int fxn(int y)方法。

  3. 以这种方式试试......

    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;
        }
    

    }