Implementando Boas Práticas com APIs Nativas do Java

Acesso à Biblioteca java.lang

Diferente de outras bibliotecas, as classes presentes no pacote java.lang são importadas automaticamente pelo compilador Java. Isso significa que você não necessita adicionar o comando import explicitamente para utilizá-las, como ocorre com os objetos Math e System.

Fundamentos da Classe Math

Esta classe encapsula métodos estáticos utilizados para cálculos matemáticos comuns. Ela possui uma estrutura fechada, onde:

  • O construtor sem argumentos é declarado como privado, impedindo a instanciação direta.
  • Todos os métodos de API são declarados como static, permitindo acesso direto via nome da classe.

Abaixo, demonstraoms algumas operações aritméticas básicas utilizando este padrão:

package com.dev.exemplo;

public class CalculosPadrao {
    public static void main(String[] args) {
        // Exemplos de uso direto através do nome da classe
        System.out.println("Valor absoluto: " + Math.abs(-25));
        System.out.println("Arredondamento para cima: " + Math.ceil(8.3));
        System.out.println("Arredondamento para baixo: " + Math.floor(8.9));
        System.out.println("Quanto mais próximo inteiro: " + Math.round(8.6));
        System.out.println("Maior entre dois valores: " + Math.max(10.5, 20.3));
        System.out.println("Menor entre dois valores: " + Math.min(10.5, 20.3));
        System.out.println("Potência (base^expoente): " + Math.pow(2.0, 3));
        System.out.println("Número aleatório entre 0.0 e 1.0: " + Math.random());
        System.out.println("Aleatório entre 0 e 50: " + (int)(Math.random() * 50));
    }
}

Gestão de Tempo e Runtime com System

Classe semelhante a Math, pertencente também ao pacote java.lang. Seus principais usos incluem medição de desempenho e controle do ciclo de vida da JVM.

package com.dev.exemplo;

public class CronometroSistema {
    public static void main(String[] args) {
        long inicio = System.currentTimeMillis();
        
        // Execução de processamento simulado
        for (int i = 0; i < 50000; i++) {
            String valor = "processando dado " + i;
        }
        
        long fim = System.currentTimeMillis();
        long tempoGasto = fim - inicio;
        
        System.out.println("Tempo total de execução: " + tempoGasto + " ms");
        
        // Encerra a aplicação imediatamente
        System.exit(0); 
    }
}

Menipulação de Arrays com Collections

A classe Arrays reside no pacote java.util, exigindo declaração explícita de importação. Ela fornece métodos utilitários para manipulação de arrays primitivos e objetos.

package com.dev.exemplo;

import java.util.Arrays;

public class OrdenacaoArray {
    public static void main(String[] args) {
        int[] numeros = {99, 12, 45, 78, 33, 2};
        char[] letras = {'z', 'a', 'm'};
        
        // Converte o conteúdo do array para representação String legível
        System.out.println("Estado inicial (Números): " + Arrays.toString(numeros));
        System.out.println("Estado inicial (Caracteres): " + Arrays.toString(letras));
        
        // Alteração na ordem dos elementos
        Arrays.sort(numeros);
        Arrays.sort(letras);
        
        System.out.println("Após ordenação (Números): " + Arrays.toString(numeros));
        System.out.println("Após ordenação (Caracteres): " + Arrays.toString(letras));
    }
}

Projeto de Classes Utilitárias

Para criar suas próprias ferramentas estáticas, recomenda-se seguir o padrão das classes já existentes na API do Java. Os princípios centrais incluem:

  1. Proteger o construtor com private para evitar instância.
  2. Declarar métodos de utilidade como public static.

A implementação abaixo ilustra um utilitário personalizado que reordena um array decrescentemente, aproveitando a funcionalidade interna de ordenação padrão:

package com.dev.utilitarios;

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] dados = {10, 40, 20, 30};
        MyTool.ordenarDecrescente(dados);
    }
}

class MyTool {
    private MyTool() {
        throw new UnsupportedOperationException("Classe utilitária estática");
    }

    public static void ordenarDecrescente(int[] arr) {
        // Ordenação padrão (crescente)
        Arrays.sort(arr);
        // Impressão invertida
        for (int i = arr.length - 1; i >= 0; i--) {
            System.out.print(arr[i] + " ");
        }
    }
}

Tags: java-lang math-api system-runtime array-utilization utility-design

Publicado em 9-10 21:05