This should not compile, yet it does. Note that x is not static, yet main() is. public class t { int x = 0; public static void main() { new Thread() { public void run() { x = 5; } }.start(); } } javac gives this error: t.java:6: non-static variable x cannot be referenced from a static context x = 5; ^ - a