Avatar ·

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.