Java 关于静态关键字的混淆

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

我刚刚在一篇文档中读到“静态方法只能调用其他静态方法,不能从中调用非静态方法”。但当我尝试测试它时,我想我看到了一些不同的东西

我有一个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方法调用一个非静态方法accessA()。如果关于静态方法的陈述是真的,那怎么可能呢

静态方法只能调用其他静态方法,不能从中调用非静态方法

这是错误的

静态方法可以调用非静态方法,只要它们有对象可以调用这些方法(正如您在代码段中发现的那样)。否则如何调用非静态方法

您不能从静态方法中执行
nonStaticFoo()
,因为它被解释为
this.nonStaticFoo()
,并且在静态方法中没有可用的
this

今天早些时候的问题非常相似:

静态方法只能调用其他静态方法,不能从中调用非静态方法

这是错误的

静态方法可以调用非静态方法,只要它们有对象可以调用这些方法(正如您在代码段中发现的那样)。否则如何调用非静态方法

您不能从静态方法中执行
nonStaticFoo()
,因为它被解释为
this.nonStaticFoo()
,并且在静态方法中没有可用的
this

今天早些时候的问题非常相似:


您在实例上调用实例方法--您没有尝试直接调用实例方法。

您在实例上调用实例方法--您没有尝试直接调用实例方法。

您正在创建类A的实例并在其上调用方法。 因此,您正在调用的方法是实例方法(不是静态方法)。
但是您不能调用类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中没有默认上下文,而不是

但是,任何方法都可以使用类的一个接口来调用一个方法。