Introdução à palavra-chave final em Java

Neste post, veremos as diferentes palavras-chave finais para java. É uma palavra-chave usada na linguagem java para aplicar restrições ao uso ou modificação por outras classes ou variáveis. Usando essa palavra-chave, diz-se ao intérprete para não permitir modificações futuras nessa variável ou método e tratá-lo como constante. Pode ser usado com 3 cenários abaixo: -

  1. Variável: declarar uma variável como final restringe sua modificação para se referir a qualquer outro valor ou referência.
  2. Métodos: declarar um método como final restringe a substituição desse método nas classes filho.
  3. Classes: declarar uma classe como final evita a herança dessa classe.

Recomenda-se sempre que essas palavras-chave sejam declaradas em letras maiúsculas de acordo com as boas práticas de codificação.

Sintaxe da palavra-chave final em Java

Esta palavra-chave pode ser usada abaixo de três maneiras: -

1. Variável

Variáveis ​​em java podem ser declaradas como variáveis ​​para restringir qualquer alteração em seus valores. Pode ser declarado de qualquer uma das três maneiras abaixo:

Sintaxe:

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

Nota: As variáveis ​​de referência também podem ser declaradas estáticas, de modo que não podem conter uma referência a outro objeto. Porém, devido à natureza interna do objeto, a referência pode ser alterada.

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

2. Métodos

O método declarado com a palavra-chave final é considerado o método final. O método final não pode ser substituído por sua classe filho, o que significa que o método da classe filho não pode alterar a definição do método final presente na classe pai. Quando queremos que a implementação de um método definido na classe pai deva ser seguida em todas as suas classes filho, devemos declarar esse método como final.

Sintaxe:

final int my1()(
//method defination
)

3. Classes

As palavras-chave finais também podem ser usadas com classes para torná-la uma classe final, o que significa que a classe específica não pode ser estendida ou herdada por nenhuma outra classe.

Sintaxe:

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

Como a palavra-chave final funciona em Java?

A palavra-chave final ajuda a restringir a substituição de classes, membros ou variáveis ​​durante a herança.

1. Variáveis ​​finais

Declarar uma variável como final significa restringir qualquer alteração ao valor da variável nas classes herdadas. Uma variável final pode ser inicializada apenas uma vez e deve ser usada como é, portanto, é necessário inicializar uma variável final. É usado principalmente com estático para criar uma variável de classe constante.

Por exemplo:

final int a =0;

Também podemos declarar variáveis ​​de referência finais também; nesse caso, uma variável de referência não pode se referir a objetos diferentes. Mas em java, o estado interno de um objeto pode ser alterado e está sendo referido pela variável de referência final. Assim, podemos fazer alterações no valor da variável de referência. É o mesmo que usar matrizes finais, como mostrado abaixo: -

Código:

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

Resultado:

Explicação

Aqui, a matriz a1 se refere ao mesmo objeto, apenas o valor desse objeto está mudando, porque todos sabemos que a variável da matriz contém apenas o endereço inicial da localização da memória em que esses elementos da matriz estão armazenados.

E da mesma forma, se tentarmos referenciar uma matriz diferente usando a mesma variável de matriz a1, um erro será gerado pelo compilador. Assim, usando a matriz final da palavra aqui significa que qualquer alteração pode ser feita no membro da matriz, mas a variável não pode se referir a nenhum outro objeto.

Coisas para lembrar

A inicialização de uma variável final é necessária para evitar erros em tempo de compilação. Há uma diferença entre as variáveis ​​const C ++ e essas variáveis ​​finais que as variáveis ​​const não precisam ser inicializadas. Existem três maneiras de inicializar uma variável final -

  • Inicializar no momento da declaração : Podemos declarar facilmente uma variável final no momento da declaração. Caso não seja inicializada, essa variável é considerada uma variável final em branco e uma das duas próximas maneiras pode nos ajudar a inicializar uma variável final em branco.
  • Usando o bloco inicializador de instância : dentro deste bloco ou do construtor, uma variável final em branco pode ser facilmente inicializada. Ao usar um construtor para inicializar, lembre-se de inicializar a variável específica em todos os construtores disponíveis.
  • Bloco estático: também é possível usar um bloco estático para inicializar a variável final em branco. O bloco estático é sempre acionado uma vez para cada classe, portanto, o valor da variável cujos valores não devem ser alterados pode ser facilmente inicializado usando esse bloco.

