Por que static?
Quando nós queremos ter um número random, nós invocamos o método Math.random(), o qual consistem em duas partes.
A primeira parte é o nome da classe “Math” desde que o primeiro caractere “M” seja maiúsculo. A segunda parte é o método random() definido na classe Math.
Aprendemos que para invocar um método definido em uma classe, precisamos instanciar um objeto da classe e então utilizar a anotação ponto para invocar um método.
Mas aqui, por que podemos chamar diretamente a classe “Math” (não um objeto) para invocar o método random()?
A classe “Math” é uma classe nativa da API do Java. A classe Math contêm métodos para trabalhar com operações numéricas tais como exponencial elementar, logaritmo, raiz quadrada e funções trigonométricas.
A Classe Math tem Métodos Estáticos
Se abrirmos a documentação da classe Math, podemos ver vários métodos:
Veja esse artigo: https://cursojavanow.com.br/a-classe-math/
Vamos pegar um método como exemplo:
public static double abs(double a)
Se você for ver os métodos da classe Math, todos tem o modificador “static”. O modificador “static” indica que os métodos estão associados com a classe Math, mas não associado com uma instância específica da classe.
Portanto, um método estático pode ser invocado utilizando diretamente o nome da classe sem precisar instanciar um objeto.
Quando um objeto é instanciado, um pedaço da memória é alocado nela. Depois que o objeto não é mais utilizando, a coleção garbage irá automaticamente limpar, as vezes pode demorar mais tempo.
Podemos entender que o objeto é algo dinâmico. Quando um método é declarado como “static” ele não segue um objeto específico que foi criado.
A Classe String tem Métodos Estáticos
A classe nativa String também tem métodos com o modificador “static”.
Veja esse artigo: https://cursojavanow.com.br/a-classe-string-e-comparando-strings/
Vamos pegar um método como exemplo:
public static String valueOf(boolean b)
Esses métodos estáticos podem aceitar um parâmetro de diferentes tipos e retornar uma String.
Esse exemplo não é válido:
String aDoubleStr = 12.34; //gera um erro de compilação
Esse exemplo é válido:
String aDoubleStr = String.valueOf(12.34); //isso é válido
Variáveis também podem ser definidas como estáticas. Nesse caso, a variável estática associa com a classe não com o objeto da classe.
Por exemplo, uma classe Estudante tem o atributo “nome”. Estudantes são diferentes objetos, mas tem o mesmo atributo “nome” com valores diferentes.
Se a classe definir um atributo estático “ano”, então todos os objetos de estudante terão o mesmo atributo “ano”. Fisicamente, uma variável estática é alocada em um local diferente das variáveis dinâmicas na memória.
Sabemos que o método main() é o ponto de partida de uma aplicação. Quando a aplicação inicia, não há objetos disponíveis. Isto é, nenhum objeto existe e pode ser usado para invocar o método main().
Quando o método main() é definido como estático, ele pode ser invocado pelo o interpretador da classe principal antes de criar qualquer objeto. Portanto, o método main() sempre é definido como um método estático.
Fonte: Learning Java with Games
Deixe um comentário