Невозможно вызвать нестатический метод из статического - того же класса

У меня есть класс, и в нем есть несколько статических и несколько нестатических методов, поэтому, когда я пытаюсь получить доступ к нестатическим методам из статических, я получаю знаменитую ошибку. И всякий раз, когда я ищу этот форум, я получаю решения, когда есть два класса, и из одного вы пытаетесь добраться до другого. Мой вопрос: как вызвать нестатический метод из статического, если они находятся в одном классе?

Я пытаюсь с

new ClassName().methodName(); 

но мой метод содержит отправку Intent и finish (), поэтому если я создаю другой объект, то finish не работает.


person Adnan Pirota    schedule 08.11.2013    source источник
comment
Где находятся классы, не имеет значения (в некоторых редких случаях может). Сконцентрируйтесь на понимании того, что такое static участники.   -  person Sotirios Delimanolis    schedule 08.11.2013
comment
Если вы попытались вызвать нестатический method из статического контекста, вопрос будет в том, какой именно. В вашем классе могут быть тысячи объектов, каждый со своим собственным method методом.   -  person Richard Tingle    schedule 08.11.2013
comment
Представьте себе это так. Есть фабрика с чертежом автомобиля, теперь у машины есть статические методы, такие как howManyCarsHaveBeenBuilt (), а также нестатические методы, такие как accelerate(). Если вы ткнете в чертеж и скажете accelerate(), какую из миллиардов машин вы хотите разогнаться?   -  person Richard Tingle    schedule 08.11.2013


Ответы (1)


Чтобы вызвать non-static method из статического метода, вы должны сначала иметь instance of the class, содержащий нестатический метод.

Нестатический метод называется ON экземпляром класса, тогда как статический метод принадлежит этому классу.

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);

   }
}

Надеюсь это поможет.

person JNL    schedule 08.11.2013
comment
Но я работаю в Android, а не onCreate создает экземпляр класса? - person Adnan Pirota; 08.11.2013
comment
onCreate () {} создает экземпляр Bundle, но не ваш класс. public void onCreate(Bundle savedInstanceState) {....} - person JNL; 08.11.2013