Assim, a palavra-chave final é usada apenas para as variáveis ​​que não precisam alterar seu valor durante a execução do programa. Todas as variáveis ​​finais criadas dentro de um método ou bloco devem ser inicializadas lá. Tais variáveis ​​de tipo são conhecidas como variáveis ​​finais locais.

Explicação

No exemplo abaixo, uma variável i foi declarada na função principal e inicializada também, portanto, é considerada uma variável local final.

Código:

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

Resultado:

2. Métodos finais

Um método declarado como final não pode ser substituído em nenhuma das subclasses, assim chamado como método final. O método precisa ser declarado como final se exigirmos que a mesma implementação da classe seja seguida pelas classes filho.

Nota- Não é necessário que os métodos finais sejam declarados no estágio inicial da herança (classe base). O método pode ser declarado final em qualquer subclasse em que desejamos que outras subclasses sigam a mesma definição.

Código:

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. Aulas Finais

Classes declaradas como finais não podem ser herdadas por nenhuma outra classe. Mencionar uma palavra-chave final antes do nome da classe informa ao compilador que a definição dessa classe só pode ser usada como está. Nenhuma outra classe pode adicionar suas especificações a essa definição ou reutilizar seu código. Caso se tente estender a classe final, um erro será gerado pelo compilador indicando que essa classe não deve ser estendida. Pode-se usar palavras-chave finais em java em qualquer um abaixo de 2 finalidades: -

  1. O primeiro é impedir a herança dessa classe. Por exemplo, todas as classes Wrapper presentes no pacote java.lang são classes finais, portanto não podemos estendê-las em nossas classes, mas podemos usá-lo declarando seus objetos. Qualquer tentativa feita para acessar essas classes resultará em um erro do compilador.

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

  1. O segundo uso de final com classes é quando é necessário criar uma classe imutável, ou seja, uma vez que o objeto da classe é criado, não podemos alterar seu conteúdo como a classe String predefinida. A classe deve ser declarada como final para torná-la imutável.

Nota :

  • Se uma classe é declarada como final, suas variáveis ​​e funções de membro também são consideradas finais pelo compilador.
  • Uma classe não pode ser declarada abstrata onde depende das classes filhas para concluir sua definição e final, o que impede a própria herança.

Exemplos de palavra-chave final em Java

Abaixo está o exemplo diferente da palavra-chave final em Java:

1. Usando Variável Final

No exemplo abaixo, variáveis ​​diferentes são inicializadas usando vários métodos. Por exemplo - a variável SECOND é inicializada usando o construtor, enquanto THIRD é inicializada usando um inicializador.

Código:

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

Resultado:

2. Usando métodos finais

No exemplo abaixo, a classe abstrata myShape declara os métodos finais getWidth e obtém oito que não precisam ser substituídos pelas classes herdadas. Ele também declara uma função abstrata cuja implementação é obrigatória nas classes subseqüentes. Assim, a única definição de uma função abstrata é implementada em uma primeira classe filho e na segunda classe filho.

Código:

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

Resultado:

3. Usando Classes Finais

No programa abaixo, estamos usando uma classe final Solid que define um método para calcular o volume de uma forma usando suas dimensões, mas a exibição do volume de uma caixa é feita usando a função printVol na classe herdada. Shape As Solid é uma classe final, portanto, a classe Shape não poderá estendê-la (ou herdá-la). Assim, ele usa o objeto de Shape para calcular o volume de qualquer um de Shape apenas passando os argumentos para as funções.

Código:

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

Resultado:

Conclusão

A palavra-chave final é usada para impedir que as classes, variáveis ​​e métodos sejam substituídos por suas classes filho. Também pode ser usado para tornar imutáveis ​​as classes que estão restringindo a alteração no valor de seus objetos. A verificação final da palavra-chave é sempre verificada apenas no tempo de compilação. É uma grande utilidade para impedir a reutilização das variáveis ​​definidas, lógica e classes.

Artigos recomendados

Este é um guia para o exemplo da Palavra-chave Final em Java. Aqui discutimos como a palavra-chave final funciona em java? que inclui variáveis ​​finais, métodos finais, classes finais e sintaxe. Você também pode consultar os seguintes artigos para saber mais -

  1. Tipos e modificadores usados ​​para JComponent em Java
  2. Novos recursos do Java 8
  3. Como criar um objeto em JavaScript?
  4. O que é declaração de caso em JavaScript?
  5. Jogue vs Joga | As 5 principais diferenças que você deve saber
  6. Declarando classe abstrata em C # com exemplo
  7. Usos e exemplos desta palavra-chave