Úvod do konečného klíčového slova v Javě

V tomto příspěvku se podíváme na jiné konečné klíčové slovo pro java. Jedná se o klíčové slovo používané v jazyce Java, které aplikuje omezení na jeho použití nebo úpravy jinými třídami nebo proměnnými. Pomocí tohoto klíčového slova řekneme tlumočníkovi, aby nepovolil žádnou budoucí úpravu této proměnné nebo metody a považoval ji za konstantní. Lze použít s méně než 3 scénáři: -

  1. Proměnná: Deklarace proměnné jako konečné omezí její úpravu tak, aby odkazovala na jakoukoli jinou hodnotu nebo odkaz.
  2. Metody: Deklarace metody jako finální omezuje potlačení metody v podřízených třídách.
  3. Třídy: Prohlášení třídy za konečné zabrání dědičnosti této třídy.

Tato klíčová slova se vždy doporučují uvádět velkými písmeny podle správné praxe kódování.

Syntaxe konečného klíčového slova v Javě

Toto klíčové slovo lze použít třemi způsoby: -

1. Proměnná

Proměnné v javě mohou být deklarovány jako proměnné, aby se omezila jakákoli změna jejich hodnot. Lze ji deklarovat jedním ze tří způsobů -

Syntax:

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í proměnné lze také deklarovat jako statické, takže nemohou obsahovat odkaz na jiný objekt. Ale vzhledem k vnitřní povaze objektu lze odkaz změnit.

finální String Builder sb = new StringBuilder („LetsLearn“);

2. Metody

Metoda deklarovaná konečným klíčovým slovem je označována jako konečná metoda. Konečná metoda nemůže být potlačena její podřízenou třídou, což znamená, že metoda podřízené třídy nemůže změnit definici konečné metody přítomné v nadřazené třídě. Chceme-li implementaci metody definované v nadřazené třídě dodržovat ve všech podřízených třídách, musíme tuto metodu deklarovat jako konečnou.

Syntax:

final int my1()(
//method defination
)

3. Třídy

Závěrečná klíčová slova lze také použít se třídami, aby se stala konečnou třídou, což znamená, že konkrétní třídu nelze rozšířit ani zdědit žádné jiné třídy.

Syntax:

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

Jak funguje konečné klíčové slovo v Javě?

Poslední klíčové slovo pomáhá omezit přepisování tříd, členů nebo proměnných během dědičnosti.

1. Závěrečné proměnné

Deklarace proměnné jako konečné znamená omezení jakékoli změny hodnoty proměnné v zděděných třídách. Konečná proměnná může být inicializována pouze jednou a musí být použita tak, jak je, musí tedy inicializovat konečnou proměnnou. Většinou se používá se statickými prostředky k vytvoření proměnné konstantní třídy.

Například:

final int a =0;

Můžeme také deklarovat referenční proměnné jako konečné, v tomto případě jedna referenční proměnná nemůže odkazovat na různé objekty. Ale v javě může být změněn vnitřní stav objektu, na který odkazuje konečná referenční proměnná. Můžeme tedy změnit hodnotu referenční proměnné. To je stejné jako při použití konečných polí, jak je uvedeno níže: -

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ýstup:

Vysvětlení

Pole a1 zde odkazuje na stejný objekt, mění se pouze hodnota tohoto objektu, protože všichni víme, že proměnná pole obsahuje pouze počáteční adresu umístění paměti, kde jsou tyto prvky pole uloženy.

A pokud se pokusíme odkazovat na jiné pole pomocí stejné proměnné pole a1, kompilátor vyvolá chybu. Použitím semifinálového pole zde tedy může být provedena jakákoli změna člena pole, ale proměnná nesmí odkazovat na žádný jiný objekt.

Co si pamatovat

Inicializace konečné proměnné je nezbytná, aby se zabránilo chybě kompilace. Existuje rozdíl mezi konstantními proměnnými C ++ a těmito konečnými proměnnými, které nemusí být inicializovány. Existují tři způsoby, jak inicializovat konečnou proměnnou -

  • Inicializace v okamžiku samotného prohlášení : Můžeme snadno deklarovat konečnou proměnnou v době jejího prohlášení. V případě, že není inicializována, pak se tato proměnná považuje za prázdnou konečnou proměnnou a některý z následujících dvou způsobů nám může pomoci inicializovat prázdnou konečnou proměnnou.
  • Použití bloku inicializace instance : Uvnitř tohoto bloku nebo konstruktoru lze snadno inicializovat prázdnou konečnou proměnnou. Při použití konstruktoru k inicializaci vždy nezapomeňte inicializovat konkrétní proměnnou ve všech dostupných konstruktorech.
  • Statický blok: K inicializaci prázdné konečné proměnné lze také použít statický blok. Statický blok se pro každou třídu vždy spustí jednou, takže pomocí tohoto bloku lze snadno inicializovat proměnnou, jejíž hodnoty nemají být měněny.

