Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Final: Una palabra clave para constantes en Java, Apuntes de Ingeniería Infórmatica

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

Antes del 2010

Subido el 22/05/2007

_vivayo_
_vivayo_ 🇪🇸

3.7

(117)

149 documentos

1 / 2

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
La palabra clave final
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.
Con datos
Conseguiremos constantes, que podemos usar por dos razones:
1. puede ser una constante en tiempo de compilación que nunca va a cambiar
2. puede ser un valor inicializado en tiempo de ejecución que no queremos que
cambie.
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();
pf2

Vista previa parcial del texto

¡Descarga Final: Una palabra clave para constantes en Java y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

La palabra clave final

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.

Con datos

Conseguiremos constantes, que podemos usar por dos razones:

  1. (^) puede ser una constante en tiempo de compilación que nunca va a cambiar
  2. puede ser un valor inicializado en tiempo de ejecución que no queremos que cambie.

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"); } } ///:~

  • i1 y VAL_TWO son primitivas final con valores en tiempo de compilación
  • VAL_THREE es la constante pública típica
  • i4 e i5 se inicializan en tiempo de ejecución. Se diferencian en que i5 es estática, por lo tanto tomará el mismo valor para todos los objetos de la clase.
  • De v1 a v4 son referencias a objetos

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.

Métodos 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.

Clases final

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)

Cuidado con final