logo

Paraula clau final en Java

El mètode final en Java s'utilitza com a modificador sense accés aplicable només a a variable , a mètode , o a classe. S'acostuma a restringir un usuari en Java .

Les següents són diferents contextos on s'utilitza el final:

  1. Variable
  2. Mètode
  3. Classe



Característiques de la paraula clau final en Java:

A Java, la paraula clau final s'utilitza per indicar que una variable, mètode o classe no es pot modificar ni ampliar. Aquestes són algunes de les seves característiques:

  • Variables finals: Quan una variable es declara com a final, el seu valor no es pot canviar un cop s'ha inicialitzat. Això és útil per declarar constants o altres valors que no s'han de modificar.
  • Mètodes finals : Quan un mètode es declara com a final, no pot ser anul·lat per una subclasse. Això és útil per als mètodes que formen part de l'API pública d'una classe i no haurien de ser modificats per subclasses.
  • Classes finals: Quan una classe es declara definitiva, no es pot ampliar per una subclasse. Això és útil per a les classes que es volen utilitzar tal com són i que no s'han de modificar ni ampliar.
  • Inicialització: Les variables finals s'han d'inicialitzar en el moment de la declaració o en el constructor de la classe. Això assegura que el valor de la variable està establert i no es pot canviar.
  • Rendiment: L'ús d'una final de vegades pot millorar el rendiment, ja que el compilador pot optimitzar el codi de manera més eficaç quan sap que una variable o mètode no es pot canviar.
  • Seguretat: El final pot ajudar a millorar la seguretat evitant que el codi maliciós modifiqui dades o comportaments sensibles.

En general, la paraula clau final és una eina útil per millorar la qualitat del codi i garantir que determinats aspectes d'un programa no es puguin modificar ni ampliar. En declarar variables, mètodes i classes com a finals, els desenvolupadors poden escriure un codi més segur, robust i que es pugui mantenir.

Variable final de Java

Quan es declara una variable amb el paraula clau final , la seva el valor no es pot canviar , essencialment, a constant . Això també vol dir que tu cal inicialitzar una variable final .

Si la variable final és a referència , això vol dir que la variable no pot ser relligat a la referència un altre objecte, però l'estat intern de l'objecte apuntat per aquesta variable de referència es pot canviar, és a dir, podeu afegir o eliminar elements de la matriu final o recollida final.

És una bona pràctica representar les variables finals en majúscules, utilitzant el guió baix per separar les paraules.

Exemple:

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

Sortida
Value of PI: 3.14159>

Sortida:

  Value of PI: 3.14159>

Diferents mètodes d'ús de la variable final

Vegem diferents mètodes que podem utilitzar la variable final a Java.

1. Variable final

Exemple:

// Final variable final int THRESHOLD = 5;>

2. Variable final en blanc

Exemple:

// Blank final variable final int THRESHOLD;>

3. Variable final estàtica

Exemple:

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

4. Variable final en blanc estàtic

Exemple:

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

Inicialització d'una variable final

Hem d'inicialitzar una variable final, en cas contrari, el compilador llançarà un error en temps de compilació. Una variable final només es pot inicialitzar una vegada, ja sigui mitjançant un inicialitzador o una declaració d'assignació. Hi ha tres maneres d'iniciar una variable final:

on trobo la configuració del meu navegador
  1. Podeu inicialitzar una variable final quan es declari. Aquest enfocament és el més comú. Una variable final s'anomena a variable final en blanc si és no inicialitzat mentre es declara. A continuació es mostren les dues maneres d'inicialitzar una variable final en blanc.
  2. Una variable final en blanc es pot inicialitzar dins d'un bloc d'inicialització d'instància o el constructor. Si teniu més d'un constructor a la vostra classe, s'ha d'inicialitzar en tots, en cas contrari, es generarà un error en temps de compilació.
  3. Una variable estàtica final en blanc es pot inicialitzar dins de a bloc estàtic .

Vegem aquestes dues maneres diferents d'inicialitzar una variable final

Exemple:

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


No hi havia cap mètode principal en el codi anterior, ja que només era amb finalitats il·lustratives per obtenir una millor comprensió per treure conclusions:

Observació 1: Quan utilitzar una variable final?

L'única diferència entre una variable normal i una variable final és que podem reassignar el valor a una variable normal però no podem canviar el valor d'una variable final un cop assignada. Per tant, les variables finals només s'han d'utilitzar per als valors que volem que es mantinguin constants durant l'execució del programa.

Observació 2: Variable final de referència.

Quan una variable final és una referència a un objecte, aquesta variable final s'anomena variable final de referència . Per exemple, una final StringBuffer La variable es defineix a continuació de la següent manera:

final StringBuffer sb;>

Com tots sabem, una variable final no es pot reassignar. Però en el cas d'una variable final de referència, es pot canviar l'estat intern de l'objecte apuntat per aquesta variable de referència. Tingueu en compte que això no és una reassignació.

Aquesta propietat de la final es diu no transitivitat . Per entendre què s'entén per l'estat intern de l'objecte, tal com es mostra a l'exemple següent de la següent manera:

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

Sortida
Geeks GeeksForGeeks>

El no transitivitat La propietat també s'aplica a les matrius, perquè matrius són objectes en Java. Arrays amb el paraula clau final també s'anomenen matrius finals .

Nota: Com s'ha comentat anteriorment, una variable final no es pot reassignar, fer-ho generarà un error en temps de compilació.

