Como todo el mundo menciona aquí, funciona porque get()
es un método estático. Aquí hay una manera en que puede pensar en esto:
Cuando define una clase en Java, lo que básicamente hace es definir los datos que contendrá un objeto y un conjunto de métodos que operan con esos datos. Ahora bien, aunque puede tener miles y miles de objetos, no tiene sentido tener copias de todos los métodos para cada uno de ellos. Lo que ocurre es que la clase almacena los métodos que defina y los ejecuta en el alcance del objeto que llama al método. Si intenta llamar a estos métodos en un objeto no inicializado, el objeto aún existe y el método todavía existe, pero no tiene validez para poder trabajar en el alcance, lo que le da el NullPointerException
.
La excepción a esta regla son los métodos estáticos, que son métodos que no necesitan un ámbito: no se refieren a datos específicos del objeto. Es por eso que pueden ejecutarse independientemente de si el objeto está inicializado o no.
Solo recuerde que los objetos no tienen copias de sus métodos ... los métodos son simplemente llamados en el alcance de los datos del objeto. De modo que aún puede acceder a los métodos de objetos nulos (no inicializados), pero los métodos no estáticos no tienen datos para trabajar.
Creo que en su declaración de impresión su JavaPuzzler.get() con mayúscula J – Nik
@Nikunj la pregunta es absolutamente correcta, no hay ningún error en la palabra. – Nik88
Por favor, compruebe mi ans! – Nik