Introduksjon til endelig nøkkelord i Java

I dette innlegget skal vi se på de forskjellige endelige nøkkelordene for java. Det er et nøkkelord som brukes på java-språk for å bruke begrensninger i bruken eller modifiseringen av andre klasser eller variabler. Ved hjelp av dette nøkkelordet forteller man tolken å ikke tillate fremtidig modifisering av den variabelen eller metoden og behandle den som konstant. Det kan brukes med under tre scenarier: -

  1. Variabel: Å erklære en variabel som endelig begrenser endringen til å referere til andre verdier eller referanser.
  2. Metoder: Å erklære en metode som endelig begrenser metoden overstyring av metoden i barneklassene.
  3. Klasser: Å erklære en klasse som endelig forhindrer arven etter den klassen.

Disse nøkkelordene anbefales alltid å deklareres med store bokstaver i henhold til god kodingspraksis.

Syntaks for endelig nøkkelord i Java

Dette nøkkelordet kan brukes på tre måter nedenfor:

1. Variabel

Variabler i java kan deklareres som variabel for å begrense enhver endring i verdiene. Det kan deklareres på en av under tre måter-

syntaks:

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

Merknad - Referansevariabler kan også erklæres statiske, slik at de ikke kan inneholde en referanse til et annet objekt. Men på grunn av objektets indre natur kan referansen endres.

final String builder sb = new StringBuilder (“LetsLearn”);

2. Metoder

Metoden som er erklært med det endelige nøkkelordet sies å være den endelige metoden. Den endelige metoden kan ikke overstyres av barneklassen, noe som betyr at barneklasse-metoden ikke kan endre definisjonen av den endelige metoden som er tilstede i foreldreklassen. Når vi ønsker at implementeringen av en metode definert i foreldreklassen må følges i alle barneklasser, må vi erklære denne metoden som endelig.

syntaks:

final int my1()(
//method defination
)

3. Klasser

Endelige nøkkelord kan også brukes med klasser for å gjøre det til en endelig klasse som betyr at den aktuelle klassen ikke kan utvides eller arves av andre klasser.

syntaks:

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

Hvordan fungerer endelig nøkkelord i Java?

Det endelige nøkkelordet hjelper til med å begrense overstyringen av klassene, medlemmene eller variablene under arv.

1. Endelige variabler

Å erklære en variabel som endelig betyr å begrense enhver endring til verdien av variabelen i de arvelige klassene. En sluttvariabel kan bare initialiseres en gang og må brukes som den er, og man må derfor initialisere en sluttvariabel. Det brukes mest med statisk for å lage en konstant klassevariabel.

For eksempel:

final int a =0;

Vi kan også erklære referansevariabler som endelige, i dette tilfellet kan en referansevariabel ikke referere til forskjellige objekter. Men i java kan den interne tilstanden til et objekt endres som blir henvist til av den endelige referansevariabelen. Dermed kan vi gjøre endringer i verdien av referansevariabelen. Dette er det samme som å bruke endelige matriser som vist nedenfor: -

Kode:

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

Produksjon:

Forklaring

Her viser array a1 til det samme objektet, bare verdien til det objektet endrer seg fordi vi alle vet at variabelen til matrisen bare inneholder startadressen til minneposisjonen der elementene i matrisen er lagret.

Og i det samme, hvis vi prøver å henvise til forskjellige arrayer med samme arrayvariabel a1, vil en feil bli kastet av kompilatoren. Ved å bruke ord-endelig matrise betyr dette her at det kan gjøres noen endring i gruppen av elementet, men variabelen har ikke lov til å henvise til noe annet objekt.

Ting å huske

Å initialisere en endelig variabel er nødvendig for å forhindre kompileringstid-feil. Det er en forskjell mellom C ++ const-variabler og disse endelige variablene som const-variabler trenger ikke å initialiseres. Det er tre måter å initialisere en endelig variabel-

  • Initialiser på tidspunktet for selve erklæringen : Vi kan enkelt erklære en endelig variabel på tidspunktet for erklæringen. I tilfelle det ikke initialiseres, blir den variabelen betraktet som en tom endelig variabel, og en av de neste to måtene kan hjelpe oss med å initialisere en tom endelig variabel.
  • Bruke instansinitialiseringsblokk : Inne i denne blokken eller konstruktøren kan en tom endelig variabel enkelt initialiseres. Husk alltid å initialisere den spesifikke variabelen i alle tilgjengelige konstruktører når du bruker en konstruktør for å initialisere.
  • Statisk blokk: Man kan også bruke en statisk blokk for å initialisere den tomme endelige variabelen. Statisk blokkering utløses alltid en gang for hver klasse, og derfor kan variabelverdien hvis verdier ikke er ment å endres lett initialiseres ved bruk av denne blokken.

Dermed brukes det endelige nøkkelordet for bare variabelen som ikke trenger å endre verdien under utførelsen av programmet. Alle de endelige variablene som er opprettet i en metode eller blokk, må initialiseres der selv. Slike typevariabler er kjent som lokale sluttvariabler.

