Quando usar métodos estáticos em Java? Exemplos e melhores práticas
Olá, colegas! Sou um desenvolvedor Java iniciante e estou com uma dúvida: quando usar corretamente métodos estáticos e quando usar métodos comuns (métodos de instância)?
Eu entendo que `static` significa que o método pertence à classe, e não ao objeto. Mas na prática, muitas vezes fico confuso. Por exemplo, estou escrevendo uma pequena calculadora:
```java
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public static int multiply(int a, int b) {
return a * b;
}
}
```
Ambos os métodos funcionam, mas não tenho certeza de qual é a opção correta. Vi que em classes utilitárias (como `Math` ou `Collections`) quase todos os métodos são estáticos. Mas nos meus projetos, frequentemente vejo métodos estáticos sendo usados para factories ou singletons.
Outra coisa que me confunde: se um método não usa campos da classe (não acessa `this`), ele deve ser estático? Ou isso não é uma regra obrigatória? E quanto aos testes — métodos estáticos são mais difíceis de mockar?
Me ajudem, por favor.