Úvod do konečného kľúčového slova v jazyku Java

V tomto príspevku sa pozrieme na iné konečné kľúčové slovo pre java. Je to kľúčové slovo používané v jazyku java, ktoré uplatňuje obmedzenia týkajúce sa jeho používania alebo úpravy inými triedami alebo premennými. Použitím tohto kľúčového slova povieme tlmočníkovi, aby nepovolil žiadne ďalšie zmeny tejto premennej alebo metódy a považoval ju za konštantnú. Môže sa použiť s menej ako 3 scenármi: -

  1. Premenná: Vyhlásenie premennej ako konečnej obmedzuje jej úpravu tak, aby odkazovala na akúkoľvek inú hodnotu alebo odkaz.
  2. Metódy: Vyhlásenie metódy ako konečnej obmedzuje prepísanie metódy v podradených triedach.
  3. Triedy: Vyhlásenie triedy ako konečnej zabráni dedičstvu tejto triedy.

Odporúčame, aby sa tieto kľúčové slová vždy uvádzali veľkými písmenami v súlade s osvedčenými postupmi kódovania.

Syntax konečného kľúčového slova v jazyku Java

Toto kľúčové slovo je možné použiť tromi spôsobmi: -

1. Premenná

Premenné v jave môžu byť deklarované ako premenné, aby obmedzili akúkoľvek zmenu svojich hodnôt. Dá sa deklarovať jedným z troch spôsobov -

syntaxe:

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

Poznámka - Referenčné premenné možno tiež deklarovať ako statické, takže nemôžu obsahovať odkaz na iný objekt. Ale z dôvodu vnútornej povahy objektu sa referencia môže zmeniť.

finálny String Builder sb = nový StringBuilder („LetsLearn“);

2. Metódy

Metóda deklarovaná pomocou konečného kľúčového slova sa považuje za konečnú metódu. Konečná metóda nemôže byť potlačená jej podradenou triedou, čo znamená, že metóda podradenej triedy nemôže zmeniť definíciu konečnej metódy prítomnej v nadradenej triede. Ak chceme, aby sa implementácia metódy definovanej v rodičovskej triede dodržiavala vo všetkých jej podradených triedach, musíme túto metódu deklarovať ako konečnú.

syntaxe:

final int my1()(
//method defination
)

3. Triedy

Cieľové kľúčové slová môžu byť tiež použité spolu s triedami, aby sa z nich stala konečná trieda, čo znamená, že určitú triedu nemôžu rozšíriť ani zdediť žiadne iné triedy.

syntaxe:

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

Ako funguje záverečné kľúčové slovo v jazyku Java?

Posledné kľúčové slovo pomáha obmedziť nadradenie tried, členov alebo premenných počas dedičstva.

1. Konečné premenné

Vyhlásenie premennej ako konečnej znamená obmedzenie akejkoľvek zmeny hodnoty premennej v zdedených triedach. Konečná premenná sa môže inicializovať iba raz a musí sa použiť tak, ako je, takže sa musí inicializovať konečná premenná. Najčastejšie sa používa so statickými jednotkami na vytvorenie premennej konštantnej triedy.

Napríklad:

final int a =0;

Referenčné premenné môžeme deklarovať aj ako konečné, v tomto prípade jedna referenčná premenná nemôže odkazovať na rôzne objekty. Ale v jave sa dá zmeniť vnútorný stav objektu, ktorý sa uvádza v konečnej referenčnej premennej. Takto môžeme robiť zmeny hodnoty referenčnej premennej. Je to rovnaké ako pri použití konečných polí, ako je uvedené nižšie: -

kód:

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));
)
)
)

Výkon:

vysvetlenie

Pole a1 tu odkazuje na ten istý objekt, mení sa iba hodnota tohto objektu, pretože všetci vieme, že premenná poľa obsahuje iba počiatočnú adresu umiestnenia pamäte, v ktorej sú uložené tieto prvky poľa.

A v rovnakom prípade, ak sa pokúsime odkázať na iné pole pomocou rovnakej premennej poľa a1, kompilátor vyvolá chybu. Použitím slovného výsledného poľa tu teda možno urobiť akúkoľvek zmenu člena poľa, ale premenná nesmie odkazovať na žiadny iný objekt.

Čo je potrebné pamätať

Inicializácia konečnej premennej je potrebná, aby sa predišlo chybám pri kompilácii. Rozdiel medzi konštantnými premennými C ++ a týmito konečnými premennými je rozdiel, že konštantné premenné nemusia byť inicializované. Existujú tri spôsoby, ako inicializovať konečnú premennú-

  • Inicializácia pri samotnom vyhlásení : Konečnú premennú môžeme ľahko deklarovať v čase jej vyhlásenia. V prípade, že nie je inicializovaná, potom sa táto premenná považuje za prázdnu konečnú premennú a niektorý z nasledujúcich 2 spôsobov nám môže pomôcť inicializovať prázdnu konečnú premennú.
  • Použitie bloku inicializácie inštancie : Vo vnútri tohto bloku alebo konštruktora sa môže ľahko inicializovať prázdna konečná premenná. Pri použití iniciátora vždy nezabudnite inicializovať príslušnú premennú vo všetkých dostupných konštruktoroch.
  • Statický blok: Na inicializáciu prázdnej konečnej premennej sa dá použiť aj statický blok. Statický blok sa vždy spúšťa pre každú triedu raz, takže pomocou tohto bloku je možné ľahko inicializovať premennú, ktorej hodnoty nie sú určené na zmenu.