Konečné klíčové slovo se tedy používá pouze pro ty proměnné, které během provádění programu nemusí měnit svoji hodnotu. Zde musí být inicializovány všechny konečné proměnné vytvořené uvnitř metody nebo bloku. Tyto proměnné typu jsou známé jako lokální konečné proměnné.

Vysvětlení

V níže uvedeném příkladu byla proměnná i deklarována v rámci hlavní funkce a inicializována také proto je považována za konečnou lokální proměnnou.

Kód:

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

Výstup:

2. Závěrečné metody

Metoda deklarovaná jako konečná nemůže být přepsána v žádné z podtříd, tzv. Finální metoda. Metoda musí být deklarována jako konečná, pokud požadujeme, aby stejnou implementaci třídy následovaly podřízené třídy.

Poznámka - Není nutné, aby konečné metody byly deklarovány v počáteční fázi dědičnosti (základní třída). Metodu lze deklarovat jako konečnou v jakékoli podtřídě, kterou chceme, aby další podtřídy následovaly stejnou definici.

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ávěrečné třídy

Třídy deklarované jako konečné nemohou být zděděny jinými třídami. Uvedení posledního klíčového slova před názvem třídy říká kompilátoru, že definici této třídy lze použít pouze tak, jak jsou. Žádné jiné třídy nemohou k této definici přidat své specifikace nebo znovu použít svůj kód. V případě, že se jeden pokusí rozšířit konečnou třídu, kompilátor vyvolá chybu označující, že tato třída nemá být rozšířena. Jeden může použít konečná klíčová slova v javě v libovolném pro účely pod 2:

  1. Prvním je zabránit dědičnosti této třídy. Například - všechny současné třídy Wrapper java.lang balíček jsou konečné třídy, proto je nemůžeme rozšířit v našich třídách, ale můžeme je použít deklarováním jejich objektů. Jakýkoli pokus o přístup k těmto třídám bude mít za následek chybu kompilátoru.

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

  1. Druhé použití finále s třídami je, když je potřeba vytvořit neměnnou třídu, tj. Jakmile je objekt třídy vytvořen, nemůžeme změnit jeho obsah jako předdefinovaná třída String. Třída musí být prohlášena za konečnou, aby byla nezměnitelná.

Poznámka :

  • Pokud je třída deklarována jako konečná, kompilátor ji považuje za konečnou i její členské proměnné a členské funkce.
  • Třída nemůže být prohlášena za abstraktní, pokud závisí na podřízených třídách, aby dokončily svou definici, a konečnou, která zabraňuje samotné dědičnosti.

Příklady konečného klíčového slova v Javě

Níže je uveden jiný příklad konečného klíčového slova v Javě:

1. Použití konečné proměnné

V níže uvedeném příkladu jsou různé proměnné inicializovány pomocí různých metod. Například proměnná SECOND je inicializována pomocí konstruktoru, zatímco THIRD je inicializována pomocí inicializátoru.

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ýstup:

2. Použití závěrečných metod

V níže uvedeném příkladu abstraktní třída myShape deklaruje konečné metody getWidth a získává osm, které nemusí být zděděnými třídami potlačeny. Deklaruje také jednu abstraktní funkci, jejíž implementace je povinná v následujících třídách. Jediná definice abstraktní funkce je tedy implementována v první podřízené třídě i ve druhé podřízené třídě.

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ýstup:

3. Používání závěrečných tříd

V níže uvedeném programu používáme konečnou třídu Solid, která definuje metodu výpočtu objemu tvaru pomocí jeho rozměrů, ale zobrazení objemu pole se provádí pomocí funkce printVol v zděděné třídě. Shape As Solid je konečná třída, takže třída Shape jej nebude moci rozšířit (nebo zdědit). Použije tedy objekt Shape k výpočtu objemu libovolného Shape pouhým předáním argumentů funkcí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ýstup:

Závěr

Konečné klíčové slovo se používá k zabránění přepsání tříd, proměnných a metod jeho podřízenými třídami. Může být také použito k tomu, aby byly třídy neměnné, což omezuje změnu hodnoty jejích objektů. Poslední kontrola klíčových slov je vždy kontrolována pouze při kompilaci. Je to skvělý nástroj, který zabraňuje opětovnému použití definovaných proměnných, logiky a tříd.

Doporučené články

Toto je průvodce příkladem konečného klíčového slova v Javě. Zde diskutujeme, jak poslední klíčové slovo funguje v jazyce Java? který zahrnuje konečné proměnné, konečné metody, konečné třídy spolu se syntaxí. Další informace naleznete také v následujících článcích -

  1. Typy a modifikátory používané pro JComponent v Javě
  2. Nové funkce Java 8
  3. Jak vytvořit objekt v JavaScriptu?
  4. Co je to Case Case v JavaScriptu?
  5. Throw vs Throw | 5 hlavních rozdílů, které byste měli vědět
  6. Deklarace abstraktní třídy v C # s příkladem
  7. Použití a příklady tohoto klíčového slova

Kategorie: