2011-01-31 16 views
17

tengollamar a otro método en el principal método en Java

class foo{ 

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

    public void do(){} 


} 

pero luego cuando llamo do() de main ejecutando el comando java foo en la línea de comandos, java se queja de que no se puede llamar a un método de una función estática.

Así que mi pregunta es: ¿cómo se llaman métodos desde el método principal y si no es posible cuáles son algunas estrategias alternativas para llamar a métodos después de ejecutar el programa desde la línea de comandos utilizando el comando java.

+7

La palabra "do" es una palabra clave, no se puede nombrar un método como este. Quédese con las convenciones (al menos las más básicas), las clases de nombre comienzan con una letra mayúscula. – maaartinus

Respuesta

35

Sólo puede llamar método de instancia como do() (que es un nombre de método no permitido, por cierto) en una instancia de la clase:

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

public void doSomething(){} 

otra parte, hacer doSomething() estática, así, si funciona para su diseño .

+2

No lo hagas estático, no es una alternativa. Funciona, pero debería haber una buena razón para hacer algo estático. – maaartinus

+2

@maaartinus: ¿Puede hacer ese tipo de declaración radical cuando no tiene nada acerca de lo que hace el código? – skaffman

+0

¿No puedo? Claro, sin saber más, no puedo. Sin embargo, ¿cuál es la probabilidad de que el único método invocado desde main sea estático? Hay tan pocos motivos legítimos para los métodos estáticos, que usarlos casi nunca es una buena idea. Especialmente para novatos. – maaartinus

13

Compruebe la estática antes del método principal, esto declara el método como un método de clase, lo que significa que no necesita ninguna instancia para llamar. Entonces, como va a llamar a un método no estático, Java se queja porque está tratando de llamar al llamado "método de instancia", que, por supuesto, necesita una instancia primero;)

Si desea una mejor comprensión de las clases e instancias, crea una nueva clase con métodos de clase y instancia, crea un objeto en tu ciclo principal y llama a los métodos.

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

Recuerde también que las clases en Java deben comenzar con una letra mayúscula.

1

Si desea utilizar do() en su método principal hay 2 opciones porque uno es estático, sino otra (ver()) no

  1. Crear nueva instancia e invocar hacer() como new Foo().do();
  2. maquillaje static do() método

Tener un vistazo a este sun tutorial

7

ésta es una ONU fundamental en Java, pero puede ser un poco complicado para los nuevos programadores. Investigue un poco sobre la diferencia entre un método estático y un método de instancia. La diferencia básica es que el método de instancia do() solo es accesible para una instancia de la clase foo.

Debe crear una instancia de la clase, creando un objeto, que utilice para llamar al método de instancia.

He incluido su ejemplo con un par de comentarios y ejemplos.

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

Este es el método más común para llamar a cosas desde main(). –

0

Primero java no le permitirá tener el método do(). En su lugar, puede hacerlo doOperation().

Segundo No puede invocar directamente métodos no estáticos desde la función estática. Main es una función estática. Necesita crear una instancia de la clase primero y luego invocar el método utilizando esa instancia.

En tercer lugar, puede invocar el método estático directamente desde métodos no estáticos.

3

Puede hacerlo de múltiples maneras. Aquí hay dos. ¡Aclamaciones!

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