logo

Cuvânt cheie final în Java

The metoda finala în Java este folosit ca a modificator non-acces aplicabil numai la a variabil , A metodă , sau a clasă. Este obișnuit restricționați un utilizator în Java .

Următoarele sunt contexte diferite unde se folosește finalul:



  1. Variabil
  2. Metodă
  3. Clasă

Caracteristicile cuvântului cheie final în Java:

În Java, cuvântul cheie final este folosit pentru a indica faptul că o variabilă, o metodă sau o clasă nu poate fi modificată sau extinsă. Iată câteva dintre caracteristicile sale:

  • Variabile finale: Când o variabilă este declarată finală, valoarea acesteia nu poate fi schimbată odată ce a fost inițializată. Acest lucru este util pentru declararea constantelor sau a altor valori care nu ar trebui modificate.
  • Metode finale : Când o metodă este declarată finală, nu poate fi suprascrisă de o subclasă. Acest lucru este util pentru metodele care fac parte din API-ul public al unei clase și nu ar trebui modificate de subclase.
  • Clasele finale: Când o clasă este declarată finală, nu poate fi extinsă cu o subclasă. Acest lucru este util pentru clasele care sunt destinate a fi utilizate ca atare și care nu trebuie modificate sau extinse.
  • Inițializare: Variabilele finale trebuie inițializate fie în momentul declarării, fie în constructorul clasei. Acest lucru asigură că valoarea variabilei este setată și nu poate fi modificată.
  • Performanţă: Utilizarea unei finale poate uneori îmbunătăți performanța, deoarece compilatorul poate optimiza codul mai eficient atunci când știe că o variabilă sau o metodă nu poate fi schimbată.
  • Securitate: Finalul poate ajuta la îmbunătățirea securității, împiedicând codul rău intenționat să modifice datele sau comportamentul sensibil.

În general, cuvântul cheie final este un instrument util pentru îmbunătățirea calității codului și pentru a se asigura că anumite aspecte ale unui program nu pot fi modificate sau extinse. Prin declararea variabilelor, metodelor și claselor ca fiind finale, dezvoltatorii pot scrie cod mai sigur, mai robust și mai ușor de întreținut.



Variabila finală Java

Când o variabilă este declarată cu cuvânt cheie final , este valoarea nu poate fi schimbată , în esență, a constant . Aceasta înseamnă și că tu trebuie să inițializeze o variabilă finală .

Dacă variabila finală este a referinţă , aceasta înseamnă că variabila nu poate fi relegat la referință alt obiect, dar starea internă a obiectului indicat de acea variabilă de referință poate fi modificată, adică puteți adăuga sau elimina elemente din matrice finală sau colectarea finală.

Este o bună practică să reprezentați variabilele finale în majuscule, folosind liniuța de subliniere pentru a separa cuvintele.



Exemplu:

Java
public class ConstantExample {  public static void main(String[] args) {  // Define a constant variable PI  final double PI = 3.14159;  // Print the value of PI  System.out.println('Value of PI: ' + PI);  } }>

Ieșire
Value of PI: 3.14159>

Ieșire:

