He tenido una larga conversación con un amigo mío sobre el correcto y buen uso del método main () en Java. Básicamente, tenemos una clase como esta:

public class AnImporter implements Runnable {
  //some methods, attributes, etc.
}

Pero donde poner el método main? Yo concider es una buena práctica para «mantener el código donde corresponde», convirtiendo así el código de arriba en

public class AnImporter implements Runnable {
  public static void main(String [] args){
    //Startup code for Importer App here
  }
  //some methods, attributes, etc.
}

Mientras mi amigo sostiene que «el código de inicio no tiene nada que ver con la aplicación en sí», por lo que debe ser colocada en otra clase, como este:

public class AnImporter implements Runnable {
  //some methods, attributes, etc.
}

public class AnApplication {
  //Nothing here
  public static void main(String [] args){
    AnImporter a = new AnImporter();
    //Startup code here
  }
  //Nothing here
}

A pesar del hecho de que discutimos el asunto ya hace tiempo que acabaron con ninguna conclusión sobre qué camino es el mejor método en Java. ¿Cuál es tu opinión sobre este tema? Donde y lo que es más importante, ¿por qué, qué lugar su principal método con el que se colocó?

  • usted necesita preguntarse a sí mismo : ¿por qué (o por qué no) ¿el principal método de pertenecer a esa clase?
InformationsquelleAutor kryoko | 2009-04-08

6 Comentarios

  1. 35

    Estoy de acuerdo con tu amigo. Estamos construyendo potencialmente reutilizables servicio en AnImporter que potencialmente podrían ser utilizados en múltiples programas con múltiples main. Por tanto, haciendo un especial y la incrusta en AnImporter no tiene mucho sentido.

  2. 14

    Probablemente me vaya con su amigo como me gustaría salir de la clase con el método main tan pronto como sea posible. Ayuda a facilitar la prueba cuando se desea probar de forma atómica (solo el ejecutable de la clase) o desea burlarse de las cosas. Antes de salir de el método principal, la más opciones que usted tiene. Si usted tiene una clase con el método main y otras cosas en él, podría causar problemas rápidamente. (aunque es posible que no parece de esa manera con un ejemplo sencillo como el que usted describe)

    Pero yo diría que la lectura y la capacidad de prueba son dos buenas razones para salir del método main (y sus abarca clase) lo antes posible. Pero bueno..eso es sólo conmigo 😉

    • Sí. También me gustaría salir de Subprograma/JApplet tan pronto como sea posible.
  3. 11

    Yo no contaminar un Ejecutable clase con un método main. Lo mismo vale para casi cualquier clase que no hace nada en su aplicación. Generalmente voy a tener una clase como esta:

    public class App {
      public static void main(String args[]) {
        Thread t = new Thread(new Blah());
        t.start();
          synchronized (t) {
            t.wait();
          }
      }
    }
    
    public class Blah implements Runnable {
      public void run() {
        //do normal stuff
      }
    }

    lugar de:

    public class Blah implements Runnable {
      public void run() {
        //do normal stuff
      }
    
      public static void main(String args[]) {
        Thread t = new Thread(new Blah());
        t.start();
        synchronized (t) {
          t.wait();
        }
      }
    }

    Se siente más limpio.

  4. 7

    Yo siempre separada de la principal, el resto del código, por varias razones:

    1) Una de las principales es, en cierto modo, un hack para permitir que el programa se inicie desde la línea de comandos. Cualquier clase que la contiene debe tener una única responsabilidad: vamos a comenzar el programa desde la línea de comandos. Por ponerlo con su principal ejecutables, está contaminando el ejecutable.

    2) Usted podría terminar encima de tener múltiples de red (por ejemplo, con determinados parámetros predeterminados, con modos especiales, etc.)

    3), Usted podría terminar de ejecutar el programa desde un entorno diferente (por ejemplo, un plugin de Eclipse o OGSI módulo, un applet, una herramienta basada en web, etc.). En esos casos, se quiere restringir el acceso a su principal. Ponerlo con la funcionalidad impide que.

    4) a veces es más fácil salir de su principal en el paquete por defecto para hacer correr el tiempo de ejecución más rápido (por ejemplo, java myblabla par1 par2 par3), pero definitivamente no quiero que el resto de su código en el paquete por defecto.

    • +1 para una buena respuesta, pero yo diría que uno nunca debe poner cualquier clase en el paquete «default», ni siquiera el principal.
    • He encontrado que los usuarios que no están acostumbrados a Java o que el uso de herramientas de línea de comandos a menudo prefieren un estilo de C invocación. Están dispuestos a «absorber el TARRO», pero es el paquete de tiempo de la secuencia que no les gusta.
  5. 2

    La interfaz principal (una lista de cadenas de caracteres) es de aproximadamente inútil, salvo para el shell del sistema operativo.

    Su principal debe tener tan poco código como sea humanamente posible en ella.

    De hecho, su public class ThisIsMyApp {...} debe ser nada más que la interfaz del sistema operativo para el trabajo real, que está en otro lugar.

  6. 0

    Me gustaría separar el principal método del código.

    Aunque también tengo un proyecto diferente. Incluye no un verdadero programa de trabajo para una solución. Aquí me necesita para ejecutar diferentes soluciones para diferentes problemas utilizando (y desarrollo) de la misma biblioteca. Diferentes problemas no son paralelas. Necesito ejecutar un solo problema solo de mi IDE. Me pareció conveniente utilizar el mismo proyecto con un gran número de clases con PSVM métodos.

    Este proyecto contiene la programación de los concursos de soluciones para más de 400 de los diferentes problemas. ¿Tienes una mejor organización de la presente?

Dejar respuesta

Please enter your comment!
Please enter your name here