Cómo funciona el método main() en Java

Este es el primer artículo en el que voy a tratar dificultades del examen de certificación OCAJ8P. En este en concreto, te voy a explicar en qué consiste el método main() en Java y, lo que es más importante, te voy a señalar las variantes válidas que existen de este método.

More...

Ejemplo de método main() en Java

El método main() con su abreviatura, en IntelliJ IDEA

¿Por qué es importante hilar tan fino?

Sí, ya sé que es probable que en el 99% de ocasiones en las que te encuentres este método lo vas a ver tal y como aparece en el gif, pero el examen de certificación de Oracle tiende a poner trampas en las que puede caer cualquiera. ¿Y sabes por qué? Porque a menudo el examen parece que te está preguntando sobre una cosa, pero en realidad el problema está en otra parte. Por ejemplo, imagínate que tienes ante ti unas cuantas líneas de código, con unas cuantas lambdas. Miras y remiras las lambdas y llegas a la conclusión, correcta, de que no hay ningún error. Y de ahí deduces que el código funciona a la perfección.

Pues no, resulta que el código compila pero no se ejecuta porque el método main() en Java no se puede llamar Main():

En este caso se ve muy claro, pero en el examen estás demasiado nervioso, y demasiado centrado en las lambdas, como para fijarte.

¡Las preguntas del examen de certificación de Java OCAJ8P tienen trampas ocultas!

Compártelo

Estructura del método main() en Java

Lo que debes saber en primer lugar es que el método main() es el punto de entrada de la aplicación, es decir, es el punto en el que comienza la ejecución de esta. Es por ello que ha de ser public y static.

Ha de ser público y estático

  • check
    public: Un método público es accesible desde fuera de la clase.
  • check
    static: Un método estático es aquel que se puede ejecutar sin una instancia de la clase.

Al ser el punto de entrada, ha de ser accesible desde fuera de la clase en la que se encuentra. Además, al ser lo primero que se ejecuta, ha de ser posible su ejecución antes de instanciar un objeto.

Además, ha de tener un tipo de devolución void

Como consecuencia directa de ser la primera línea de código que se ejecuta, no tiene sentido que tenga un tipo de devolución distinto de void, ya que no hay un código anterior que pueda hacer algo con ese valor. El método main() en Java siempre tiene un tipo de devolución void.

A continuación, ha de llamarse main(), en minúscula

El método main() ha de llamarse main, en minúscula. A la hora de ejecutar el código, el entorno de ejecución de Java (JRE) busca el punto de entrada predeterminado. El JRE solo sabe que es un método llamado main. Si no lo encuentra, no puede acceder. Es por ello que puedes considerar main como una palabra clave de acceso. Si la cambias, tu aplicación no se ejecutará.

Por último, ha de aceptar un único parámetro: una matriz String[]

El método main() acepta un parámetro (y solo uno): una matriz de tipo String. Esta matriz recoge los valores que introduzcas a la hora de ejecutar tu aplicación desde la línea de comandos. Da igual el valor que introduzcas; el JRE lo transformará a String.

Hasta aquí, he explicado el mínimo básico que tienes que saber sobre el método main() en Java. No obstante, existe una serie de momentos a los que tienes que prestar atención. El método main() tiene variantes correctas, que se ejecutan perfectamente, y variantes que no van a ejecutarse.

Cuando NO va a compilar el método main() en Java

Antes de seguir, ten en cuenta que el método main() no compila solo en dos casos:

  • check
    Cuando contiene un error de sintaxis (no cerrar el paréntesis, por ejemplo).
  • check
    Cuando la devolución no es void pero no hay un return dentro del metodo. 

Este último tiene truco, ya que si tiene el return va a compilar, pero va a provocar un error de tiempo de ejecución (Runtime error) en la línea 7.

​​​Cuándo NO se va a ejecutar el método main() en Java

Como puedes deducir de lo que has leído más arriba, el método main() no se ejecutará cuando no respete las reglas que te he enunciado. Si ves que el método es private en lugar de public, si le falta ser static, si se llama Main, si el parámetro es String en lugar de String[]... Asegúrate de que el método main() sigue las reglas.

Cuando SÍ se va a ejecutar el método main() en Java

Aparte de la forma predeterminada en la que suele aparecer y que te he mostrado al inicio de este artículo, hay varias "variantes" del método main() que son totalmente válidas y que pueden aparecer en el examen de certificación.

public static vs. static public

Las palabras clave public y static son intercambiables, de manera que pueden aparecer en cualquier orden.

main() puede ser final

El método main() puede ser final y, junto con public y static, puede aparecer en cualquier orden.

El método main() acepta varargs

El parámetro de main() no tiene que ser necesariamente una matriz String[], también puede ser String...

Recuerda, también, que una matriz se puede declarar tanto así:

Como así:

Esto también se aplica al parámetro de main().

El parámetro puede recibir cualquier nombre

El parámetro se llama args de manera predeterminada, pero el método main() se va a ejecutar sin problema independientemente del nombre del parámetro. Tú en tu código llámalo siempre args, pero en el examen espera encontrarte cualquier cosa.

Ejercicios

  • Crea una aplicación sencilla que imprima la matriz args y ejecútala primero con los parámetros: "hola me" "llamo", luego con los parámetros "hola, me" "llamo" y, por último, con los parámetros hola, me" "llamo". ¿Qué diferencia hay en el resultado? ¿Por qué?
  • ¿Qué pasa si ejecutas la aplicación anterior sin parámetros? ¿Tiene args valor null?

Los recursos con los que yo superé el OCA con una puntuación del 92%

Si estás en serio con la programación en Java, te recomiendo dos recursos esenciales: el manual de Java que te muestro a la izquierda, y los exámenes de práctica de Enthuware. Son los que yo utilicé para obtener un 92% de puntuación.

También existen cursos en español en Udemy, y en inglés en Skillshare, Lynda y Udacity (en este último, gratuitos). Échale un vistazo al apartado Recursos para Java.

Deja una respuesta 0 comentarios

Utilizamos cookies propias y de terceros para realizar el análisis de la navegación de los usuarios y mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Puede cambiar la configuración u obtener más información en nuestra política de cookies. ACEPTAR

Aviso de cookies