Java 关于静态关键字的混淆
我刚刚在一篇文档中读到“静态方法只能调用其他静态方法,不能从中调用非静态方法”。但当我尝试测试它时,我想我看到了一些不同的东西 我有一个C类,如下所述Java 关于静态关键字的混淆,java,oop,static,Java,Oop,Static,我刚刚在一篇文档中读到“静态方法只能调用其他静态方法,不能从中调用非静态方法”。但当我尝试测试它时,我想我看到了一些不同的东西 我有一个C类,如下所述 import pckage1.*; public class C { public static void main(String par[]) { } public static void cc() { A ob = new A(); ob.accessA(0); } } A班在哪里 p
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方法调用一个非静态方法accessA()。如果关于静态方法的陈述是真的,那怎么可能呢
静态方法只能调用其他静态方法,不能从中调用非静态方法
这是错误的
静态方法可以调用非静态方法,只要它们有对象可以调用这些方法(正如您在代码段中发现的那样)。否则如何调用非静态方法
您不能从静态方法中执行nonStaticFoo()
,因为它被解释为this.nonStaticFoo()
,并且在静态方法中没有可用的this
今天早些时候的问题非常相似:
nonStaticFoo()
,因为它被解释为this.nonStaticFoo()
,并且在静态方法中没有可用的this
今天早些时候的问题非常相似:
但是您不能调用类C的非静态方法。您正在创建类a的实例并在其上调用方法。 因此,您正在调用的方法是实例方法(不是静态方法)。
但是您不能调用类C的非静态方法。您没有调用类的非静态方法 试试这个:
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类实例。您没有调用类的非静态方法 试试这个:
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类的实例可供使用。因为每个Java程序都是从静态方法开始执行的,如果您引用的语句是真的,任何Java程序都不可能执行实例方法 因为每个Java程序都是从静态方法开始执行的,如果您引用的语句是真的,那么任何Java程序都不可能执行实例方法 静态方法在C中没有默认上下文,而不是
this
但是,任何方法都可以使用类的接口来调用方法。静态方法在C中没有默认上下文,而不是
此
但是,任何方法都可以使用类的一个接口来调用一个方法。