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:未解決のコンパイルの問題:タイプ2から非静的メソッドfxn(int)への静的参照を作成できません

4

4 に答える 4

66

mainメソッドはstaticあり、メソッドはそうではないため、最初にオブジェクトfxn()を作成せずにメソッドを呼び出すことはできません。Twoしたがって、メソッドを次のように変更します。

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

または、コードを次のように変更しますmain

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

詳細についてstaticは、Javaチュートリアルを参照してください。

于 2012-07-15T12:14:26.027 に答える
5

メソッドfxnは静的ではないため、アクセスできません。静的メソッドは、他の静的メソッドに直接アクセスすることしかできません。mainメソッドでfxnを使用する場合は、次のことを行う必要があります。

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

つまり、2つのオブジェクトを作成し、そのオブジェクトのメソッドを呼び出します。

...または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. この方法で試してください...

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

    }

于 2012-07-15T12:17:15.297 に答える