1. Modificación final
Las clases modificadas por final no se pueden heredar, por lo que los métodos miembros de la clase final no pueden sobrescribirse, y las clases modificadas por las palabras clave finales no tienen subclases, por lo que los detalles de implementación de la clase no se pueden cambiar y no se pueden ampliar. Todos los métodos miembros en la clase final se especificarán implícitamente como métodos finales, y las variables miembros en la clase final se pueden establecer en final según sea necesario.
2. Método de modificación final
Si la palabra clave final modifica un método en una clase, su subclase no puede sobrescribir el método y solo puede ser heredado por la subclase. Si un método en la clase principal no quiere ser sobrescribida por su subclase, el método se puede definir como el tipo final. Además, el método privado en la clase principal (es decir, el método modificado por la palabra clave privada) no se permite sobrescribir la subclase. Por lo tanto, el método modificado por la palabra clave privada en la clase principal es predeterminado al tipo final. El método modificado por la palabra clave final tiene las siguientes características:
Este método está bloqueado, evitando que cualquier clase de herencia modifique su significado e implementación;
Eficiente. Cuando el compilador se encuentra con el método final, ingresará al mecanismo integrado, mejorando en gran medida la eficiencia de ejecución;
Además, los métodos estáticos que usan la modificación final no pueden ocultarse en las subclases de su clase a la que pertenecen;
3. Variables de modificación final
El significado de la palabra clave final es "esto es insustituible" o "estado final";
Entonces, ¿por qué detener el cambio?
El inventor del idioma Java puede evitar cambios debido a dos propósitos:
A. Problemas de eficiencia:
Ciertos métodos de ciertas clases en JDK no pueden ser sobrescribidos por los usuarios. El diseñador puede pensar que el método utilizado es el mejor método.
Si el usuario lo cubre en privado o lo cubre debido a negligencia, afectará las capacidades del sistema del JVM o el sistema;
B. Requisitos de diseño:
Como todos sabemos, algunos casos deben usar palabras clave finales, como el paso de parámetros de clases internas anónimas en el método.
Algunas personas dicen que las variables finales son inmutables después de la asignación.
Entonces, ¿qué significa exactamente este Unchange?
Este invariante se refiere a una referencia, una dirección y el contenido del objeto referenciado aún es mutable.
Es decir, esta variable final siempre apunta a un objeto, es un puntero constante, no un puntero a una constante.
(1) El tipo de datos básicos modificado por la palabra clave final no se puede cambiar una vez que se inicializa;
(2) Si se trata de una variable de tipo de referencia, no se puede permitir que apunte a otro objeto después de inicializarlo, pero el contenido del objeto apuntado por la referencia puede cambiar. El motivo es: la dirección del objeto de referencia almacenado en la memoria del montón del tipo de datos de referencia. Después de que la final modifica el tipo de referencia, no se puede cambiar el espacio de memoria de HeAP señalado por la referencia (o la dirección de memoria del montón almacenada en la referencia).
Cuando se usa Final para modificar una variable miembro no estática de una clase, hay dos formas de inicializar las variables de los miembros:
(3) Inicializar durante la Declaración (4) Inicializar al declarar una variable. La variable se llama en blanco final, es decir, en blanco final, pero el valor inicial debe asignarse a esta variable en todos los constructores de la clase donde se encuentra la variable.
Al usar Final para modificar la variable de miembro estático de una clase, hay dos formas de inicializar la variable de miembro estático:
(5) Inicializar al declarar (6) inicializarse en el bloque de inicialización estática Al modificar las variables estáticas finales de la interfaz, solo hay una forma de inicializar:
(7) Inicializar al declarar. Al usar Final para modificar las variables de los miembros locales, solo debe asegurarse de que la asignación se inicialice antes de su uso.
En resumen, las variables modificadas por la palabra clave final no se pueden inicializar cuando se declaran, pero debe asegurarse de que la variable se inicialice antes de su uso. Una vez inicializado y asignado, no se puede reasignar. Intente analizar los resultados de salida del programa:
Prueba de clase pública {public static void main (string [] args) {String a = "hello2"; cadena final b = "hola"; Cadena d = "hola"; Cadena C = B + 2; Cadena e = d + 2; System.out.println ((a == c)); System.out.println ((a == e)); }} 4. Parámetros de modificación final
Cuando el parámetro del método es el tipo final, puede leer y usar este parámetro, pero no puede cambiar el valor del parámetro. Esta variable se crea cuando se llama al método y se inicializa al valor del parámetro correspondiente. Su valor no se puede cambiar antes de ejecutar el cuerpo del método. No se puede cambiar el valor del parámetro del tipo de datos básico modificado con la palabra clave final. El tipo de datos de referencia modificado con la palabra clave final no puede ser la referencia que apunta a otro objeto o asignando un valor a NULL nuevamente, pero el contenido del objeto de referencia se puede cambiar utilizando esta referencia. El propósito de Final para modificar los parámetros no es evitar que la operación del parámetro cambie el valor de la variable correspondiente fuera del método dentro del método llamado, sino para evitar la operación de reasignación del parámetro dentro del método, afectando el valor inicial cuando se pasa el parámetro. Además, la modificación de los parámetros en el método con la palabra clave final no puede evitar el contenido del valor del parámetro que se pasa desde fuera del método que se cambia. Para obtener más detalles, consulte la explicación del tipo de datos de referencia de modificación final.