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: -
- Variável: declarar uma variável como final restringe sua modificação para se referir a qualquer outro valor ou referência.
- Métodos: declarar um método como final restringe a substituição desse método nas classes filho.
- 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
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: -
- 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
)
- 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 -
- Tipos e modificadores usados para JComponent em Java
- Novos recursos do Java 8
- Como criar um objeto em JavaScript?
- O que é declaração de caso em JavaScript?
- Jogue vs Joga | As 5 principais diferenças que você deve saber
- Declarando classe abstrata em C # com exemplo
- Usos e exemplos desta palavra-chave