たとえば、私はこのようなことをしようとしています
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]);
}
}
静的環境から非静的変数を参照できないというエラーが表示されます。それが本当なら、メインの内部で非静的メソッドをどのように利用するでしょうか?
できません。非静的メソッドは、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]);
}
}
非静的メソッドはクラスインスタンスを使用してのみ呼び出すことができるため、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() {
}
}
要するに、あなたはできません。 mainは特殊なケース(つまり、エントリポイントが1つしかない)であるため、静的メソッド、mainに変数以外のものを含めることはできません。
_non-static
_-> object
のプロパティ
_static method
_->クラスit-selfのプロパティ。
したがって、メソッド/変数宣言にstatic
キーワードがない場合、静的コンテキストからのクラスのインスタンスがないと、そのメソッド/変数を呼び出したり参照したりすることはできません。
他のみんなが提案したように、mainメソッドでmainクラスの新しいインスタンス(new Test()
)を作成し、_non-static
_ arrPrint
methodを呼び出します。
新しい例によると、解決策は次のようになります。
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つ目は、優れたプログラミング手法の観点からは非常に悪臭がします
非静的メソッドは、クラスのインスタンスで呼び出す必要があります。インスタンスを作成するには、次のようなnew
キーワードを使用します
Test instance = new Test();
これで、次のようなインスタンスでメソッドを呼び出すことができるようになります。
instance.arrPrint(arr);
new Something()。method1()またはnew Something()。method2()