

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
La palabra clave 'final' en java tiene diferentes significados según el contexto, pero en general significa 'esto no se puede cambiar'. Se puede tomar esta decisión por motivos de diseño o eficiencia. La palabra final se puede aplicar a datos, métodos y clases. Con datos, se puede obtener constantes que podemos usar por dos razones: una constante en tiempo de compilación que nunca va a cambiar o un valor inicializado en tiempo de ejecución que no queremos que cambie. En este documento, se explica el efecto de final en campos, métodos y clases en java.
Tipo: Apuntes
1 / 2
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!


Tiene diferentes significados dependiendo del contexto, pero en general significa “esto no se puede cambiar”. Se puede tomar esta decisión por dos motivos: diseño o eficiencia.
La palabra final se puede usar para datos, métodos y clases.
Conseguiremos constantes, que podemos usar por dos razones:
En el caso de que sea una constante en tiempo de compilación, la constante será de un tipo primitivo y usaremos la palabra final. En el momento que la definimos le tenemos que asignar un valor. En este caso el compilador puede cambiar el nombre de la constante por su valor.
Cuando usamos final con referencias a objetos en lugar de con primitivos, lo que se hace constante es la referencia. Una vez que se inicializa un objeto, no podemos cambiarlo para que apunte a otro. De todas formas el objeto en sí, sí que puede ser cambiado. Java no tiene ninguna forma de hacer un objeto constante. Esto es válido también para arrays (que son objetos)
//: c06:FinalData.java // From 'Thinking in Java, 2nd ed.' by Bruce Eckel // www.BruceEckel.com. See copyright notice in CopyRight.txt. // The effect of final on fields.
class Value { int i = 1; }
public class FinalData { // Can be compile-time constants final int i1 = 9; static final int VAL_TWO = 99; // Typical public constant: public static final int VAL_THREE = 39; // Cannot be compile-time constants: final int i4 = (int)(Math.random()20); static final int i5 = (int)(Math.random()20);
Value v1 = new Value(); final Value v2 = new Value(); static final Value v3 = new Value(); // Arrays: final int[] a = { 1, 2, 3, 4, 5, 6 };
public void print(String id) { System.out.println( id + ": " + "i4 = " + i4 + ", i5 = " + i5); } public static void main(String[] args) { FinalData fd1 = new FinalData();
//! fd1.i1++; // Error: can't change value fd1.v2.i++; // Object isn't constant! fd1.v1 = new Value(); // OK -- not final for(int i = 0; i < fd1.a.length; i++) fd1.a[i]++; // Object isn't constant! //! fd1.v2 = new Value(); // Error: Can't //! fd1.v3 = new Value(); // change reference //! fd1.a = new int[3];
fd1.print("fd1"); System.out.println("Creating new FinalData"); FinalData fd2 = new FinalData(); fd1.print("fd1"); fd2.print("fd2"); } } ///:~
Tener en cuenta también el tema de convenciones para las constantes. Se ponen en mayúsculas las constantes con valores en tiempo de compilación.
Final en blanco. Se deben inicializar antes de usarse. En el constructor.
Argumentos final.
Prohíbe que cualquier clase que herede de esta pueda redefinir este método. Motivos de diseño.
Por motivos de eficiencia también. Si el método es final el compilador podría elegir insertar el código en lugar de una llamada al método…
Todos los métodos privados son implícitamente final. Sólo se puede sobrescribir algo que forma parte de la interfaz de la superclase.
No permite que ninguna clase herede de ésta. En una clase final, todos los métodos son final implícitamente (se puede o no poner explícitamente, da lo mismo)