  Value of PI: 3.14159>

Diferite metode de utilizare a variabilei finale

Să vedem diferite metode pe care le putem folosi variabila finală în Java.

1. Variabila finala

Exemplu:

// Final variable final int THRESHOLD = 5;>

2. Variabila finală goală

Exemplu:

// Blank final variable final int THRESHOLD;>

3. Variabila finală statică

Exemplu:

// Final static variable PI static final double PI = 3.141592653589793;>

4. Variabila finală static Blank

Exemplu:

// Blank final static variable static final double PI;>

Inițializarea unei variabile finale

Trebuie să inițializam o variabilă finală, în caz contrar, compilatorul va arunca o eroare de compilare. O variabilă finală poate fi inițializată o singură dată, fie prin intermediul unui initializator sau o declarație de atribuire. Există trei moduri de a inițializa o variabilă finală:

preity zinta
  1. Puteți inițializa o variabilă finală atunci când este declarată. Această abordare este cea mai comună. O variabilă finală se numește a variabilă finală goală dacă este nu inițializat în timpul declarației. Mai jos sunt cele două moduri de a inițializa o variabilă finală goală.
  2. O variabilă finală goală poate fi inițializată în interiorul unui bloc inițializator de instanță sau constructorul. Dacă aveți mai mult de un constructor în clasa dvs., atunci acesta trebuie inițializat în toate, în caz contrar, va fi generată o eroare de compilare.
  3. O variabilă statică finală goală poate fi inițializată în interiorul a bloc static .

Să vedem aceste două moduri diferite de inițializare a unei variabile finale

Exemplu:

Java
// Java Program to demonstrate Different // Ways of Initializing a final Variable // Main class  class GFG {    // a final variable  // direct initialize  final int THRESHOLD = 5;    // a blank final variable  final int CAPACITY;    // another blank final variable  final int MINIMUM;    // a final static variable PI  // direct initialize  static final double PI = 3.141592653589793;    // a blank final static variable  static final double EULERCONSTANT;    // instance initializer block for   // initializing CAPACITY  {  CAPACITY = 25;  }    // static initializer block for   // initializing EULERCONSTANT  static{  EULERCONSTANT = 2.3;  }    // constructor for initializing MINIMUM  // Note that if there are more than one  // constructor, you must initialize MINIMUM  // in them also  public GFG()   {  MINIMUM = -1;  }   }>


Nu a existat o metodă principală în codul de mai sus, deoarece a fost pur și simplu în scop ilustrativ pentru a obține o mai bună înțelegere pentru a trage concluzii:

Observația 1: Când să folosiți o variabilă finală?

Singura diferență dintre o variabilă normală și o variabilă finală este că putem reatribui valoarea unei variabile normale, dar nu putem modifica valoarea unei variabile finale odată ce a fost atribuită. Prin urmare, variabilele finale trebuie folosite numai pentru valorile pe care dorim să rămână constante pe toată durata execuției programului.

Observația 2: Variabila finală de referință.

Când o variabilă finală este o referință la un obiect, atunci această variabilă finală se numește variabila finală de referință . De exemplu, o finală StringBuffer variabila arată definită mai jos după cum urmează:

final StringBuffer sb;>

După cum știm cu toții, o variabilă finală nu poate fi reatribuită. Dar în cazul unei variabile finale de referință, starea internă a obiectului indicat de acea variabilă de referință poate fi modificată. Rețineți că aceasta nu este reatribuire.

Această proprietate a final se numește non-tranzitivitate . Pentru a înțelege ce se înțelege prin starea internă a obiectului, așa cum se arată în exemplul de mai jos, după cum urmează:

Exemplul 1:

Java
// Java Program to demonstrate // Reference of Final Variable // Main class class GFG {  // Main driver method  public static void main(String[] args)  {  // Creating an object of StringBuilder class  // Final reference variable  final StringBuilder sb = new StringBuilder('Geeks');  // Printing the element in StringBuilder object  System.out.println(sb);  // changing internal state of object reference by  // final reference variable sb  sb.append('ForGeeks');  // Again printing the element in StringBuilder  // object after appending above element in it  System.out.println(sb);  } }>

Ieșire
Geeks GeeksForGeeks>

The non-tranzitivitate proprietatea se aplică și matricelor, deoarece matrice sunt obiecte în Java. Matrice cu cuvânt cheie final mai sunt numite tablouri finale .

Notă: După cum s-a discutat mai sus, o variabilă finală nu poate fi reatribuită, aceasta va genera o eroare de compilare.

Exemplul 2:

Java
// Java Program to Demonstrate Re-assigning // Final Variable will throw Compile-time Error // Main class class GFG {  // Declaring and customly initializing  // static final variable  static final int CAPACITY = 4;  // Main driver method  public static void main(String args[])  {  // Re-assigning final variable  // will throw compile-time error  CAPACITY = 5;  } }>

Ieșire:

Eroare finală în timpul compilării la aruncarea variabilei

Tine minte: Când o variabilă finală este creată în interiorul unei metode/constructor/bloc, se numește variabilă finală locală și trebuie să se inițialeze o dată acolo unde este creată. Vezi mai jos programul pentru variabila finală locală.

Exemplu:

Java
// Java program to demonstrate // local final variable // Main class class GFG {  // Main driver method  public static void main(String args[])  {  // Declaring local final variable  final int i;  // Now initializing it with integer value  i = 20;  // Printing the value on console  System.out.println(i);  } }>

Ieșire
20>

Amintiți-vă aceste puncte cheie așa cum sunt percepute înainte de a merge mai departe, după cum urmează, după cum urmează:

