Въведение в крайната ключова дума в 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 int my1()(
//method defination
)

3. Класове

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

Синтаксис:

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

Как работи окончателната ключова дума в Java?

Крайната ключова дума помага да се ограничи отмяната на класове, членове или променливи по време на наследяването.

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, тогава компилаторът ще изхвърли грешка. По този начин, като се използва думата-окончателен масив тук означава, че всяка промяна може да бъде направена на члена на масива, но променливата не е позволена да се отнася до друг обект.

Неща, които трябва да запомните

Инициализирането на финалната променлива е необходимо, за да се предотврати грешка във времето на компилиране. Има разлика между C ++ const променливи и тези крайни променливи, които const променливите не трябва да се инициализират. Има три начина да се инициализира крайна променлива-

  • Инициализирайте в момента на самото деклариране : Лесно можем да декларираме окончателна променлива в момента на декларирането й. В случай, че не е инициализирана, тогава тази променлива се счита за празна крайна променлива и всеки от следващите 2 начина може да ни помогне да инициализираме празна крайна променлива.
  • Използване на блок-инициализатор на инстанции : В този блок или конструктора, празната финална променлива може лесно да се инициализира. Докато използвате конструктор за инициализация, винаги не забравяйте да инициализирате конкретната променлива във всички налични конструктори.
  • Статичен блок: Човек също може да използва статичен блок, за да инициализира празната крайна променлива. Статичният блок винаги се задейства веднъж за всеки клас, като по този начин променливата стойност, чиито стойности не се променят, може лесно да се инициализира с помощта на този блок.

По този начин крайната ключова дума се използва само за онези променливи, които не трябва да променят стойността си по време на изпълнение на програмата. Всички крайни променливи, създадени вътре в метод или блок, трябва сами да се инициализират. Такива променливи от типа са известни като локални крайни променливи.

обяснение

В примера по-долу променлива i е декларирана в рамките на основната функция и инициализирана също така се счита за крайна локална променлива.

Код:

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

изход:

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

Метод, деклариран като краен, не може да бъде отменен в нито един от подкласовете, така наречен като краен метод. Методът трябва да бъде деклариран като краен, ако изискваме същата реализация на класа да бъде последвана от детските класове.

Забележка - Не е необходимо крайните методи да се декларират в началния етап на наследяване (базов клас). Методът може да бъде обявен за окончателен във всеки подклас, който искаме други подкласове да следват същото определение.

Код:

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. Втората употреба на финал с класове е, когато човек трябва да създаде неизменим клас, т.е. след като обектът на класа е създаден, ние не можем да променим съдържанието му като предварително дефинирания клас String. Класът трябва да бъде деклариран като краен, за да го направи неизменен.

Забележка :

  • Ако клас е деклариран като окончателен, променливите му член и функциите на член също се считат за окончателни от компилатора.
  • Класът не може да бъде обявен за абстрактно, когато зависи от класовете на деца, за да завърши своето определение, както и окончателно, което не позволява самото наследяване.

Примери за заключителна ключова дума в Java

По-долу е различният пример за крайната ключова дума в Java са:

1. Използване на окончателна променлива

В примера по-долу различни променливи се инициализират с помощта на различни методи. Например - променливата 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 Keyword в Java. Тук обсъждаме как работи крайната ключова дума в Java? която включва крайни променливи, крайни методи, заключителни класове заедно със синтаксис. Можете също да разгледате следните статии, за да научите повече -

  1. Типове и модификатори, използвани за JComponent в Java
  2. Нови функции на Java 8
  3. Как да създадете обект в JavaScript?
  4. Какво представлява изявлението на случая в JavaScript?
  5. Хвърли срещу Хвърли | Топ 5 разлики, които трябва да знаете
  6. Деклариране на абстрактния клас в C # с пример
  7. Използвания и примери на тази ключова дума