每当我尝试在 main 中调用一个方法时,它都会给我错误
不能从静态上下文中引用非静态方法
我尝试在 main 中创建对象并将它们作为参数发送给方法,但它也不起作用。
public class Foo {
public static void main(String[] args) {
Foo foo = new Foo();
foo.print();
}
public void print() {
System.out.println("Hello");
}
}
您需要一个类的实例才能从静态方法访问(调用)非静态方法。非静态方法或实例方法仅限于类的实例。
以下是描述它的简单示例:
class Test {
public void nonStaticMethod() {
}
public static void main(String[] args) {
Test t = new Test(); //you need to create an instance of class Test to access non-static methods from static metho
t.nonStaticMethod();
}
}
main
是一种静态方法。public static void main(String[] args)
.
从静态方法或块任何其他静态方法以及静态实例都是可访问的。如果您想访问非静态方法或实例,则必须创建对象并通过引用进行访问。
public class Test{
public static void main(String[] args){
print();// static method call
Test test = new Test();
test.print();// non static method call
}
public void print() {
System.out.println("Hello non static");
}
public static void print() {
System.out.println("Hello static");
}
}
创建对象时会实例化常规方法,但这不是static
方法所必需的。说你在一个static
方法中,不能保证非静态方法已经被实例化(即可能没有Object
创建),所以编译器不允许它。