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

В этом посте мы рассмотрим другое последнее ключевое слово для Java. Это ключевое слово, используемое в языке Java для ограничения использования или изменения другими классами или переменными. Используя это ключевое слово, один говорит интерпретатору, чтобы он не допускал каких-либо будущих изменений этой переменной или метода и рассматривал его как константу. Может использоваться с нижеприведенными 3 сценариями:

  1. Переменная: объявление переменной как окончательной ограничивает ее модификацию ссылками на любое другое значение или ссылку.
  2. Методы. Объявление метода как конечного ограничивает переопределение метода для этого метода в дочерних классах.
  3. Классы: Объявление класса как финального предотвращает наследование этого класса.

Эти ключевые слова всегда рекомендуется указывать заглавными буквами в соответствии с хорошей практикой кодирования.

Синтаксис конечного ключевого слова в Java

Это ключевое слово можно использовать тремя способами: -

1. Переменная

Переменные в java могут быть объявлены как переменные, чтобы ограничить любое изменение его значений. Это может быть объявлено любым из следующих трех способов:

Синтаксис:

final int VAR1=21;//final variable
final int VAR2; //blank final variable
static final double DUMMY= 45.504;//final static variable
static final double PK;//blank final static variable

Примечание. Ссылочные переменные также могут быть объявлены как статические, чтобы они не могли содержать ссылку на другой объект. Но из-за внутренней природы объекта ссылка может быть изменена.

final String Builder sb = new StringBuilder («LetsLearn»);

2. Методы

Метод, объявленный с ключевым словом final, называется последним методом. Последний метод не может быть переопределен его дочерним классом, что означает, что метод дочернего класса не может изменить определение последнего метода, присутствующего в родительском классе. Когда мы хотим, чтобы реализация метода, определенного в родительском классе, следовала во всех его дочерних классах, мы должны объявить этот метод как final.

Синтаксис:

final int my1()(
//method defination
)

3. Классы

Заключительные ключевые слова могут также использоваться с классами, чтобы сделать его окончательным классом, что означает, что определенный класс не может быть расширен или унаследован какими-либо другими классами.

Синтаксис:

final class myClass(
/member variables and member functions.
)

Как работает Final Keyword в Java?

Ключевое слово final помогает ограничить переопределение классов, членов или переменных во время наследования.

1. Конечные переменные

Объявление переменной как конечной означает ограничение любого изменения значения переменной в унаследованных классах. Финальная переменная может быть инициализирована только один раз и должна использоваться как есть, поэтому нужно инициализировать конечную переменную. В основном это используется со статическим для создания постоянной переменной класса.

Например:

final int a =0;

Мы также можем объявить ссылочные переменные окончательными, в этом случае одна ссылочная переменная не может ссылаться на разные объекты. Но в Java внутреннее состояние объекта может быть изменено, на что ссылается последняя ссылочная переменная. Таким образом, мы можем внести изменения в значение ссылочной переменной. Это аналогично использованию окончательных массивов, как показано ниже:

Код:

class MyClass
(
public static void main(String args())
(
final int myarr() = (1, 2, 3, 4, 5);
for (int q = 0; q < myarr.length; q++)
(
myarr (q) = myarr (q)*10;
System.out.println(myarr (q));
)
)
)

Выход:

объяснение

Здесь массив a1 ссылается на один и тот же объект, только значение этого объекта изменяется, потому что все мы знаем, что переменная массива содержит только начальный адрес ячейки памяти, где хранятся эти элементы массива.

И в то же время, если мы попытаемся ссылаться на другой массив, используя одну и ту же переменную массива a1, то компилятор выдаст ошибку. Таким образом, использование массива word-final здесь означает, что любое изменение может быть сделано для члена массива, но переменная не может ссылаться на любой другой объект.

То, что нужно запомнить

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

  • Инициализируйте во время самого объявления : мы можем легко объявить конечную переменную во время ее объявления. Если она не инициализирована, то эта переменная считается пустой конечной переменной, и любой из следующих двух способов может помочь нам инициализировать пустую конечную переменную.
  • Использование блока instance-initializer : внутри этого блока или конструктора можно легко инициализировать пустую конечную переменную. При использовании конструктора для инициализации всегда не забывайте инициализировать конкретную переменную во всех доступных конструкторах.
  • Статический блок: можно также использовать статический блок для инициализации пустой конечной переменной. Статический блок всегда запускается один раз для каждого класса, поэтому значение переменной, значения которой не подлежат изменению, можно легко инициализировать с помощью этого блока.

Таким образом, ключевое слово final используется только для тех переменных, которым не нужно менять свое значение во время выполнения программы. Все конечные переменные, созданные внутри метода или блока, должны быть инициализированы там сами. Такие переменные типа известны как локальные конечные переменные.

объяснение

В приведенном ниже примере переменная i была объявлена ​​в основной функции и инициализирована, поэтому она рассматривается как конечная локальная переменная.

Код:

class myClass
(
public static void main(String args())
(
// local final variable
final int i;
i = 20;
System.out.println(i);
)
)

Выход:

2. Окончательные методы

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

Примечание. Необязательно, чтобы конечные методы были объявлены на начальном этапе наследования (базовый класс). Метод может быть объявлен как финальный в любом подклассе, который мы хотим, чтобы другие подклассы следовали тому же определению.

Код:

class A(
void myMethod()(
//method definition
)
)
class B extends A(
final void myMethod()(
//overrides the method in parent class
//runs successfully
)
)
class C extends B(
void myMethod()(
//will throw error
)
)

3. Финальные классы

