我刚刚在一个文档中读到“静态方法只能调用其他静态方法而不能从中调用非静态方法”。但是当我试着测试时,我觉得看到了不同的东西。
我有一个C级,如下所述
import pckage1.*;
public class C
{
public static void main(String par[])
{
}
public static void cc()
{
A ob = new A();
ob.accessA(0);
}
}
其中A类是
package pckage1;
public class A
{
public A()
{
}
public void accessA(int x)
{
}
}
现在来自C类的cc STATIC方法,调用NON STATIC方法accessA()。如果关于静态方法的陈述是真的,怎么可能呢?
答案 0 :(得分:5)
静态方法只能调用其他静态方法,不能从中调用非静态方法
那是错误。
静态方法可以调用非静态方法,只要它们具有调用 on 上的方法的对象(正如您在代码片段中发现的那样)。如何调用非静态方法?
您无法从静态方法执行nonStaticFoo()
,因为它被解释为this.nonStaticFoo()
,并且因为静态方法中没有this
今天早些时候非常相似的问题:
答案 1 :(得分:2)
您没有调用类的非静态方法。
试试这个:
import pckage1.*;
public class C
{
public static void main(String par[])
{
}
public static void cc()
{
A ob = new A();
ob.accessA(0);
print();
}
public void print()
{
}
}
它不起作用,因为你从静态方法中调用一个非静态方法,并且你没有在静态方法中使用C类的实例。
答案 2 :(得分:2)
由于每个Java程序都是从静态方法开始执行的,如果你引用的语句是真的,那么任何Java程序都无法执行实例方法!
答案 3 :(得分:2)
静态方法在C中没有默认上下文,而不是this
。
但是,任何方法都可以使用类的intsnace来调用方法。
答案 4 :(得分:1)
您正在实例上调用实例方法 - 您不是试图直接调用实例方法。
答案 5 :(得分:0)
您正在创建A类实例并在其上调用方法。 所以你调用的方法是实例方法(不是静态方法)。 但是你不能调用C类的非静态方法。