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:
- Proteger o construtor com
privatepara evitar instância. - 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] + " ");
}
}
}