Konečné kľúčové slovo sa teda používa iba pre tie premenné, ktoré počas vykonávania programu nemusia meniť svoju hodnotu. Všetky konečné premenné vytvorené vo vnútri metódy alebo bloku musia byť tam inicializované. Takéto premenné typu sú známe ako lokálne konečné premenné.

vysvetlenie

V nižšie uvedenom príklade je premenná i deklarovaná v rámci hlavnej funkcie a inicializovaná aj preto sa považuje za konečnú lokálnu premennú.

kód:

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

Výkon:

2. Záverečné metódy

Metóda deklarovaná ako konečná nemôže byť potlačená v žiadnej z podtried, teda nazývaná ako konečná metóda. Metódu je potrebné deklarovať ako konečnú, ak požadujeme, aby rovnakú implementáciu triedy nasledovali aj podriadené triedy.

Poznámka - Nie je potrebné, aby sa konečné metódy deklarovali v počiatočnej fáze dedičstva (základná trieda). Metódu je možné deklarovať ako konečnú v ktorejkoľvek podtriede, v ktorej chceme, aby ďalšie podtriedy nasledovali rovnakú definíciu.

kód:

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. Záverečné triedy

Triedy vyhlásené za konečné nemôžu zdediť žiadne iné triedy. Uvedenie posledného kľúčového slova pred názvom triedy hovorí kompilátoru, že definíciu tejto triedy je možné použiť iba tak, ako sú. Žiadna iná trieda nemôže k tejto definícii pridať svoje špecifikácie alebo znovu použiť svoj kód. V prípade, že sa niekto pokúsi rozšíriť poslednú triedu, kompilátor vyvolá chybu, ktorá naznačuje, že táto trieda nemá byť rozšírená. Jeden môže používať konečné kľúčové slová v jave na akékoľvek účely do 2:

  1. Prvým je zabrániť dedičstvu tejto triedy. Napríklad všetky prítomné triedy Wrapper sú balíčky java.lang finálnymi triedami, preto ich nemôžeme rozšíriť v našich triedach, ale môžeme ich použiť deklarovaním ich objektov. Akýkoľvek pokus o prístup k týmto triedam spôsobí chybu kompilátora.

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

  1. Druhé použitie finále s triedami je, keď je potrebné vytvoriť nemennú triedu, tj akonáhle je objekt triedy vytvorený, nemôžeme zmeniť jeho obsah ako preddefinovanú triedu String. Trieda musí byť vyhlásená za konečnú, aby bola nemenná.

Poznámka :

  • Ak je trieda deklarovaná ako konečná, kompilátor ju považuje za konečnú aj jej členské premenné a členské funkcie.
  • Trieda nemôže byť vyhlásená za abstraktnú, ak je na jej triedach závislé, aby dokončila svoju definíciu, ako aj konečnú, ktorá zabraňuje samotnému dedičstvu.

Príklady konečného kľúčového slova v jazyku Java

Nižšie je uvedený Iný príklad konečného kľúčového slova v jazyku Java:

1. Použitie konečnej premennej

V nižšie uvedenom príklade sú rôzne premenné inicializované pomocou rôznych metód. Napríklad premenná SECOND sa inicializuje pomocou konštruktora, zatiaľ čo THIRD sa inicializuje pomocou inicializátora.

kód:

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
)
)

Výkon:

2. Použitie záverečných metód

V nižšie uvedenom príklade abstraktná trieda myShape deklaruje konečné metódy getWidth a získa osem, ktoré nemusia byť zdedené zdedenými triedami. Deklaruje tiež jednu abstraktnú funkciu, ktorej implementácia je povinná v nasledujúcich triedach. Jediná definícia abstraktnej funkcie sa teda implementuje v prvej triede detí aj v druhej triede detí.

kód:

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());
)
)

Výkon:

3. Používanie záverečných tried

V nižšie uvedenom programe používame konečnú triedu Solid, ktorá definuje metódu výpočtu objemu tvaru pomocou jeho rozmerov, ale zobrazenie objemu poľa sa vykonáva pomocou funkcie printVol v zdedenej triede. Tvar As Solid je konečná trieda, takže trieda Tvar ju nebude môcť rozširovať (ani zdediť). Použije teda objekt Shape na výpočet objemu ktoréhokoľvek z Shape jednoducho odovzdaním argumentov funkciám.

kód:

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);
)
)

Výkon:

záver

Konečné kľúčové slovo sa používa na zabránenie prepísaniu tried, premenných a metód jeho podradenými triedami. Môže sa tiež použiť na vytvorenie nemenných tried, ktoré obmedzujú zmenu hodnoty jej objektov. Konečná kontrola kľúčových slov sa vždy kontroluje iba v čase kompilácie. Je to vynikajúci nástroj, ktorý zabraňuje opätovnému použitiu definovaných premenných, logiky a tried.

Odporúčané články

Toto je sprievodca príkladom konečného kľúčového slova v jazyku Java. Tu diskutujeme o tom, ako funguje konečné kľúčové slovo v jazyku Java? ktorá obsahuje konečné premenné, konečné metódy, konečné triedy spolu so syntaxou. Ďalšie informácie nájdete aj v nasledujúcich článkoch -

  1. Typy a modifikátory používané pre JComponent v Java
  2. Nové funkcie Java 8
  3. Ako vytvoriť objekt v JavaScripte?
  4. Čo je to Prípad v jazyku JavaScript?
  5. Hodiť vs Hodí | Top 5 rozdielov, ktoré by ste mali vedieť
  6. Deklarovanie abstraktnej triedy v C # s príkladom
  7. Použitie a príklady tohto kľúčového slova

Kategórie: