Согласно JLS, не требуется, чтобы «постоянная переменная» была статической.
Таким образом, «постоянная переменная» может быть статической или нестатической (переменная экземпляра).
Но JLS предъявляет некоторые другие требования, чтобы переменная была "постоянной переменной" (кроме того, что она была просто конечной):
A Выражение констант времени компиляции - это выражение, обозначающее значение типа примитива или String, которое не завершается внезапно и составлено с использованием только следующего:
Литералы примитивного типа и литералы типа String (§3.10.1, §3.10.2, §3.10.3, §3.10.4, §3.10.5)
Приведения к примитивным типам и приведение к типу String (§15.16)
Унарные операторы +, -,~ и!(но не ++ или -) (§15.15.3, §15.15.4, §15.15.5, §15.15.6)
Мультипликативные операторы *, / и% (§15.17)
Аддитивные операторы + и - (§15.18)
Операторы сдвига <<, >> и >>> (§15.19)
Реляционные операторы <, <=,> и> = (но не instanceof) (§15.20)
Операторы равенства == и! = (§15.21)
Побитовые и логические операторы &, ^, и|(§15.22)
Условный оператор-& && и условный оператор-оператор ||(§15.23, §15.24)
Тернарный условный оператор?: (§15.25)
Выражения в скобках (§15.8.5), содержащее выражение которых является константным выражением.
Простые имена (§6.5.6.1), которые ссылаются на постоянные переменные (§4.12.4).
Квалифицированные имена (§6.5.6.2) формы TypeName.Идентификатор, который ссылается на постоянные переменные (§4.12.4).