例如,我正在尝试做这样的事情
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]);
}
}
我收到一个错误,告诉我无法从静态环境中引用非静态变量。那么,如果这是真的,我怎么能在main中使用非静态方法?
答案 0 :(得分:14)
你做不到。非静态方法是必须在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]);
}
}
答案 1 :(得分:3)
您只能使用类实例调用非静态方法,因此您必须使用 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() {
}
}
答案 2 :(得分:1)
总之,你不能。由于main是一个特殊情况(即只有一个的入口点),除了静态方法,主要的变量之外你不能有任何其他东西。
答案 3 :(得分:1)
根据您的新示例,解决方案将是:
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]);
}
}
但是第二个从良好的编程实践中闻起来很糟糕
答案 4 :(得分:1)
non-static
- &gt; object
static method
- &gt;这个班的财产。
因此,当方法/变量声明中没有static
关键字时,如果没有静态上下文中的任何类实例,则无法调用/引用该方法/变量。
正如其他人建议在main方法中创建主类的新实例(new Test()
)并调用non-static
arrPrint
方法。
答案 5 :(得分:0)
需要在类的实例上调用非静态方法。要创建实例,请使用new
关键字,如
Test instance = new Test();
现在您可以在像
这样的实例上调用方法instance.arrPrint(arr);
答案 6 :(得分:0)
new Something()。method1()或new Something()。method2()