Ключевое слово final используется в разных контекстах. Прежде всего, final — это модификатор отсутствия доступа, применимый только к переменной, методу или классу. Ниже приводятся различные контексты, в которых используется final.
Конечные переменные
Когда переменная объявляется с ключевым словом final , ее значение не может быть изменено, по сути, константа. Это также означает, что вы должны инициализировать конечную переменную. Если конечная переменная является ссылкой, это означает, что переменная не может быть повторно привязана для ссылки на другой объект, но внутреннее состояние объекта, на которое указывает эта ссылочная переменная, может быть изменено, т.е. вы можете добавлять или удалять элементы из конечного массива или конечной коллекции. , Рекомендуется представлять конечные переменные в верхнем регистре, используя подчеркивание для разделения слов.
Примеры :
// a final variable final int THRESHOLD = 5; // a blank final variable final int THRESHOLD; // a final static variable PI static final double PI = 3.141592653589793; // a blank final static variable static final double PI;
Инициализация конечной переменной:
Мы должны инициализировать конечную переменную, иначе компилятор выдаст ошибку времени компиляции. Конечную переменную можно инициализировать только один раз, либо с помощью инициализатора , либо с помощью оператора присваивания. Есть три способа инициализации конечной переменной:
- Вы можете инициализировать конечную переменную, когда она объявлена. Этот подход является наиболее распространенным. Последняя переменная называется пустой конечной переменной , если она не инициализирована во время объявления. Ниже приведены два способа инициализации пустой конечной переменной.
- Пустая конечная переменная может быть инициализирована внутри блока instance-initializer или внутри конструктора. Если в вашем классе более одного конструктора, он должен быть инициализирован во всех них, иначе будет сгенерирована ошибка времени компиляции.
- Пустая конечная статическая переменная может быть инициализирована внутри статического блока .
Давайте рассмотрим выше различные способы инициализации конечной переменной на примере.
|
Когда использовать окончательную переменную:
Единственная разница между нормальной переменной и конечной переменной заключается в том, что мы можем повторно присвоить значение нормальной переменной, но мы не можем изменить значение конечной переменной после ее назначения. Следовательно, конечные переменные должны использоваться только для значений, которые мы хотим сохранить постоянными на протяжении всего выполнения программы.
Ссылочная конечная переменная:
Когда конечная переменная является ссылкой на объект, тогда эта конечная переменная называется ссылочной конечной переменной. Например, последняя переменная StringBuffer выглядит так
final StringBuffer sb;
Как вы знаете, окончательная переменная не может быть переназначена. Но в случае ссылочной конечной переменной внутреннее состояние объекта, на которое указывает эта ссылочная переменная, может быть изменено. Обратите внимание, что это не переназначение. Это свойство final называется нетранзитивностью . Чтобы понять, что подразумевается под внутренним состоянием объекта, см. Пример ниже:
|
Выход:
Geeks GeeksForGeeks
Свойство нетранзитивности также применяется к массивам, поскольку массивы являются объектами в Java . Массивы с последним ключевым словом также называются окончательными .
Замечания :
- Как обсуждалось выше, окончательная переменная не может быть переназначена, так как это приведет к ошибке времени компиляции.
// Java-программа для демонстрации переназначения
// финальная переменная выдаст ошибку времени компиляции
class
Gfg
{
static
final
int
CAPACITY =
4
;
public
static
void
main(String args[])
{
// переназначение финальной переменной
// выдаст ошибку времени компиляции
CAPACITY =
5
;
}
}
Выход
Compiler Error: cannot assign a value to final variable CAPACITY
- Когда конечная переменная создается внутри метода / конструктора / блока, она называется локальной конечной переменной и должна однажды инициализироваться в том месте, где она была создана. Смотрите ниже программу для локальной конечной переменной
// Java-программа для демонстрации
// локальная конечная переменная
// Следующая программа компилируется и работает нормально
class
Gfg
{
public
static
void
main(String args[])
{
// локальная конечная переменная
final
int
i;
i =
20
;
System.out.println(i);
}
}
Выход:
20
- Обратите внимание на разницу между константными переменными C ++ и финальными переменными Java. Переменным const в C ++ должно быть присвоено значение при объявлении. Для конечных переменных в Java это необязательно, как мы видим в приведенных выше примерах. Конечной переменной можно присвоить значение позже, но только один раз.
- final с циклом foreach : final с for-each утверждение является юридическим утверждением.
// Java-программа для демонстрации финала
// с оператором for-each
class
Gfg
{
public
static
void
main(String[] args)
{
int
arr[] = {
1
,
2
,
3
};
// финал с оператором for-each
// юридическое заявление
for
(
final
int
i : arr)
System.out.print(i +
" "
);
}
}
Выход:
1 2 3
Объяснение: Поскольку переменная i выходит из области видимости при каждой итерации цикла, она фактически повторно объявляет каждую итерацию, позволяя использовать один и тот же токен (т.е. i) для представления нескольких переменных.
Выпускные занятия
Когда класс объявляется с ключевым словом final , он называется финальным классом. Последний класс не может быть расширен (унаследован). Есть два варианта использования финального класса:
- Одно из них — предотвращение наследования , поскольку конечные классы не могут быть расширены. Например, все классы Wrapper, такие как Integer , Float и т. Д., Являются конечными классами. Мы не можем их продлить.
final class A { // methods and fields } // The following class is illegal. class B extends A { // COMPILE-ERROR! Can't subclass A }
- Другое использование final с классами — это создание неизменяемого класса, такого как предопределенный класс String. Вы не можете сделать класс неизменным, не сделав его финальным.
Финальные методы
Когда метод объявляется с ключевым словом final , он называется методом final. Последний метод не может быть переопределен . Класс Object делает это — ряд его методов являются окончательными. Мы должны объявить методы с ключевым словом final, для которого нам необходимо следовать одной и той же реализации во всех производных классах. Следующий фрагмент иллюстрирует заключительное ключевое слово с методом:
class A { final void m1() { System.out.println("This is a final method."); } } class B extends A { void m1() { // COMPILE-ERROR! Can't override. System.out.println("Illegal!"); } }
Дополнительные примеры и поведение финальных методов и финальных классов см. В разделе Использование final с наследованием.
финал против абстракции
Пожалуйста, смотрите реферат в статье Java для различия между окончательным и рефератом.
Вопрос по теме интервью (важно): Разница между окончательным, окончательным и окончательным в Java
Эта статья предоставлена Гауравом Миглани . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Недоступный оператор, использующий конечную и не финальную переменную в Java
- конечные переменные в Java
- окончательный против неизменности в Java
- Пустой финал на Java
- Финальные массивы в Java
- Использование final с Inheritance в Java
- Переменная экземпляра как финальная в Java
- финал, финал и финализация на Java
- Приватные и финальные методы в Java
- Конечная статическая переменная в Java
- Конечные локальные переменные в Java
- Присвоение значений статическим конечным переменным в Java
- родное ключевое слово в Java
- Строгое ключевое слово в Java
- статическое ключевое слово в Java
0.00 (0%) 0 votes