web-dev-qa-db-ja.com

mainメソッドから非静的メソッドを呼び出すにはどうすればよいですか?

たとえば、私はこのようなことをしようとしています

public class Test {

    public static void main(String args[]) {

        int[] arr = new int[5];

        arrPrint(arr);
    }

    public void arrPrint(int[] arr) {

        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);

    }
}

静的環境から非静的変数を参照できないというエラーが表示されます。それが本当なら、メインの内部で非静的メソッドをどのように利用するでしょうか?

6
toby yeats

できません。非静的メソッドは、Testクラスのインスタンスで呼び出す必要があるメソッドです。 mainメソッドで操作するTestのインスタンスを作成します。

public class Test {

    public static void main(String args[]) {
        int[] arr = new int[5];
        arr = new int[] { 1, 2, 3, 4, 5 };

        Test test = new Test();
        test.arrPrint(arr);

    }

    public void arrPrint(int[] arr) {
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);

    }
}
14
fr1550n

非静的メソッドはクラスインスタンスを使用してのみ呼び出すことができるため、newキーワードを使用して作成する必要があります。

public class Something {

    public static void main(String args[]) {
        Something something = new Something();
        something.method1();

        new Something().method2();
    }

    public void method1() {
    }

    public void method2() {
    }
}
3
kaktooss

要するに、あなたはできません。 mainは特殊なケース(つまり、エントリポイントが1つしかない)であるため、静的メソッド、mainに変数以外のものを含めることはできません。

1
Paul Sullivan

_non-static_-> objectのプロパティ

_static method_->クラスit-selfのプロパティ。

したがって、メソッド/変数宣言にstaticキーワードがない場合、静的コンテキストからのクラスのインスタンスがないと、そのメソッド/変数を呼び出したり参照したりすることはできません。

他のみんなが提案したように、mainメソッドでmainクラスの新しいインスタンス(new Test())を作成し、_non-static_ arrPrintmethodを呼び出します。

新しい例によると、解決策は次のようになります。

public class Test {

    public static void main(String args[]) {
        int[] arr = new int[5];
        new Test().arrPrint(arr);
    }

    public void arrPrint(int[] arr) {
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);

    }
}

またはあなたは移動することができます

int[] arr = new int[5];

のような静的セクションに

public class Test {

    static int[] arr; 

    public static void main(String args[]) {
        arr = new int[5]; 
        new Test().arrPrint(arr);
    }

    public void arrPrint(int[] arr) {
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);
    }
}

しかし、2つ目は、優れたプログラミング手法の観点からは非常に悪臭がします

1
kaktooss

非静的メソッドは、クラスのインスタンスで呼び出す必要があります。インスタンスを作成するには、次のようなnewキーワードを使用します

Test instance = new Test();

これで、次のようなインスタンスでメソッドを呼び出すことができるようになります。

instance.arrPrint(arr);
0
Pshemo

new Something()。method1()またはnew Something()。method2()

0
Vaibhav Behl