Constantes (static final)
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 18 de 87.
A combinação de static e final cria uma constante - um valor que pertence à classe e nunca pode mudar. Esta é a forma padrão de definir constantes em 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 convenção, nomes de constantes usam UPPER_SNAKE_CASE para distingui-los de variáveis comuns. Como eles são tanto static quanto final, você os acessa através do nome da classe e seus valores têm a garantia de nunca mudar:
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // Erro! Não é possível modificarConstantes são tipicamente declaradas public porque seu propósito é serem compartilhadas em toda a sua aplicação. Pense em valores como Math.PI - é uma constante public static final que qualquer código pode usar.
Por que usar constantes em vez de valores fixos? Se você escrever 4 em todo o seu código e depois precisar alterá-lo para 6, teria que encontrar e atualizar cada ocorrência. Com uma constante como MAX_PLAYERS, você a altera em um único lugar.
Constantes também tornam o código mais legível - MAX_PLAYERS é mais claro do que um misterioso 4.
Desafio
FácilVamos construir um utilitário MathConstants que armazena valores matemáticos importantes como constantes, junto com um CircleCalculator que utiliza essas constantes para realizar cálculos.
Você criará dois arquivos para organizar seu código:
MathConstants.java: Crie uma classe que contém constantes matemáticas usando campospublic static final:PIcom o valor3.14159E(número de Euler) com o valor2.71828GOLDEN_RATIOcom o valor1.61803
Main.java: Use suas constantes para realizar cálculos de círculo. Você receberá um raio como entrada e imprimirá três linhas:- A área do círculo:
Area: [value] - A circunferência do círculo:
Circumference: [value] - O diâmetro escalonado pela proporção áurea:
Golden Diameter: [value]
- A área do círculo:
Para os cálculos:
- Area = PI * radius * radius
- Circumference = 2 * PI * radius
- Golden Diameter = 2 * radius * GOLDEN_RATIO
Você receberá uma entrada: o raio (double).
Formate todos os valores de saída para 2 casas decimais usando String.format("%.2f", value). Acesse suas constantes através do nome da classe, como MathConstants.PI.
Folha de consulta
Combinar static e final cria uma constante - um valor que pertence à classe e nunca pode mudar:
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 convenção, nomes de constantes usam UPPER_SNAKE_CASE. Acesse constantes através do nome da classe:
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // Erro! Não é possível modificarConstantes são tipicamente declaradas como public para serem compartilhadas em toda a sua aplicação. Elas tornam o código mais fácil de manter e ler, substituindo valores fixos (hardcoded) por nomes significativos.
Experimente você mesmo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double radius = scanner.nextDouble();
// TODO: Calcule a área usando MathConstants.PI
// Fórmula: PI * radius * radius
// TODO: Calcule a circunferência usando MathConstants.PI
// Fórmula: 2 * PI * radius
// TODO: Calcule o diâmetro dourado usando MathConstants.GOLDEN_RATIO
// Fórmula: 2 * radius * GOLDEN_RATIO
// TODO: Imprima os resultados formatados com 2 casas decimais
// Use String.format("%.2f", value) para formatação
// Formato de saída:
// Area: [value]
// Circumference: [value]
// Golden Diameter: [value]
}
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosCampos (Atributos)Método ConstrutorSobrecarga de ConstrutorRecapitulação - Calculadora Simples4Herança
Herança Básica (extends)A Palavra-chave superSobrescrita de Método (@Override)Encadeamento de ConstrutoresA Classe ObjectHerança Simples e MultinívelPor que não há Herança Múltipla de ClassesRecapitulação - Hierarquia de Funcionários7Métodos Especiais e a Classe Object
Método toString()equals() e hashCode()Método clone()compareTo() e ComparableInterface ComparatorRecapitulação - Ordenação Personalizada2Modificadores de Acesso e Encapsulamento
Visão Geral dos Níveis de AcessoMétodos Getter e SetterOcultação de InformaçõesA Palavra-chave finalRecapitulação - Gerenciador de Conta Bancária5Polimorfismo
Fundamentos de Sobrecarga de MétodosSobrescrita de Métodos (Tempo de Execução)Upcasting e DowncastingO Operador instanceofClasses e Métodos AbstratosRecapitulação - Calculadora de Formas8Conceitos Avançados de OOP
Composição vs HerançaAgregação vs ComposiçãoClasses Internas, Aninhadas e AnônimasEnums e Métodos de EnumRecords (Java 16+)Classes Seladas (Java 17+)11Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão BuilderPadrão ObserverPadrão Strategy3Propriedades de Classe e Membros Estáticos
Variáveis de Instância vs EstáticasMétodos EstáticosBlocos EstáticosConstantes (static final)Recapitulação - Contador e Utilitário6Interfaces e Classes Abstratas
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesDefault e Static em InterfacesClasses Abstratas vs InterfacesInterfaces FuncionaisRecapitulação - Sistema de Pagamento9Generics
Introdução a GenericsClasses GenéricasMétodos GenéricosParâmetros de Tipos DelimitadosWildcards (?, extends, super)Recapitulação - Container Genérico12Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Iterator