The JLS #4.12.4 defines constant variables as (emphasis mine):
A variable of primitive type or type
String
, that is final and initialized with a compile-time constant expression, is called a constant variable.
In your case, final int c = 20;
is a constant variable but final int c; c = 20;
is not.