Menu

Sintaxis de Java: clases, métodos, sentencias y llaves

La forma de un programa en Java: el método main, las sentencias y los puntos y comas, los bloques y las llaves, y las reglas que el compilador exige antes de que tu código llegue a ejecutarse.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Cómo es un programa en Java

En la página anterior pusiste Java en marcha. Ahora veamos de qué está hecho realmente el código. Java es estricto y explícito: hay una forma fija que todo programa debe seguir, y el compilador comprueba esa forma antes de que se ejecute una sola línea.

Aquí tienes el programa Java completo más pequeño posible. Ejecútalo:

Son muchas palabras para imprimir una sola línea y, a diferencia de Python o JavaScript, no puedes omitir ninguna. Cada parte es obligatoria, así que vale la pena entender qué hace cada una. Lo desmontaremos de fuera hacia dentro.

Todo vive dentro de una clase

Java no tiene código "suelto" flotando en el nivel superior de un archivo. Todo el código vive dentro de una clase, declarada con la palabra clave class y un nombre:

public class Main {
    // everything goes in here
}

La { de apertura y su } de cierre correspondiente delimitan el cuerpo de la clase. El nombre Main lo eliges tú, con una regla importante: en un archivo .java normal, una clase public debe coincidir exactamente con el nombre del archivo. Una public class Main corresponde a Main.java. Equivócate con las mayúsculas y el compilador se negará a construirlo.

Aprenderás qué son realmente las clases en el capítulo de Clases. Por ahora, trata public class Main { ... } como el envoltorio obligatorio de tu código.

El método main es la línea de salida

Cuando ejecutas un programa Java, el entorno de ejecución busca un método concreto para empezar la ejecución:

public static void main(String[] args) {
    // your code starts here
}

Esta firma no es negociable. Cada palabra cumple una función:

  • public - el entorno de ejecución puede alcanzarlo desde fuera de la clase.
  • static - se ejecuta sin crear primero un objeto de la clase.
  • void - no devuelve nada cuando termina.
  • main - el nombre exacto que busca el entorno de ejecución.
  • String[] args - un array con los argumentos de la línea de comandos pasados al programa.

Si una sola palabra está mal (Static en lugar de static, String args en lugar de String[] args), puede que tu código siga compilando, pero al lanzarlo falla con Error: Main method not found in class Main. Ese mensaje casi siempre significa que hay una errata en esta línea.

Las sentencias terminan con un punto y coma

Una sentencia es una instrucción completa. En Java, toda sentencia termina con un punto y coma ;. El compilador usa el punto y coma para saber dónde acaba una instrucción y empieza la siguiente: los saltos de línea no le importan.

Como los saltos de línea se ignoran, las tres sentencias podrían ir en una sola línea y seguir funcionando, aunque nadie escribe Java así:

int score = 90; score = score + 5; System.out.println(score);

Olvida un punto y coma y el compilador te detiene antes de que el programa se ejecute:

int score = 90
System.out.println(score);
error: ';' expected
        int score = 90
                      ^

Un punto y coma que falta es el error de compilación más común con el que te toparás como principiante. Cuando el compilador señala una línea, revisa también la línea de arriba: ahí suele estar la omisión real.

Bloques y llaves

Las llaves { } agrupan sentencias en un bloque. El cuerpo de una clase es un bloque, el cuerpo de un método es un bloque, y el cuerpo de un if o de un bucle es un bloque. Los bloques pueden anidarse dentro de otros bloques:

Fíjate en la diferencia respecto a las sentencias: una línea que abre un bloque termina con {, no con un punto y coma, y no se pone un punto y coma después de la } de cierre de un método, una clase, un if o un bucle. Confundir esto es un error temprano clásico:

public static void main(String[] args) {
    System.out.println("hi");
}; // <- this semicolon is unnecessary (and after a class/method, wrong)

La sangría de los ejemplos es puramente para las personas. Java la ignora, pero una sangría coherente es la forma en que tú y todos los demás llevan la cuenta de qué { coincide con qué }. Deja que tu editor sangre automáticamente y las llaves se alinearán por ti.

Java distingue mayúsculas y minúsculas

Java trata las mayúsculas y las minúsculas como cosas completamente distintas. score, Score y SCORE son tres nombres separados. Lo mismo se aplica a las palabras clave y a los nombres integrados:

Si escribieras system.out.println (con s minúscula) o String Name y luego intentaras usar name, el compilador lo rechazaría. Algunos nombres que los principiantes escriben mal con frecuencia:

  • System - con S mayúscula. system.out.println(...) no compila.
  • String - con S mayúscula. Es una clase, a diferencia de los tipos primitivos en minúscula.
  • void, int, public, static - todos en minúscula. Son palabras clave.

La mayoría de los errores "cannot find symbol" se deben a un desliz de mayúsculas. El propio error te dice qué símbolo no pudo encontrar: compara sus mayúsculas con lo que escribiste.

Juntando las piezas

Aquí tienes un programa algo más grande que usa todo lo de esta página: una clase, el método main, varias sentencias, un bloque anidado y un uso coherente de mayúsculas:

Léelo de arriba abajo: la clase envuelve todo, main es donde empieza la ejecución, cada instrucción termina en ;, el cuerpo del if está agrupado en su propio bloque y todos los nombres integrados están bien capitalizados. Ese es el esqueleto de prácticamente todo programa Java que escribirás.

Siguiente: Comentarios

Ya sabes leer la estructura de un archivo Java. Lo siguiente que añadir son notas para las personas: texto que el compilador ignora por completo. La próxima página trata los comentarios: la forma de una sola línea //, la forma de bloque /* */ y cuándo un comentario realmente se gana su lugar en el código.

Preguntas frecuentes

¿Cuál es la sintaxis básica de un programa en Java?

Todo programa Java vive dentro de una clase, y la ejecución empieza en un método con la firma exacta public static void main(String[] args). Las sentencias terminan con un punto y coma, y los bloques de código se agrupan con llaves { }. Un programa mínimo es public class Main { public static void main(String[] args) { System.out.println("Hi"); } }.

¿Por qué Java necesita public static void main(String[] args)?

Ese es exactamente el punto de entrada que busca el entorno de ejecución de Java. public permite que el entorno lo llame desde fuera, static significa que se ejecuta sin crear primero un objeto, void significa que no devuelve nada y String[] args recibe los argumentos de la línea de comandos. Cambia cualquier palabra (incluso las mayúsculas) y el programa compila pero no arranca, con Error: Main method not found.

¿Todas las sentencias de Java necesitan un punto y coma?

Toda sentencia termina con un punto y coma: declaraciones de variables, asignaciones, llamadas a métodos. Pero las líneas que terminan en un bloque (if, for, while, la cabecera de una clase o un método) terminan con { en su lugar, y no se pone punto y coma después de la } de cierre de esos bloques. Olvidar un punto y coma es el error de compilación más común de los principiantes en Java.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR