java модификаторы



Автор Ахмед задал вопрос в разделе Java

Java зачем нужен модификатор final и получил лучший ответ

Ответ от Монти Пайтон[гуру]
1. Такой код легче читать. Если переменная объявлена как final, то не нужно думать, что же в ней лежит двумя экранами ниже, ведь она гарантированно не меняет значения. Так же передано намерение разработчика.
2. Иммутабельные (неизменяемые) сущности безопаснее для многопоточных приложений. Если несколько потоков разделяют один и тот же мутабельный объект, то в то время, как один поток что-то делает с объектом, второй может изменить его состояние. Поэтому в таких приложениях часто можно встретить классы с исключительно final-полями. Если что-то нужно изменить, порождается новый объект.
3. Компилятор может произвести какие-то оптимизации, но это в общем-то последняя по значимости причина.
Вообще, с бумом многопоточности и функционального подхода хорошим тоном стало делать неизменяемым все, что может быть сделано таковым. Java - древний язык, поэтому повсеместное использование в нем final делает код довольно многословным (хотя многих это не останавливает - и правильно). Более современные языки решают этот вопрос лучше. Например, Scala предлагает два способа объявления переменных - var для мутабельных и val для немутабельных переменных. Таким образом, final невозможно "забыть" - при объявлении КАЖДОЙ переменной надо принять осознанное решение, должна ли она быть изменяемой, и только в случае необходимости объявлять ее как var.
Если говорить о final классах, то есть и другие причины. Например, безопасность. Так, String помечен как final, потому что Java-рантайм рассчитывает на определенное поведение этого класса, которое ты можешь сломать, заведя свой подкласс. Если снова делать отсылку к более современным языкам, то классы Kotlin, например, являются final по умолчанию; если ты хочешь давать наследоваться от своего класса в Kotlin, ты должен явно пометить его как open.
Короче говоря, Java предоставляет мутабельность по умолчанию и немутабельность через дополнительное ключевое слово. Есть мнение, с которым я отчасти согласен, что должно было быть наоборот.
Довод "Но ведь в принципе можно просто не присваивать переменной" сродни "Зачем нужны модификаторы доступа? Ведь можно сделать все по умолчанию public и пусть каждый делает что хочет."

Ответ от Vex Skladovski[эксперт]
Джава их оптимизирует, да и вообще — использовать их нужно для обозначения констант.

Ответ от Максим[гуру]
А чтобы нельзя было присвоить новое значение. Тут несколько смыслов.
1. Чисто семантический смысл. Если это число ПИ, то это константа, а не переменная, и ничего кроме конкретного значения содержать не может. Полезно также в работе с кодом видеть, где константа, а где переменная.
2. Минимизировать ошибки. Если чего-то быть не должно в принципе, то полезно, чтобы компилятор подобные ошибки обнаруживал сам. И если несколько программистов работают, тоже хочется знать, что никто не влезет в твою константу. Аналогично с классами, если не хочешь, чтобы кто-то наследовал от класса и начудил.

Ответ от -Egor-[гуру]
К вышесказанному - final также дает гарантию безопасной публикации объекта.
например у тебя есть сложный объект Cat(){} и там тяжелый конструктор - final Cat cat = new Cat() - дает тебе гарантию что любой другой поток увидит его полностью заинициализированным.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Java зачем нужен модификатор final
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*