Мутируемые объекты - такие объекты, в которых проходят любые процессы изменения состояния.
Ключевое слово final
- используется для того, чтобы запретить изменять объект. Для примитивов final делает постоянным присвоенное значение. Для ссылки на объект - постоянной становится ссылка. Вся информация, которая находится в каждом объекте, устанавливается во время создания объекта и остается в таком состоянии до конца жизни объекта.
Сложные объекты(не примитивы), которые содержат в себе различные поля, будут полностью неизменяемые, если каждое поле объекта пометить как final
. Иначе только ссылка на объект будет неизменяемой, чего не скажешь про содержимое объекта.
blank finals - поля классов, которые помечены как final, но не инициализированы. Перед использованием эти поля нужно в любом случае инициализировать (один только раз).
Помечая метод как
final
- мы говорим что его нельзя будет переопределить.Помечая класс как
final
- мы косвенно запрещаем переопределять все методы класса, поскольку такой класс не поддается наследованию.
// немного информации про многопоточность и масштабируемость, хоть про нее будет идти речь позже
Важно написать распределенную многопоточную программу. В таком случае программа может быть разбита на кластеры, то есть одну сложную программу можно разложить на нескольких разных машинах, в соответствии с потребностями. Изменяемые объекты - почти всегда плохое решение; там, где можно от них отказаться нужно писать неизменяемые объекты.
// I try to make as many things immutable as possible.
Ссылки для прочтения
- Неизменяемый объект wiki;
- Теория и практика Java: Изменять или не изменять?;