Variable de instancia: como todos sabemos, cuando el valor de la variable varía de un objeto a otro, ese tipo de variable se conoce como variable de instancia. La variable de instancia se declara dentro de una clase pero no dentro de ningún método, constructor, bloque, etc. Si no inicializamos una variable de instancia, JVM proporciona automáticamente el valor predeterminado de acuerdo con el tipo de datos de esa variable de instancia.
Pero si declaramos una variable de instancia como final , entonces debemos tener cuidado con el comportamiento de la variable de instancia.
- No existe ningún requisito como tal para que la variable sea definitiva. Sin embargo, cuando es cierto que tiene la intención explícita de no cambiar nunca la variable, a menudo es una buena práctica hacer que sea definitiva.
- Tenemos que usar la variable de instancia como final en la creación de la clase inmutable.
Puntos importantes sobre la variable de instancia final:
- Inicialización de la variable Obligatorio: si la variable de instancia se declara como final, entonces tenemos que realizar la inicialización explícitamente, ya sea que la estemos usando o no, y JVM no proporcionará ningún valor predeterminado para la variable de instancia final.
// Java program to illustrate the behavior
// of final instance variable
class
Test {
final
int
x;
public
static
void
main(String[] args)
{
Test t =
new
Test();
System.out.println(t.x);
}
}
Producción:
error: variable x not initialized in the default constructor
- Inicialización antes de la finalización del constructor: para la variable de instancia final, debemos realizar la inicialización antes de la finalización del constructor. Podemos inicializar una variable de instancia final en el momento de la declaración.
// Java program to illustrate that
// final instance variable
// should be declared at the
// time of declaration
class
Test {
final
int
x =
10
;
public
static
void
main(String[] args)
{
Test t =
new
Test();
System.out.println(t.x);
}
}
Producción:
10
- Inicializar dentro de un bloque no estático o de instancia: también podemos inicializar una variable de instancia final dentro de un bloque no estático o de instancia.
// Java program to illustrate
// that final instance variable
// can be initialize within instance block
class
Test {
final
int
x;
{
x =
10
;
}
public
static
void
main(String[] args)
{
Test t =
new
Test();
System.out.println(t.x);
}
}
Producción:
10
- Inicialización en el constructor predeterminado: dentro del constructor predeterminado también podemos inicializar una variable de instancia final.
// Java program to illustrate that
// final instance variable
// can be initialized
// in the default constructor
class
Test {
final
int
x;
Test()
{
x =
10
;
}
public
static
void
main(String[] args)
{
Test t =
new
Test();
System.out.println(t.x);
}
}
Producción:
10
Los mencionados anteriormente son los únicos lugares posibles para realizar la inicialización de la variable de instancia final. Si intentamos realizar la inicialización en cualquier otro lugar, obtendremos un error de tiempo de compilación.
// Java program to illustrate // that we cant declare // final instance variable // within any static blocks class Test { final int x; public static void main(String[] args) { x = 10; Test t = new Test(); System.out.println(t.x); } }
Producción:
error: non-static variable x cannot be referenced from a static context
// Java program to illustrate that we // cant declare or initialize // final instance variable within any methods class Test { final int x; public void m() { x = 10; } }
Producción:
error: cannot assign a value to final variable x
Este artículo es una contribución de Bishal Kumar Dubey . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA