вызов другого метода из основного метода в java

у меня есть

class foo{

   public static void main(String[] args){
      do();
   }

   public void do(){}


}

но затем, когда я вызываю do() из main, выполнив команду java foo в командной строке, java жалуется, что вы не можете вызвать метод из статической функции.

Итак, мой вопрос: как вы вызываете методы из основного метода и, если это невозможно, какие альтернативные стратегии для вызова методов после запуска программы из командной строки с помощью команды java.


person kamikaze_pilot    schedule 31.01.2011    source источник
comment
Слово do - это ключевое слово, вы не можете так назвать метод. Придерживайтесь (по крайней мере, самых основных) соглашений, называйте классы с заглавной буквы.   -  person maaartinus    schedule 31.01.2011


Ответы (6)


Вы можете вызывать только метод экземпляра, такой как do() (который, кстати, является недопустимым именем метода) для экземпляра класса:

public static void main(String[] args){
  new Foo().doSomething();
}

public void doSomething(){}

Как вариант, сделайте doSomething() статическим, если это подходит для вашего дизайна.

person skaffman    schedule 31.01.2011
comment
Не делайте это статичным, альтернативы нет. Это работает, но должна быть веская причина делать что-то статичным. - person maaartinus; 31.01.2011
comment
@maaartinus: Вы можете сделать такое широкое заявление, когда ничего не знаете о том, что делает код? - person skaffman; 31.01.2011
comment
Я не могу? Конечно, не зная больше, я не могу. Однако каков шанс, что единственный метод, вызываемый из main, должен быть статическим? У статических методов так мало законных причин, что их использование почти никогда не бывает хорошей идеей. Специально для новичков. - person maaartinus; 31.01.2011

Проверьте статику перед основным методом, это объявляет метод как метод класса, что означает, что ему не нужно вызывать экземпляр. Итак, поскольку вы собираетесь вызвать нестатический метод, Java жалуется, потому что вы пытаетесь вызвать так называемый «метод экземпляра», которому, конечно, сначала нужен экземпляр;)

Если вы хотите лучше понять классы и экземпляры, создайте новый класс с методами экземпляра и класса, создайте объект в своем основном цикле и вызовите методы!

 class Foo{

    public static void main(String[] args){
       Bar myInstance = new Bar();
       myInstance.do(); // works!
       Bar.do(); // doesn't work!

       Bar.doSomethingStatic(); // works!
    }
 }

class Bar{

   public do() {
   // do something
   }

   public static doSomethingStatic(){
   }
}

Также помните, что классы в Java должны начинаться с заглавной буквы.

person yan.kun    schedule 31.01.2011

Это фундаментальное понимание Java, но оно может быть немного сложным для начинающих программистов. Изучите разницу между статическим методом и методом экземпляра. Основное отличие заключается в том, что метод экземпляра do () доступен только экземпляру класса foo.

Вы должны создать экземпляр (создать экземпляр) класса, создав объект, который вы используете для вызова метода экземпляра.

Я включил ваш пример с парой комментариев и примером.

public class SomeName {

//this is a static method and cannot call an instance method without a object
public static void main(String[] args){

    // can't do this from this static method, no object reference
    // someMethod();

    //create instance of object
    SomeName thisObj = new SomeName();
    //call instance method using object
    thisObj.someMethod();
}

//instance method
public void someMethod(){
    System.out.print("some message...");
}

}// end class SomeName
person jamesTheProgrammer    schedule 22.09.2011
comment
Это самый обычный способ вызова вещей из main (). - person Brett Slocum; 16.09.2013

Вы можете сделать это несколькими способами. Вот два. Ваше здоровье!

package learningjava;

public class helloworld {
    public static void main(String[] args) {
        new helloworld().go();
        // OR
        helloworld.get();
    }

    public void go(){
        System.out.println("Hello World");
    }
    public static void get(){
        System.out.println("Hello World, Again");
    }
}
person richardl    schedule 24.07.2014

Если вы хотите использовать do() в своем основном методе, есть 2 варианта, потому что один статичен, а другой (do ()) нет

  1. Создайте новый экземпляр и вызовите do () как new Foo().do();
  2. сделать static do() метод

Посмотрите это руководство по солнцу

person Community    schedule 31.01.2011

Первая java не позволит вам использовать do() метод. Вместо этого вы можете сделать это doOperation().

Во-вторых, вы не можете напрямую вызывать нестатические методы из статической функции. Main - статическая функция. Сначала вам нужно создать экземпляр класса, а затем вызвать метод, используя этот экземпляр.

В-третьих, вы можете вызывать статический метод непосредственно из нестатических методов.

person csarathe    schedule 21.01.2012