1

出色地。我是 Java 新手。我知道 main 需要是静态方法。但是我读过静态方法只能调用其他静态方法?那我们怎么可以调用非静态方法呢?它是一个困惑而不是一个问题。例如

 public class Function
    {
    public static int side = 10,area,vol;

    public static void main(String args[])
    {
        System.out.println("programme to find area and volume");
        Function fu = new Function();
        fu.calarea();
    }
    public void calarea()
    {
        area = side*side;
        System.out.println("finished calculating area now calling volume");
        calvol();
    }
    public void calvol()
    {
        vol = area*side;
        System.out.println("finished calculating volume now calling display");
        display();
    }
    public void display()
    {
        System.out.println("side of a square ==>"+side);
        System.out.println("area of a square ==>"+area);
        System.out.println("volume of a square ==>"+vol);
    }
    }

在这里, main() 是一个静态方法。那么,它必须只调用静态方法吗?怎么会调用 calarea() 呢?如果我通过创建一个对象是对的?

编辑:

我也是这么想的。而且我知道如何调用静态方法。我只想知道如果可以调用非静态方法(以任何方式),那为什么说静态方法只能调用其他静态方法?

4

4 回答 4

9

但是我读过静态方法只能调用其他静态方法?

这要么是错误陈述,要么是误读。

“规则”的一个更正确的说法是静态方法不能在没有特定(非空)实例引用的情况下调用实例方法。或者换句话说,this在静态方法中无效,因此不能显式或隐式使用它来进行方法调用。

你的例子并没有打破规则......在任何一种形式。它正在使用非空对象引用,并且没有this显式或隐式使用。


大多数其他子问题都由上述“讨论”,但是......

如果我通过创建一个对象是对的?

是的。有必要创建对象以获得可用于调用实例方法的对象引用。没有其他方法可以调用实例方法。

于 2013-01-17T23:11:20.970 回答
3

是的,通过使用实例,您可以调用实例方法。

calarea() 

是实例方法,因此,您需要创建Function类的实例并调用calarea()该实例引用。

于 2013-01-17T23:08:20.153 回答
1

还有其他口味,但这个应该可以理解。

如果您有一个混合了静态方法和实例方法的类,则静态方法不能调用实例方法。例如

在伪代码中

class SomeClass
{
static void IDoSomething()
{
   UDoSomething();  
}

void UDosomething
{
}
}

会给你一个错误但是

class SomeClass
{
static void IDoSomething(SomeClass argSomeClass)
{
   argSomeClass.UDoSomething();  
}

void UDosomething
{
}
}

会好的。

于 2013-01-17T23:17:02.517 回答
0

你说的对。您需要创建类函数的实例(对象)。所以正确的代码是:

Function f = new Function();
f.calvol();
于 2013-01-17T23:10:54.207 回答