39

可能重复:
“不能从静态上下文引用非静态方法”背后的原因是什么?
无法对非静态方法
进行静态引用 无法对非静态字段进行静态引用

我无法理解我的代码有什么问题。

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

4 回答 4

66

既然main方法是staticfxn()方法不是,你不能在没有先创建Two对象的情况下调用方法。因此,要么将方法更改为:

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

或将代码更改main为:

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

staticJava 教程中阅读更多信息。

于 2012-07-15T12:14:26.027 回答
5

您无法访问 fxn 方法,因为它不是静态的。静态方法只能直接访问其他静态方法。如果您想在 main 方法中使用 fxn,您需要:

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

也就是说,创建一个 Two-Object 并调用该对象的方法。

...或使 fxn 方法静态。

于 2012-07-15T12:14:07.027 回答
4

您不能从静态方法中引用非静态成员。

非静态成员(如您的 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);
}

或者你可以将你的方法声明为静态的。

于 2012-07-15T12:18:13.390 回答
0
  1. 静态方法不能访问非静态方法或变量

  2. public static void main(String[] args)是一个静态方法,所以不能访问非静态public static int fxn(int y)方法。

  3. 试试这个方法...

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

    }

于 2012-07-15T12:17:15.297 回答