Inner class can have static field if they are compile time constants. In your code, a is assigned to a compile time constant. while obj is not. u can refer the following link to get an idea about constant expressions.JLS 15.28