  1. Observați diferența dintre C++ const variabile și Java final variabile. variabilele const în C++ trebuie să fie atribuită o valoare atunci când este declarată . Pentru variabilele finale în Java, este nu este necesar după cum vedem în exemplele de mai sus. O variabilă finală poate fi atribuită valoare mai târziu, dar o singură dată.
  2. final cu bucla foreach : final cu pentru fiecare declarație este o declarație legală.

Exemplu:

Java
// Java Program to demonstrate Final // with for-each Statement // Main class class GFG {  // Main driver method  public static void main(String[] args)  {  // Declaring and initializing  // custom integer array  int arr[] = { 1, 2, 3 };  // final with for-each statement  // legal statement  for (final int i : arr)  System.out.print(i + ' ');  } }>

Ieșire
1 2 3>

Explicația rezultatului: Din momentul în care i variabila iese din sfera de aplicare cu fiecare iterație a buclei, este re-declarată fiecare iterație, permițând ca același simbol (i) să fie utilizat pentru a reprezenta mai multe variabile.

Exemplu:

Java
public class Example {  public static void main(String[] args) {  final int VALUE = 10; // declaring a final variable    System.out.println('The value is: ' + VALUE);  // VALUE = 20; // uncommenting this line will cause a compiler error  // System.out.println('The new value is: ' + VALUE);    final String MESSAGE = 'Hello, world!'; // declaring a final variable  System.out.println(MESSAGE);    MyClass myObj = new MyClass();  myObj.printMessage();  myObj.printFinalMessage();    // MyOtherClass extends MyClass {} // uncommenting this line will cause a compiler error  } } class MyClass {  final String message = 'Hello!'; // declaring a final instance variable    void printMessage() {  System.out.println(message);  }    void printFinalMessage() {  final String finalMessage = 'Hello, final!';  System.out.println(finalMessage);  } } final class MyOtherClass { // declaring a final class  // ... }>

Ieșire
The value is: 10 Hello, world! Hello! Hello, final!>

Clase finale Java

Când o clasă este declarată cu final cuvânt cheie în Java, se numește a clasa finală . O clasă finală nu poate fi extins (moștenit) .

Există două utilizări ale unei clase finale:

Utilizare 1: Una este cu siguranță să previi moştenire , deoarece cursurile finale nu pot fi prelungite. De exemplu, toate Clasele Wrapper ca Întreg , Pluti , etc sunt clase finale. Nu le putem extinde.

final class A {  // methods and fields }   // The following class is illegal  class B extends A  {   // COMPILE-ERROR! Can't subclass A }>

Utilizare 2: Cealaltă utilizare a lui final cu clase este să creează o clasă imuabilă precum cele predefinite Şir clasă. Nu se poate face o clasă imuabilă fără a o face finală.

Metoda finală Java

Când o metodă este declarată cu final cuvânt cheie, se numește a metoda finala în Java. O metodă finală nu poate fi depășit .

The Obiect clasa face acest lucru – o serie de metode sunt finale. Trebuie să declarăm metode cu cuvântul cheie final pentru care ni se cere să urmăm aceeași implementare în toate clasele derivate.

Ilustrare: Cuvânt cheie final cu o metodă

class A  {  final void m1()   {  System.out.println('This is a final method.');  } } class B extends A  {  void m1()  {     // Compile-error! We can not override   System.out.println('Illegal!');  } }>

Avantajele cuvântului cheie final în Java:

Cuvântul cheie final în Java oferă mai multe avantaje, inclusiv:

  • Asigurarea imuabilității: Când o variabilă sau o referință este marcată ca finală, valoarea acesteia nu poate fi modificată odată ce este atribuită. Acest lucru vă ajută să vă asigurați că datele sunt imuabile și nu pot fi modificate accidental sau rău intenționat.
  • Îmbunătățirea performanței : Utilizarea finalului poate ajuta uneori la îmbunătățirea performanței, deoarece Java Virtual Machine (JVM) poate optimiza codul mai eficient atunci când știe că anumite valori sau referințe nu pot fi modificate.
  • Faceți codul mai ușor de înțeles: Prin declararea variabilelor, metodelor sau claselor ca fiind finale, dezvoltatorii își pot face codul mai ușor de înțeles și de raționat. Când o valoare sau o referință este marcată ca finală, este clar că nu se va schimba, ceea ce poate simplifica analiza și depanarea codului.
  • Promovarea reutilizarii codului: Prin declararea metodelor ca fiind finale, dezvoltatorii pot împiedica subclasele să le suprascrie. Acest lucru poate ajuta la promovarea reutilizarii codului și la reducerea dublării, deoarece subclasele trebuie să utilizeze implementarea metodei de către clasa părinte.
  • Creșterea securității: Utilizarea final poate contribui la îmbunătățirea securității, împiedicând codul rău intenționat să modifice datele sau comportamentul sensibil.

În general, cuvântul cheie final este un instrument util pentru îmbunătățirea calității codului și pentru a se asigura că anumite aspecte ale unui program nu pot fi modificate. Prin declararea variabilelor, metodelor și claselor ca fiind finale, dezvoltatorii pot scrie cod mai sigur, mai robust și mai ușor de întreținut.

Pentru mai multe exemple și comportament al metodelor finale și claselor finale , te rog vezi Utilizarea finală cu moștenire. Vă rugăm să vedeți abstract în java articol pentru diferențele dintre final si abstract .

Întrebare legată de interviu (Important): Diferența dintre final, final, și finalize în Java

fereastra.deschis

Concluzie

Cuvântul cheie final în Java este o metodă de a crea variabile, metode sau clase restricționate de utilizator. În acest tutorial, acoperim în detaliu cuvântul cheie final al Java și înțelegem toate contextele acestuia.

Contextele sunt explicate cu programe Java în exemple, oferind o înțelegere completă a subiectului.

Cuvânt cheie final Java – Întrebări frecvente

Ce este o metodă finală în Java?

O metodă finală în Java este o metodă declarată cu cuvânt cheie final , ceea ce înseamnă că implementarea sa nu poate fi înlocuită de subclase.

Metoda finală se moștenește?

Nu, în Java o metodă finală nu poate fi moștenită de o subclasă. Aceasta înseamnă că o subclasă nu poate trece peste o metodă finală .

Care este cuvântul cheie final și cuvântul cheie static în Java?

Cuvânt cheie final: Este folosit pentru a declara variabile, metode sau clase ca nemodificabile.

Cuvânt cheie static: este folosit pentru a declara membrii clasei (variabile și metode) care aparțin clasei în sine, nu obiecte individuale.

Putem scrie cuvântul cheie final cu un șir în Java?

Da, puteți declara o variabilă cu cuvântul cheie final și îi puteți atribui un șir literal.