Forklaring

I eksemplet nedenfor er en variabel i blitt erklært innenfor hovedfunksjonen og initialisert blir dermed også betraktet som en endelig lokal variabel.

Kode:

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

Produksjon:

2. Endelige metoder

En metode som er erklært som endelig, kan ikke overstyres i noen av underklassene, således kalt som endelig metode. Metoden må deklareres som endelig hvis vi krever at samme implementering av klassen blir fulgt av barneklassene.

Merknad - Det er ikke nødvendig at endelige metoder deklareres i det innledende stadium av arv (baseklasse). Metoden kan erklæres endelig i alle underklasser som vi ønsker at ytterligere underklasser skal følge den samme definisjonen.

Kode:

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. Sluttklasser

Klasser som er erklært som endelige kan ikke arves av andre klasser. Å nevne et endelig nøkkelord før klassens navn forteller kompilatoren at definisjonen av denne klassen bare kan brukes som de er. Ingen andre klasser kan legge til spesifikasjonene i denne definisjonen eller bruke den på nytt. I tilfelle hvis man prøver å utvide den endelige klassen, kastes en feil av kompilatoren som indikerer at denne klassen ikke er ment å bli utvidet. Man kan bruke endelige nøkkelord i java i hvilket som helst for under 2 formål: -

  1. Den første er å forhindre arv fra den klassen. For for eksempel er alle innpakningsklassene som er med java.lang-pakken, endelige klasser. Derfor kan vi ikke utvide dem i klassene våre, men kan bruke den ved å erklære objektene deres. Ethvert forsøk som gjøres for å få tilgang til disse klassene, vil resultere i en feil fra kompilatoren.

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

  1. Den andre bruken av finalen med klasser er når man trenger å lage en uforanderlig klasse, dvs. når objektets klasse er opprettet, kan vi ikke endre innholdet som den forhåndsdefinerte strengklassen. Klassen må erklæres som endelig for å gjøre den uforanderlig.

Merk :

  • Hvis en klasse er erklært som endelig, blir medlemsvariablene og medlemsfunksjonene også betraktet som endelige av kompilatoren.
  • En klasse kan ikke erklæres abstrakt der den er avhengig av barneklassene for å fullføre sin definisjon så vel som endelige som forhindrer arven i seg selv.

Eksempler på endelig nøkkelord i Java

Nedenfor er de forskjellige eksemplene på endelig nøkkelord i Java:

1. Bruke endelig variabel

I eksemplet nedenfor initialiseres forskjellige variabler ved bruk av forskjellige metoder. For eksempel initialiseres den andre variabelen ved bruk av konstruktør, mens THIRD initialiseres ved hjelp av en initialisator.

Kode:

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

Produksjon:

2. Bruke sluttmetoder

I eksemplet nedenfor erklærer abstrakt klasse myShape de endelige metodene getWidth og få åtte som ikke trenger å bli tilsidesatt av de arvelige klassene. Den erklærer også en abstrakt funksjon hvis implementering er obligatorisk i de påfølgende klassene. Dermed implementeres den eneste definisjonen av en abstrakt funksjon i en første barneklasse og andre barneklasse.

Kode:

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

Produksjon:

3. Bruke sluttklasser

I programmet under bruker vi en sluttklasse Solid som definerer en metode for å beregne volumet til en form ved hjelp av dens dimensjoner, men å vise volumet til en boks gjøres ved bruk av printVol-funksjon i den arvede klassen. Shape Da Solid er en sluttklasse, vil ikke klasse Shape få lov til å utvide (eller arve) den. Dermed bruker den objektet Shape for å beregne volumet til noen av Shape ved å bare føre argumentene til funksjonene.

Kode:

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

Produksjon:

Konklusjon

Det endelige nøkkelordet brukes for å forhindre at klassene, variablene og metodene blir tilsidesatt av barneklassene. Det kan også brukes til å gjøre klasser uforanderlige som begrenser endringen i verdien av objektene. Den endelige nøkkelordkontrollen sjekkes alltid bare på samlingen. Det er et flott verktøy for å forhindre gjenbruk av de definerte variablene, logikken og klasser.

Anbefalte artikler

Dette er en guide til eksempel på Endelig nøkkelord i Java. Her diskuterer vi hvordan det endelige nøkkelordet fungerer i java? som inkluderer endelige variabler, sluttmetoder, sluttklasser sammen med syntaks. Du kan også se på følgende artikler for å lære mer -

  1. Typer og modifikatorer som brukes for JComponent i Java
  2. Nye funksjoner i Java 8
  3. Hvordan lage et objekt i JavaScript?
  4. Hva er saksuttalelse i JavaScript?
  5. Kast vs kaster | Topp 5 forskjeller du burde vite
  6. Å erklære abstrakt klasse i C # med eksempel
  7. Bruker og eksempler på dette nøkkelordet