modificador final:
Las variables miembro modificadas finales deben tener un valor inicial especificado explícitamente por el programador.
Campo de una clase: El valor inicial debe especificarse en un bloque de inicialización estático o al declarar el Campo.
Campo de instancia: el campo debe declararse en un bloque de inicialización no estático o el valor inicial debe especificarse en el constructor.
Variables locales finales: deben ser inicializadas explícitamente por el programador.
¿Cuál es la diferencia entre las variables básicas modificadas finales y las variables de tipo de referencia?
Variables básicas modificadas por final: Las variables básicas no se pueden reasignar.
Variable de referencia modificada final: Solo se garantiza que la dirección a la que hace referencia este tipo de referencia no cambiará, es decir, siempre hace referencia al mismo objeto, pero este objeto puede cambiar por completo.
Copie el código de código de la siguiente manera:
/**
*/
importar java.util.*;
clase pública Demo5
{
principal vacío estático público (String [] argumentos)
{
final B b = nuevo B(22);
b.prueba();
// Cambia legalmente el valor, pero sigue apuntando a la misma referencia
b.setAge(20);
System.out.println(b.getAge());
// ilegal
// b = nulo;
b.prueba2();
}
}
/**
fianl modifica las variables miembro
*/
clase A
{
//legítimo
final int a = 10;
//Especifica el valor inicial en el constructor o bloque de inicialización
cadena final cadena;
final intc;
estática final doble d;
{
cadena = "hola";
//ilegal
// a = 100;
}
estático
{
d = 100;
}
// El constructor puede especificar valores iniciales para los campos no especificados en el bloque de inicialización
públicoA()
{
// ilegal
// cadena = "ddd";
c = 1000;
}
doble cambio públicoFinal()
{
// No puedes especificar un valor inicial para final en un método normal
// devuelve d = 1000,90;
devolver 0;
}
}
/**
fianl modifica objetos de matriz
*/
clase B
{
edad privada;
públicoB()
{
}
público B (int edad)
{
this.age = edad;
}
setAge público vacío (edad int)
{
this.age = edad;
}
público int getAge()
{
devolver esta.edad;
}
prueba de vacío público ()
{
final int[]arr={23,434,56,898};
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
arreglo[2] = 200;
System.out.println(Arrays.toString(arr));
//La siguiente reasignación de Arr es ilegal
// arr = nulo;
}
/**
Profundiza tu comprensión del final.
*/
prueba de vacío público2()
{
String str1 = "Futuro mejor";
// Referencia directa a "Better Future" en el grupo constante
String str2 = "Hermoso"+"Futuro";
//verdadero
System.out.println(str1 == str2);
Cadena s1 = "Hermosa";
Cadena s2 = "Futuro";
Cadena s3 = s1+s2;
//falso s1 s2 es solo una variable que no se puede determinar en tiempo de compilación
// Si desea determinarlo en tiempo de compilación, use final para modificar s1 s2
System.out.println(str1 == s3);
}
}
¿Saben algo sobre el modificador final en Java? Creo que se ha explicado claramente en los comentarios, así que no entraré en detalles aquí.