Парадокс констант в Java
Сегодня, читая обсуждения на тему того, чем является константа в Java, я наткнулся на интересный парадокс и не могу найти для себя внятного ответа.
Пример 1:
Допустим, у нас есть класс Math со static final переменной PI, которая является константой и должна быть одной и той же в рамках всего класса. Её нет смысла определять только с модификатором final, так как она должна быть общей для всех экземпляров класса:
public class Math {
private static final double PI = 3.141592653589793;
}
Пример 2:
У нас есть класс Person, в котором определена final переменная id. Она неизменяема в рамках одного экземпляра класса, но может иметь разные значения для разных объектов. Однако для конкретного объекта она является константой:
public class Person {
private final int id;
public Person(int id) {
this.id = id;
}
}
Примеры очень условные. Отсюда возникло моё непонимание: что на самом деле в Java принято считать константой? Только переменную с модификатором final или переменную, имеющую модификаторы static final в связке?
Был бы очень признателен за разъяснение.