Классы, объявленные как окончательные, не могут наследоваться никакими другими классами. Упоминание последнего ключевого слова перед именем класса говорит компилятору, что определение этого класса может использоваться только таким, как есть. Никакие другие классы не могут добавлять свои спецификации к этому определению или повторно использовать его код. В случае, если кто-то пытается расширить последний класс, компилятор выдает ошибку, указывающую, что этот класс не предназначен для расширения. Можно использовать последние ключевые слова в Java в любом из ниже 2 целей: -

  1. Во-первых, чтобы предотвратить наследование этого класса. Например, все присутствующие классы Wrapper в пакете java.lang являются окончательными, поэтому мы не можем расширять их в наших классах, но можем использовать их, объявив их объекты. Любая попытка доступа к этим классам приведет к ошибке компилятора.

final class myParentClass
(
// member variables and member functions
)
// illegal extend.
class myChildClass extends parentClass
(
// Can't subclass A
)

  1. Второе использование final с классами - это когда нужно создать неизменный класс, т.е. как только объект класса создан, мы не можем изменить его содержимое, как предопределенный класс String. Класс должен быть объявлен как final, чтобы сделать его неизменным.

Замечания :

  • Если класс объявлен как final, то его переменные-члены и функции-члены также рассматриваются компилятором как final.
  • Класс не может быть объявлен абстрактным, если он зависит от дочерних классов для завершения своего определения, а также final, что предотвращает само наследование.

Примеры конечного ключевого слова в Java

Ниже приведены различные примеры окончательного ключевого слова в Java:

1. Использование Final Variable

В приведенном ниже примере различные переменные инициализируются с использованием различных методов. Например, переменная SECOND инициализируется с помощью конструктора, тогда как THIRD инициализируется с помощью инициализатора.

Код:

class myClass
(
final int FIRST = 5;
// a blank final variable
final int SECOND;
// another blank final variable
final int THIRD;
FIRST =10; //illegal attempt to change the value of final variable
// a final static variable PI
// direct initialize
static final double MINVALUE = 3.141592653589793;
// a blank final static variable
static final double MAXRANGE;
(
THIRD = 25; // initializer block
)
static(
MAXRANGE = 200.3;
)
public myClass()
(
SECOND = -1;//needs to be initialised in every constructor
)
)

Выход:

2. Использование финальных методов

В приведенном ниже примере абстрактный класс myShape объявляет конечные методы getWidth и получает восемь, которые не должны быть переопределены унаследованными классами. Он также объявляет одну абстрактную функцию, реализация которой обязательна в последующих классах. Таким образом, единственное определение абстрактной функции реализуется в первом дочернем классе, а также во втором дочернем классе.

Код:

abstract class myShape
(
private double width;
private double height;
public myShape(double width, double height)
(
this.width = width;
this.height = height;
)
public final double getWidth() //override not allowed
(
return width;
)
public final double getHeight() //override not allowed
(
return height;
)
abstract double getArea(); //needs to be defined in the child class
)
class firstChildClass extends myShape
(
public firstChildClass(double width, double height)
(
super(width, height);
)
final double getArea()
(
return this.getHeight() * this.getWidth();
)
)
class secondChildClass extends myShape
(
public secondChildClass(double side)
(
super(side, side);
)
final double getArea()
(
return this.getHeight() * this.getWidth();
)
)
public class myClass
(
public static void main(String() args)
(
myShape s1 = new firstChildClass(10, 20);
myShape s2 = new secondChildClass(10);
System.out.println("width of s1 : "+ s1.getWidth());
System.out.println("height of s1 : "+ s1.getHeight());
System.out.println("width of s2 : "+ s2.getWidth());
System.out.println("height of s2 : "+ s2.getHeight());
System.out.println("area of s1 : "+ s1.getArea());
System.out.println("area of s2 : "+ s2.getArea());
)
)

Выход:

3. Использование финальных классов

В приведенной ниже программе мы используем конечный класс Solid, который определяет метод для расчета объема фигуры с использованием ее размеров, но отображение объема блока выполняется с помощью функции printVol в унаследованном классе. Shape As Solid является конечным классом, поэтому класс Shape не сможет расширять (или наследовать) его. Таким образом, он использует объект Shape для вычисления объема любого из Shape, просто передавая аргументы в функции.

Код:

final class Solid (
public double getVol(double length, double width, double height) (
return length * width * height;
)
)
class Shape (
private float length;
private float width;
private float height;
Shape(float length, float width, float height) (
this.length = length;
this.width = width;
this.height = height;
)
public void printVol(Solid bObj) (
double volume = bObj.getVol(this.length, this.width, this.height);
System.out.println("Volume of the Shape: " + volume);
)
)
public class myClass (
public static void main(String() args) (
Solid bObj = new Solid();
Shape obj = new Shape(5, 4, 3);
obj.printVol(bObj);
)
)

Выход:

Вывод

Ключевое слово final используется для предотвращения переопределения классов, переменных и методов его дочерними классами. Его также можно использовать для того, чтобы сделать класс неизменным, что ограничивает изменение значения его объектов. Последняя проверка ключевых слов всегда проверяется только во время компиляции. Это отличная утилита для предотвращения повторного использования определенных переменных, логики и классов.

Рекомендуемые статьи

Это руководство к примеру Final Keyword в Java. Здесь мы обсудим, как работает последнее ключевое слово в Java? который включает в себя финальные переменные, финальные методы, финальные классы вместе с синтаксисом. Вы также можете посмотреть следующие статьи, чтобы узнать больше -

  1. Типы и модификаторы, используемые для JComponent в Java
  2. Новые возможности Java 8
  3. Как создать объект в JavaScript?
  4. Что такое Case Case в JavaScript?
  5. Бросок против бросков | 5 главных отличий, которые вы должны знать
  6. Объявление абстрактного класса в C # с примером
  7. Использование и примеры этого ключевого слова