2011-01-31 19 views
17

mamwywołanie innej metody z głównej metody w Javie

class foo{ 

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

    public void do(){} 


} 

ale wtedy gdy zgłoszę do() z main uruchamiając komendę java foo w linii poleceń, Java narzeka, że ​​nie można wywołać metodę z funkcja statyczna.

Moje pytanie brzmi: jak wywołać metody z głównej metody, a jeśli nie jest możliwe, jakie są alternatywne strategie wywoływania metod po uruchomieniu programu z wiersza poleceń za pomocą polecenia java.

+7

Słowo "do" jest słowem kluczowym, nie można nazwać takiej metody. Trzymaj się (przynajmniej bardzo podstawowych) konwencji, klasy imion zaczynając od dużej litery. – maaartinus

Odpowiedz

35

Można jedynie wywołać metodę instancji jak do() (co jest nielegalne nazwa metody, nawiasem mówiąc) przed instancją klasy:

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

public void doSomething(){} 

Ewentualnie dokonać doSomething() statyczny, a także, jeśli to pracuje dla swojego projektu .

+2

Nie rób tego statycznie, nie ma alternatywy. Działa, ale powinien istnieć dobry powód, by cokolwiek statycznego zrobić. – maaartinus

+2

@maaartinus: Możesz zrobić takie ogólne stwierdzenie, gdy nic nie wiesz o tym, co robi kod? – skaffman

+0

Czy nie mogę? Oczywiście, nie wiedząc więcej, nie mogę. Jaka jest jednak szansa, że ​​jedyna metoda wywołana z poziomu głównego powinna być statyczna? Jest tak mało uzasadnionych powodów dla metod statycznych, że ich używanie prawie nigdy nie jest dobrym pomysłem. Specjalnie dla początkujących. – maaartinus

13

Sprawdź przed statyczną metodą statyczną, to deklaruje metodę jako metodę klasy, co oznacza, że ​​nie wymaga wywoływania instancji. W związku z tym, że zamierzasz nazwać metodę niestatyczną, Java narzeka, ponieważ próbujesz wywołać tzw. "Metodę instancji", która, oczywiście, wymaga najpierw instancji;)

Jeśli chcesz lepiej zrozumieć zajęcia i instancje, utwórz nową klasę za pomocą metod instancji i klas, utwórz obiekt w pętli głównej i wywołaj metody!

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(){ 
    } 
} 

Pamiętaj również, że zajęcia w Javie powinny zaczynać się od dużej litery.

1

Jeśli chcesz użyć do() w głównej metody istnieją 2 możliwości wyboru, ponieważ jeden jest statyczna, ale inne (zrobić()) nie

  1. Tworzenie nowej instancji i wywołać zrobić() jak new Foo().do();
  2. marki static do() metoda

Zapraszamy do obejrzenia tej sun tutorial

7

jest to fundamentalna un w Javie, ale może być nieco trudne dla nowych programistów. Wykonaj małe badanie różnic między metodą statyczną a metodą instancji. Podstawowa różnica polega na tym, że metoda instancji do() jest dostępna tylko dla instancji klasy foo.

Należy utworzyć instancję klasy, tworząc obiekt, którego używa się do wywoływania metody instancji.

Podałem Ci przykład z kilkoma komentarzami i przykładem.

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 
+0

Jest to najczęstsza metoda wywoływania rzeczy z głównej(). –

0

Pierwsza java nie pozwoli Ci na użycie metody do(). Zamiast tego możesz zrobić to doOperation().

Po drugie Nie można wywoływać bezpośrednio metod niestatycznych z funkcji statycznych. Main to funkcja statyczna. Najpierw musisz utworzyć instancję klasy, a następnie wywołać metodę przy użyciu tej instancji.

Po trzecie, można wywołać metodę statyczną bezpośrednio z metod nie statycznych.

3

Możesz zrobić to na wiele sposobów. Oto dwa. Twoje zdrowie!

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