Trucos con ‘static’ en Java

Les voy a mostrar un pequeño truco en Java. ¿Cual es la salida del siguiente código?

package com.kodegeek;


public class StaticWeird {

    public static int count = 0;

    public static void print() {
        System.out.println(++count);
    }

    /**
     * What is the output?
     * @param args
     */
    public static void main(String [] args) {
        StaticWeird weird = new StaticWeird();
        weird.print();
        weird = null; // Magic hat trick
        weird.print(); // Expecting an NPE :-)?
    }


}

No es «NullPointerException». Java sabe que la referencia al método es estática (static) y utiliza esa en vez de una referencia a la instancia de la clase.

¡Java tramposo! 🙂