Introduktion til det endelige nøgleord i Java

I dette indlæg skal vi se på det forskellige endelige nøgleord for java. Det er et nøgleord, der bruges på java-sprog til at anvende begrænsninger for dets brug eller ændring af andre klasser eller variabler. Ved hjælp af dette nøgleord fortæller man tolken at ikke tillade nogen fremtidig ændring af denne variabel eller metode og behandle den som konstant. Det kan bruges med under tre scenarier: -

  1. Variabel: At erklære en variabel som endelig begrænser dens ændring til at henvise til enhver anden værdi eller reference.
  2. Metoder: At erklære en metode som endelig begrænser metoden tilsidesættelse af denne metode i børneklasserne.
  3. Klasser: At erklære en klasse som endelig forhindrer arv af denne klasse.

Disse nøgleord anbefales altid at deklareres med store bogstaver i henhold til god kodningspraksis.

Syntaks for det endelige nøgleord i Java

Dette nøgleord kan bruges på under 3 måder: -

1. Variabel

Variabler i java kan erklæres som variabel for at begrænse enhver ændring af dens værdier. Det kan erklæres på en af ​​nedenunder tre måder-

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

Bemærk- Referencevariabler kan også erklæres statiske, så de ikke kan indeholde en henvisning til et andet objekt. Men på grund af objektets interne karakter kan referencen ændres.

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

2. Metoder

Metoden, der er erklæret med det endelige nøgleord, siges at være den endelige metode. Den endelige metode kan ikke tilsidesættes af dens barneklasse, hvilket betyder, at barneklasse-metoden ikke kan ændre definitionen af ​​den endelige metode, der findes i forældreklassen. Når vi ønsker, at implementeringen af ​​en metode, der er defineret i forældreklasse, skal følges i dens alle børneklasser, skal vi erklære denne metode som endelig.

Syntaks:

final int my1()(
//method defination
)

3. Klasser

Endelige nøgleord kan også bruges sammen med klasser for at gøre det til en endelig klasse, der betyder, at den bestemte klasse ikke kan udvides eller arves af andre klasser.

Syntaks:

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

Hvordan fungerer det endelige nøgleord i Java?

Det endelige nøgleord hjælper med at begrænse tilsidesættelsen af ​​klasser, medlemmer eller variabler under arv.

1. Endelige variabler

At erklære en variabel som endelig betyder, at enhver ændring begrænses til værdien af ​​variablen i de arvede klasser. En endelig variabel kan kun initialiseres en gang og skal bruges som den er, derfor skal man initialisere en endelig variabel. Det bruges mest med statisk til at skabe en konstant klassevariabel.

For eksempel:

final int a =0;

Vi kan også erklære referencevariabler endelige, i dette tilfælde kan en referencevariabel ikke henvise til forskellige objekter. Men i java kan den indre tilstand af et objekt ændres, der bliver henvist til af den endelige referencevariabel. Således kan vi foretage ændringer i værdien af ​​referencevariablen. Dette er det samme som at anvende endelige arrays 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));
)
)
)

Produktion:

Forklaring

Her henviser array a1 til det samme objekt, kun værdien af ​​det pågældende objekt ændrer sig, fordi vi alle ved, at variablen i arrayet kun indeholder startadressen til hukommelseslokationen, hvor disse elementer i arrayet er gemt.

Og i det samme, hvis vi forsøger at henvise til forskellige array ved hjælp af den samme matrixvariabel a1, vil en fejl blive kastet af compileren. Ved at bruge ord-endelig array betyder det således, at enhver ændring kan foretages i gruppen af ​​arrayet, men variablen har ikke tilladelse til at henvise til noget andet objekt.

Ting at huske

Initialisering af en endelig variabel er nødvendig for at forhindre kompileringstidsfejl. Der er en forskel mellem C ++ const-variabler og disse endelige variabler, som const-variabler ikke behøver at blive initialiseret. Der er tre måder at initialisere en endelig variabel-

  • Initialiser på tidspunktet for selve erklæringen : Vi kan let erklære en endelig variabel på tidspunktet for erklæringen. I tilfælde af at det ikke initialiseres, betragtes denne variabel som en tom slutvariabel, og en af ​​de næste 2 måder kan hjælpe os med at initialisere en tom slutvariabel.
  • Brug af eksempel-initialiseringsblok : Inde i denne blok eller konstruktøren kan en tom slutvariabel let initialiseres. Husk altid at initialisere den bestemte variabel i alle de tilgængelige konstruktører, når du bruger en konstruktør til at initialisere.
  • Statisk blok: Man kan også bruge en statisk blok til at initialisere den tomme endelige variabel. Statisk blok udløses altid en gang for hver klasse, hvorfor den variabelværdi, hvis værdier ikke er beregnet til at blive ændret, let kan initialiseres ved hjælp af denne blok.

Således bruges det endelige nøgleord kun til de variabler, der ikke behøver at ændre deres værdi under udførelsen af ​​programmet. Alle de endelige variabler, der oprettes i en metode eller blok, skal initialiseres der selv. Sådanne typevariabler er kendt som lokale endelige variabler.

