关于静态关键字的困惑

时间:2012-05-09 13:17:40

标签: 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类是

package pckage1;

public class A 
{
public A() 
{
}
public void accessA(int x)
{   
}

}

现在来自C类的cc STATIC方法,调用NON STATIC方法accessA()。如果关于静态方法的陈述是真的,怎么可能呢?

6 个答案:

答案 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类的非静态方法。