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 usan UPPER_SNAKE_CASE para distinguirlas de las variables normales. Como ambas son static y final, accedes a ellas a través del nombre de la clase y sus valores tienen garantizado que nunca cambiarán:
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // ¡Error! No se puede modificarLas constantes normalmente se declaran public porque están pensadas para compartirse en toda tu aplicación. Piensa en valores como Math.PI: es una constante pública, estática y final que cualquier código puede utilizar.
¿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.
Desafío
FácilConstruye una utilidad MathConstants que almacene valores matemáticos importantes como constantes, junto con un CircleCalculator que use 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 usando campospublic static final:PIcon el valor3.14159E(el número de Euler) con el valor2.71828GOLDEN_RATIOcon el valor1.61803
Main.java: Usa tus constantes para realizar cálculos relacionados con un círculo. 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]
- El área del círculo:
Para los cálculos:
- Área = PI * radio * radio
- Circunferencia = 2 * PI * radio
- Diámetro áureo = 2 * radio * GOLDEN_RATIO
Recibirás una entrada: el radio (double).
Da formato a todos los valores de salida con 2 decimales usando String.format("%.2f", value). Accede a tus constantes mediante el nombre de la clase, como MathConstants.PI.
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]
}
}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
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón IteratorPractica por tu cuenta: Compilador de Java online