Forklaring

I nedenstående eksempel er en variabel i blevet erklæret inden for hovedfunktionen og initialiseret betragtes således også 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);
)
)

Produktion:

2. Afsluttende metoder

En metode, der er erklæret som endelig, kan ikke tilsidesættes i nogen af ​​underklasserne, således kaldet som den endelige metode. Metoden skal erklæres for endelig, hvis vi kræver, at den samme implementering af klassen følges af børneklasserne.

Bemærk- Det er ikke nødvendigt, at de endelige metoder deklareres i det indledende arvetrin (baseklasse). Metoden kan erklæres endelig i enhver underklasse, som vi ønsker, at yderligere underklasser skal følge den samme definition.

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. Afsluttende klasser

Klasser, der er erklæret som endelige, kan ikke arves af andre klasser. Ved at nævne et endeligt nøgleord før klassens navn fortæller kompilatoren, at definitionen af ​​denne klasse kun kan bruges som de er. Ingen andre klasser kan tilføje deres specifikationer til denne definition eller genbruge dens kode. I tilfælde af at man forsøger at udvide den endelige klasse, kastes en fejl af kompilatoren, der indikerer, at denne klasse ikke er beregnet til at blive udvidet. Man kan bruge de endelige nøgleord i java i ethvert til under 2 formål: -

  1. Den første er at forhindre arv fra denne klasse. For f.eks. Alle indpakningsklasser, der findes i java.lang-pakken, er sidste klasser, derfor kan vi ikke udvide dem i vores klasser, men kan bruge den ved at erklære deres objekter. Ethvert forsøg på at få adgang til disse klasser resulterer i en fejl fra kompilatoren.

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

  1. Den anden brug af final med klasser er, når man skal oprette en uforanderlig klasse, dvs. når klassens objekt er oprettet, kan vi ikke ændre dets indhold som den foruddefinerede strengklasse. Klassen skal erklæres for endelig for at gøre den uforanderlig.

Bemærk :

  • Hvis en klasse er erklæret som endelig, betragtes dens medlemsvariabler og medlemsfunktioner også som endelige af kompilatoren.
  • En klasse kan ikke erklæres abstrakt, når den er afhængig af barneklasserne for at fuldføre sin definition såvel som endelige, som forhindrer arven i sig selv.

Eksempler på det endelige nøgleord i Java

Nedenfor er de forskellige eksempler på det endelige nøgleord i Java:

1. Brug af endelig variabel

I nedenstående eksempel initialiseres forskellige variabler ved hjælp af forskellige metoder. F.eks. Initialiseres SECOND-variablen ved hjælp af konstruktør, mens THIRD initialiseres ved hjælp af 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
)
)

Produktion:

2. Brug af endelige metoder

I nedenstående eksempel erklærer abstrakt klasse myShape de endelige metoder getWidth og få otte, der ikke behøver at blive tilsidesat af de arvede klasser. Det erklærer også en abstrakt funktion, hvis implementering er obligatorisk i de efterfølgende klasser. Den eneste definitionen af ​​en abstrakt funktion implementeres således i en første barneklasse såvel som anden børneklasse.

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

Produktion:

3. Brug af afsluttende klasser

I nedenstående program bruger vi en endelig klasse Solid, der definerer en metode til beregning af en forms volumen ved hjælp af dens dimensioner, men visningen af ​​en boks volumen udføres ved hjælp af printVol-funktion i den arvede klasse. Form Da Solid er en sidste klasse, vil klasse Shape ikke have tilladelse til at udvide (eller arve) den. Således bruger den objektets form til at beregne lydstyrken på en hvilken som helst af formen ved blot at overføre argumenterne til funktionerne.

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

Produktion:

Konklusion

Det endelige nøgleord bruges til at forhindre, at klasser, variabler og metoder bliver tilsidesat af dets børneklasser. Det kan også bruges til at gøre klasser uforanderlige, der begrænser ændringen i værdien af ​​dens objekter. Den sidste nøgleordskontrol kontrolleres altid kun på kompileringstiden. Det er en stor hjælp at forhindre genbrug af de definerede variabler, logik og klasser.

Anbefalede artikler

Dette er en guide til eksempel på Endelig nøgleord i Java. Her diskuterer vi, hvordan det endelige nøgleord fungerer i java? som inkluderer endelige variabler, endelige metoder, slutklasser sammen med syntaks. Du kan også se på de følgende artikler for at lære mere -

  1. Typer og modifikatorer, der bruges til JComponent i Java
  2. Nye funktioner i Java 8
  3. Sådan opretter du et objekt i JavaScript?
  4. Hvad er sagopgørelse i JavaScript?
  5. Kast vs kaster | Top 5 forskelle, du burde vide
  6. At erklære abstrakt klasse i C # med eksempel
  7. Anvendelser og eksempler på dette nøgleord

Kategori: