【问题标题】:Can not call non-static method from static - same class [duplicate]无法从静态调用非静态方法-同一类[重复]
【发布时间】:2013-11-20 14:41:21
【问题描述】:

我有一个类,其中有一些静态方法和一些非静态方法,所以当我尝试从静态方法访问非静态方法时,我得到了那个著名的错误。每当我在这个论坛上搜索时,我都会在有两门课程时得到解决方案,而您正试图从一门课程中找到另一门课程。我的问题是如果它们在同一个类中,如何从静态方法调用非静态方法?

我正在尝试

new ClassName().methodName(); 

但我的方法包含 Intent 和 finish() 的发送,所以如果我创建的对象不是 finish(),则无法正常工作。

【问题讨论】:

  • 类在哪里没有区别(在极少数情况下可能)。专注于了解static 成员是什么。
  • 如果您尝试从静态上下文中调用非静态method,问题将是“哪个”。您的类可能有数千个对象,每个对象都有自己的 method 方法
  • 想象一下吧。有一个带有 Car 蓝图的工厂,现在 car 有诸如 howManyCarsHaveBeenBuilt() 之类的静态方法,但也有诸如 accelerate() 之类的非静态方法。如果你戳蓝图说accelerate()你想加速十亿辆汽车中的哪一个?

标签: java methods static non-static


【解决方案1】:

要从静态方法调用non-static method,您必须首先拥有一个包含非静态方法的instance of the class

在类的实例上调用非静态方法,而静态方法属于该类。

class Test
{
   public static void main(String args[])
   {
      Test ot =new Test();
      ot.getSum(5,10);     // to call the non-static method
   }

   public void getSum(int x ,int y) // non-static method.
   {
      int a=x;
      int b=y;
      int c=a+b;
      System.out.println("Sum is " + c);

   }
}

希望这会有所帮助。

【讨论】:

  • 但是我在Android中工作不会onCreate创建类的实例?
  • onCreate(){} 创建 Bundle 的实例,但不会创建您的类。 public void onCreate(Bundle savedInstanceState) {....}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
相关资源
最近更新 更多