Рубрики

последнее ключевое слово в Java

Ключевое слово 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;

Инициализация конечной переменной:
Мы должны инициализировать конечную переменную, иначе компилятор выдаст ошибку времени компиляции. Конечную переменную можно инициализировать только один раз, либо с помощью инициализатора , либо с помощью оператора присваивания. Есть три способа инициализации конечной переменной:

  1. Вы можете инициализировать конечную переменную, когда она объявлена. Этот подход является наиболее распространенным. Последняя переменная называется пустой конечной переменной , если она не инициализирована во время объявления. Ниже приведены два способа инициализации пустой конечной переменной.
  2. Пустая конечная переменная может быть инициализирована внутри блока instance-initializer или внутри конструктора. Если в вашем классе более одного конструктора, он должен быть инициализирован во всех них, иначе будет сгенерирована ошибка времени компиляции.
  3. Пустая конечная статическая переменная может быть инициализирована внутри статического блока .

Давайте рассмотрим выше различные способы инициализации конечной переменной на примере.

// Java программа для демонстрации разных
// способы инициализации конечной переменной

  

class Gfg 

{

    // финальная переменная

    // прямая инициализация

    final int THRESHOLD = 5;

      

    // пустая конечная переменная

    final int CAPACITY;

      

    // другая пустая конечная переменная

    final int  MINIMUM;

      

    // финальная статическая переменная PI

    // прямая инициализация

    static final double PI = 3.141592653589793;

      

    // пустая конечная статическая переменная

    static final double EULERCONSTANT;

      

    // блок инициализатора экземпляра для

    // инициализация CAPACITY

    {

        CAPACITY = 25;

    }

      

    // статический блок инициализатора для

    // инициализация EULERCONSTANT

    static{

        EULERCONSTANT = 2.3;

    }

      

    // конструктор для инициализации MINIMUM

    // Обратите внимание, что если их несколько

    // конструктор, вы должны инициализировать MINIMUM

    // в них тоже

    public GFG() 

    {

        MINIMUM = -1;

    }

          
}

Когда использовать окончательную переменную:

Единственная разница между нормальной переменной и конечной переменной заключается в том, что мы можем повторно присвоить значение нормальной переменной, но мы не можем изменить значение конечной переменной после ее назначения. Следовательно, конечные переменные должны использоваться только для значений, которые мы хотим сохранить постоянными на протяжении всего выполнения программы.

Ссылочная конечная переменная:
Когда конечная переменная является ссылкой на объект, тогда эта конечная переменная называется ссылочной конечной переменной. Например, последняя переменная StringBuffer выглядит так

final StringBuffer sb;

Как вы знаете, окончательная переменная не может быть переназначена. Но в случае ссылочной конечной переменной внутреннее состояние объекта, на которое указывает эта ссылочная переменная, может быть изменено. Обратите внимание, что это не переназначение. Это свойство final называется нетранзитивностью . Чтобы понять, что подразумевается под внутренним состоянием объекта, см. Пример ниже:

// Java-программа для демонстрации
// ссылка на конечную переменную

  

class Gfg

{

    public static void main(String[] args) 

    {

        // финальная ссылочная переменная sb

        final StringBuilder sb = new StringBuilder("Geeks");

          

        System.out.println(sb);

          

        // изменение внутреннего состояния объекта

        // ссылка по конечной ссылочной переменной sb

        sb.append("ForGeeks");

          

        System.out.println(sb);

    }    

}

Выход:

Geeks
GeeksForGeeks

Свойство нетранзитивности также применяется к массивам, поскольку массивы являются объектами в Java . Массивы с последним ключевым словом также называются окончательными .

Замечания :

  1. Как обсуждалось выше, окончательная переменная не может быть переназначена, так как это приведет к ошибке времени компиляции.

    // 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 
  2. Когда конечная переменная создается внутри метода / конструктора / блока, она называется локальной конечной переменной и должна однажды инициализироваться в том месте, где она была создана. Смотрите ниже программу для локальной конечной переменной

    // Java-программа для демонстрации
    // локальная конечная переменная

      
    // Следующая программа компилируется и работает нормально

      

    class Gfg

    {

        public static void main(String args[])

        {

            // локальная конечная переменная

            final int i;

            i = 20

            System.out.println(i);

        }

    }

    Выход:

    20
  3. Обратите внимание на разницу между константными переменными C ++ и финальными переменными Java. Переменным const в C ++ должно быть присвоено значение при объявлении. Для конечных переменных в Java это необязательно, как мы видим в приведенных выше примерах. Конечной переменной можно присвоить значение позже, но только один раз.
  4. 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 , он называется финальным классом. Последний класс не может быть расширен (унаследован). Есть два варианта использования финального класса:

  1. Одно из них — предотвращение наследования , поскольку конечные классы не могут быть расширены. Например, все классы Wrapper, такие как Integer , Float и т. Д., Являются конечными классами. Мы не можем их продлить.
    final class A
    {
         // methods and fields
    }
    // The following class is illegal.
    class B extends A 
    { 
        // COMPILE-ERROR! Can't subclass A
    }
    
  2. Другое использование 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

0.00 (0%) 0 votes