1

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

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

4

6 回答 6

5

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

那是错误的。

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

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

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

于 2012-05-09T13:19:12.797 回答
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 类的实例可在静态方法中使用。

于 2012-05-09T13:20:13.123 回答
2

由于每个 Java 程序都是从静态方法开始执行的,如果你引用的陈述是真的,那么任何 Java 程序都没有办法执行实例方法!

于 2012-05-09T13:20:47.200 回答
2

静态方法在 C 中没有默认上下文,而this.

但是,任何方法都可以使用类的实例来调用方法。

于 2012-05-09T13:21:23.287 回答
1

你在一个实例上调用一个实例方法——你不是试图直接调用一个实例方法。

于 2012-05-09T13:19:35.277 回答
0

您正在创建 A 类的一个实例并在其上调用一个方法。所以你调用的方法是实例方法(不是静态方法)。但是你不能调用 C 类的非静态方法。

于 2012-05-09T13:19:39.707 回答