Exemple 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;  } }>

Sortida:

Error final en temps de compilació de llançament de variables

Recordeu: Quan es crea una variable final dins d'un mètode/constructor/bloc, s'anomena variable final local i s'ha d'inicialitzar un cop es crea. Vegeu a continuació el programa per a la variable final local.

Exemple:

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

Sortida
20>

Recordeu aquests punts clau tal com s'han percebut abans de seguir endavant, tal com s'enumeren a continuació de la següent manera:

  1. Tingueu en compte la diferència entre C++ const variables i Java final les variables. les variables const en C++ han de ser assignat un valor quan es declara . Per a les variables finals a Java, ho és innecessari com veiem en els exemples anteriors. Es pot assignar valor a una variable final més tard, però només una vegada.
  2. final amb bucle foreach : final amb per a cada declaració és una declaració legal.

Exemple:

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 + ' ');  } }>

Sortida
1 2 3>

Explicació de la sortida: Des del i La variable surt de l'abast amb cada iteració del bucle, es torna a declarar cada iteració, permetent que el mateix testimoni (i) s'utilitzi per representar múltiples variables.

Exemple:

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  // ... }>

Sortida
The value is: 10 Hello, world! Hello! Hello, final!>

Classes finals de Java

Quan es declara una classe amb el final paraula clau en Java, s'anomena a classe final . Una classe final no pot ser estès (heretat) .

Hi ha dos usos d'una classe final:

Ús 1: Un és, sens dubte, prevenir herència , ja que les classes finals no es poden ampliar. Per exemple, tots Classes d'embolcall M'agrada Enter , Flotar , etc. són classes finals. No els podem ampliar.

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

Ús 2: L'altre ús de final amb classes és to crear una classe immutable com el predefinit Corda classe. No es pot fer una classe immutable sense fer-la definitiva.

Mètode final de Java

Quan es declara un mètode amb final paraula clau, s'anomena a mètode final en Java. Un mètode final no pot ser anul·lat .

El Objecte la classe fa això: alguns dels seus mètodes són finals. Hem de declarar mètodes amb la paraula clau final per als quals hem de seguir la mateixa implementació en totes les classes derivades.

Carpeta de canvi de nom de Linux

Il·lustració: Paraula clau final amb un mètode

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!');  } }>

Avantatges de la paraula clau final a Java:

La paraula clau final a Java ofereix diversos avantatges, entre els quals:

  • Garantir la immutabilitat: Quan una variable o referència es marca com a final, el seu valor no es pot canviar un cop s'ha assignat. Això ajuda a garantir que les dades siguin immutables i que no es puguin modificar de manera accidental o malintencionada.
  • Millora del rendiment : L'ús del final de vegades pot ajudar a millorar el rendiment, ja que la màquina virtual Java (JVM) pot optimitzar el codi de manera més eficaç quan sap que determinats valors o referències no es poden canviar.
  • Per facilitar la comprensió del codi: En declarar variables, mètodes o classes com a finals, els desenvolupadors poden fer que el seu codi sigui més fàcil d'entendre i de raonar. Quan un valor o referència es marca com a final, és evident que no canviarà, cosa que pot simplificar l'anàlisi i la depuració del codi.
  • Promoció de la reutilització del codi: En declarar els mètodes com a finals, els desenvolupadors poden evitar que les subclasses els anul·lin. Això pot ajudar a promoure la reutilització del codi i reduir la duplicació, ja que les subclasses han d'utilitzar la implementació del mètode de la classe pare.
  • Millora de la seguretat: L'ús de final pot ajudar a millorar la seguretat evitant que el codi maliciós modifiqui dades o comportaments sensibles.

En general, la paraula clau final és una eina útil per millorar la qualitat del codi i garantir que determinats aspectes d'un programa no es puguin modificar. En declarar variables, mètodes i classes com a finals, els desenvolupadors poden escriure un codi més segur, robust i que es pugui mantenir.

Per a més exemples i comportament dels mètodes finals i classes finals , siusplau mira Ús final amb herència. Si us plau, mireu el abstracte en java article per a les diferències entre els final i la abstracte .

Pregunta d'entrevista relacionada (Important): Diferència entre final, finalment, i finalize en Java

Conclusió

La paraula clau final en Java és un mètode per crear variables, mètodes o classes restringits per l'usuari. En aquest tutorial, cobrim detalladament la paraula clau final de Java i entenem tots els seus contextos.

Els contextos s'expliquen amb programes Java en exemples, proporcionant una comprensió completa del tema.

Paraula clau final de Java - Preguntes freqüents

Què és un mètode final a Java?

Un mètode final a Java és un mètode declarat amb el paraula clau final , el que significa que la seva implementació no pot ser anul·lada per subclasses.

S'hereta el mètode final?

No, a Java un mètode final no pot ser heretat per una subclasse. Això vol dir que una subclasse no pot anul·lar un mètode final .

Quina és la paraula clau final i la paraula clau estàtica a Java?

Paraula clau final: S'utilitza per declarar variables, mètodes o classes com a no modificables.

Paraula clau estàtica: s'utilitza per declarar membres de classe (variables i mètodes) que pertanyen a la mateixa classe, no objectes individuals.

Podem escriure la paraula clau final amb una cadena en Java?

Sí, podeu declarar una variable amb la paraula clau final i assignar-li un literal de cadena.