在另一个类中调用方法

时间:2012-02-23 16:10:30

标签: java methods static

我有一个名为Ball的类,我想在名为MagicBallImage的类中调用一个名为update的方法。下面是Ball类中的方法isVisible(),我试图从中调用方法更新,但是我收到一条错误说:

Ball.java:58: non-static method update() cannot be referenced from a static context. 
MagicBallImage.update();

Ball Class

public boolean isVisible()
{
  if (magicBallState != 1)
  {
    return true;
    MagicBallImage.update();
  }
}

任何人都知道如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

它告诉你,你没有尝试在没有类实例的情况下调用非静态方法。您需要MagicBallImage的实例来调用方法,或者您需要将方法转换为static

答案 1 :(得分:2)

 if (magicBallState != 1)
  {
    return true;
    MagicBallImage.update();
  }
  1. 您在调用update之前返回,因此无效

  2. update()不是static method,因此您无法从静态上下文中调用它。如果您已经在对象范围内,则可以致电update()this.update(),或致电o.update(),其中o是您的对象。

答案 2 :(得分:1)

此错误告诉您,如果未指定MagicBallImage实例,则无法调用更新。

可能发生了两件事:

  • 您忘记了MagicBallImage.update()方法static
  • 您需要使用MagicBallImage方法可用的new运算符创建您在某处创建的isVisible()实例。

注1:现在编码的方式,MagicBallImage.update()无法访问,因为它位于return语句之后。

注2:getter isVisible非常不希望产生副作用,例如在另一个类的实例中更新某些内容。几乎100%的迹象表明您的设计出了问题。

答案 3 :(得分:0)

如果要像这样调用此方法,则必须声明方法static。如果不是,您必须声明MagicBallImage的实例才能访问update()

MagicBallImage mbi = new MagicBallImage();
mbi.update();

答案 4 :(得分:0)

使update()方法成为静态或创建MagicBallImage的实例并调用update()