Trucos con ‘static’ en Java

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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! 🙂