números e elementos estáticos
199
você está aquieste é um novo capítulo
Os Números são
Importantes
10 números e elementos estáticos
Faça as contas. Porém há mais coisas a se fazer com os
números do que apenas primitivos cálculos aritméticos. Você pode
querer obter o valor absoluto de um número, arredondar um número
ou saber qual é o maior entre dois números. Pode querer que seus
números sejam exibidos com exatamente duas casas decimais ou
inserir pontos em seus números altos para torná-los mais fáceis de
ler. E quanto ao uso de datas? Você pode querer exibir as datas de
várias maneiras ou até manipulá-las para dizer algo como “some
três semanas à data de hoje”. E quanto à conversão de uma String
em um número? Ou à conversão de um número em uma String?
Você está com sorte. A API Java está cheia de métodos úteis de
manipulação de números prontos e fáceis de usar. Mas a maioria
deles é estática, portanto começaremos aprendendo o que signica
para uma variável ou método ser estático, inclusive as constantes em
Java — variáveis nais estáticas.
200 capítulo 10
métodos de Math
Os todos de Math: o mais próximo que você chega de um método global
Já que nada é global em Java. Mas pense nisto: e se você tiver um método cujo
comportamento não depender do valor de uma variável de instância. Veja o método round()
da classe Math, por exemplo. Ele faz sempre a mesma coisa — arredonda um número de
ponto  utuante (o argumento do método) para o inteiro mais próximo. Sempre. Se você
tivesse 10.000 instâncias da classe Math e executasse o método round(42,2), obteria um
valor inteiro igual a 42. Sempre. Em outras palavras, o método atua sobre o argumento, mas
nunca é afetado pelo estado de uma variável de instância. O único valor que altera a maneira
como o método round() é executado é o argumento passado para ele!
Não parece um desperdício de espaço útil do acervo criar uma instância da classe Math
simplesmente para executar o método round()? E quanto aos outros métodos de Math como
min(), que usa dois tipos primitivos numéricos e retorna o menor entre eles. Ou Max(). Ou
abs(), que retorna o valor absoluto de um número.
Esses métodos nunca usam os valores da variável de instância. Na verdade a classe Math
não tem nenhuma variável de instância. Portanto, não ganharíamos nada com a criação de
uma instância da classe Math. Logo, adivinhe. Você não precisa fazer isso. Ou melhor, não
poderá fazê-lo.
Os métodos da classe
Math não usam valores
de nenhuma variável
de instância. E já que
são ‘estáticos’, você
não precisa de uma
instância de Math. Só
precisará da classe Math.
int x = Math.round(42.2);
int y = Math.min(56,12);
int z = Math.abs(-343);
Esses métodos nunca usam
variáveis de instância,
portanto seu comportamento
não depende da existência de
um objeto específico.
Se você tentar criar uma instância da classe Math:
Math mathObject = new Math();
Verá essa mensagem de erro:
Essa mensagem de erro mostra que o
construtor de Math está marcado como
privado! Isso significa que você NUNCA
poderá escrever ‘new’ na classe Math para
criar um novo objeto Math.
A diferença entre métodos comuns (não-estáticos) e estáticos
O Java é orientada a objetos, mas em algumas situações você pode ver um caso especial, normalmente um
método utilitário (como os métodos de Math), onde não é necessária a existência de uma instância da classe.
A palavra-chave static permite que um método seja executado sem qualquer instância da classe. Um método
ser estático signi ca “que o comportamento não depende de uma variável de instância, portanto não são
necessárias instâncias/objetos. Apenas a classe”.
método comum (não-estático)
public class Song {
String title;
public Song(String t) {
title = t;
}
public void play() {
SoundPlayer player = new SoundPlayer();
player.playSound(title);
}
O valor da variável de instância afeta o
comportamento do método play()
O valor atual da variável de instância ‘title’ é a canção que será
reproduzida quando você chamar play().
File Edit Window Help IwasToldThereWouldBeNoMath
%javac TestMath
TestMath.java:3: Math() has private
access in java.lang.Math
Math mathObject = newMath();
^
1 error

Get Use A Cabeça Java now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.