Métodos estáticos podem ser invocados tanto usando o nome da classe quanto usando um objeto.
Classe.meuMetodoEstatico(); // usando o nome da classe
Classe classe = new Classe();
classe.meuMetodoEstatico(); // usando um objeto
E uma coisa que achei curioso quando descobri, mas que faz sentido, é que mesmo o objeto sendo null é possível invocar o método estático sem dar NullPointerException porque o binding de métodos estáticos é feito pelo nome da classe já que métodos estáticos não precisam da classe instanciada.
Mas no IntelliJ, quando tenta invocar um método estático de um objeto null ele lança um inspection warning afirmando que essa invocação irá produzir NullPointerException:
Mas nesse exemplo, não produziu:
Sim, eu sei que não tem por que invocar um método estático usando um objeto null. É melhor usar o classe. Mas fiquei curioso em saber se existe algum cenário que invocar um método estático num objeto null lança NullPointerException. É possível? Ou será que é um erro do IntelliJ mesmo?
Eu tô usando a última versão do IntelliJ Ultimate (2018.3.5).