Menu
Coddy logo textTech

Constantes (static final)

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 18 de 87.

Combinar static y final crea una constante - un valor que pertenece a la clase y nunca puede cambiar. Esta es la forma estándar de definir constantes en Java.

public class GameSettings {
    public static final int MAX_PLAYERS = 4;
    public static final double GRAVITY = 9.81;
    public static final String GAME_TITLE = "Space Adventure";
}

Por convención, los nombres de las constantes utilizan UPPER_SNAKE_CASE para distinguirlos de las variables regulares. Dado que son tanto static como final, se accede a ellos a través del nombre de la clase y se garantiza que sus valores nunca cambiarán:

System.out.println(GameSettings.MAX_PLAYERS);  // 4
// GameSettings.MAX_PLAYERS = 8;  // ¡Error! No se puede modificar

Las constantes se declaran típicamente como public porque están destinadas a ser compartidas en toda la aplicación. Piense en valores como Math.PI: es una constante public static final que cualquier código puede usar.

¿Por qué usar constantes en lugar de valores codificados directamente? Si escribes 4 en todo tu código y luego necesitas cambiarlo a 6, tendrías que buscar y actualizar cada ocurrencia. Con una constante como MAX_PLAYERS, lo cambias en un solo lugar.

Las constantes también hacen que el código sea más legible - MAX_PLAYERS es más claro que un misterioso 4.

challenge icon

Desafío

Fácil

Vamos a construir una utilidad MathConstants que almacene valores matemáticos importantes como constantes, junto con un CircleCalculator que utilice esas constantes para realizar cálculos.

Crearás dos archivos para organizar tu código:

  • MathConstants.java: Crea una clase que contenga constantes matemáticas utilizando campos public static final:
    • PI con el valor 3.14159
    • E (número de Euler) con el valor 2.71828
    • GOLDEN_RATIO con el valor 1.61803
    ¡Recuerda usar UPPER_SNAKE_CASE para los nombres de las constantes!
  • Main.java: Utiliza tus constantes para realizar cálculos de círculos. Recibirás un radio como entrada e imprimirás tres líneas:
    • El área del círculo: Area: [value]
    • La circunferencia del círculo: Circumference: [value]
    • El diámetro escalado por la proporción áurea: Golden Diameter: [value]

Para los cálculos:

  • Area = PI * radius * radius
  • Circumference = 2 * PI * radius
  • Golden Diameter = 2 * radius * GOLDEN_RATIO

Recibirás una entrada: el radio (double).

Formatea todos los valores de salida a 2 decimales usando String.format("%.2f", value). Accede a tus constantes a través del nombre de la clase, como MathConstants.PI.

Hoja de referencia

Combinar static y final crea una constante: un valor que pertenece a la clase y que nunca puede cambiar:

public class GameSettings {
    public static final int MAX_PLAYERS = 4;
    public static final double GRAVITY = 9.81;
    public static final String GAME_TITLE = "Space Adventure";
}

Por convención, los nombres de las constantes utilizan UPPER_SNAKE_CASE. Acceda a las constantes a través del nombre de la clase:

System.out.println(GameSettings.MAX_PLAYERS);  // 4
// GameSettings.MAX_PLAYERS = 8;  // ¡Error! No se puede modificar

Las constantes se declaran normalmente como public para ser compartidas en toda la aplicación. Hacen que el código sea más fácil de mantener y leer al reemplazar los valores codificados de forma rígida por nombres significativos.

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double radius = scanner.nextDouble();
        
        // TODO: Calcular el área usando MathConstants.PI
        // Fórmula: PI * radio * radio
        
        // TODO: Calcular la circunferencia usando MathConstants.PI
        // Fórmula: 2 * PI * radio
        
        // TODO: Calcular el diámetro de oro usando MathConstants.GOLDEN_RATIO
        // Fórmula: 2 * radio * GOLDEN_RATIO
        
        // TODO: Imprimir los resultados con formato de 2 decimales
        // Usar String.format("%.2f", value) para el formato
        // Formato de salida:
        // Area: [value]
        // Circumference: [value]
        // Golden Diameter: [value]
        
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos