static
membros ( static
campos ou static
métodos) em Java são associados a suas respectivas classes, e não aos objetos dessa classe. O código a seguir tenta acessar um campo estático em uma null
referência.
public class Main
{
private static final int value = 10;
public Main getNull()
{
return null;
}
public static void main(String[] args)
{
Main main=new Main();
System.out.println("value = "+main.getNull().value);
}
}
Embora main.getNull()
retorne null
, ele funciona e exibe value = 10
. Como funciona esse código?
Main main = null; main.getNull().value
.
new Thread[]{}[-1].sleep(10);
onde sleep () é um método estático. Isso costumava ser bem-sucedido em algumas versões anteriores do Java.