Inicio > Java, Programación > La palabra clave final (1)

La palabra clave final (1)

¡Que tal! desgraciadamente tengo abandonado este espacio por muchas razones que creo no tiene caso mencionar, pero hoy decidi agregar esta entrada donde pretendo mostrar lo que aprendi de este tema del libro que ando leyendo. Espero no decir cosas fuera de la realidad.

La palabra clave final

Se emplea final para impedir cambios tanto para elementos de datos, métodos y clases. Se puede querer evitar cambios debido a nuestro diseño o la búsqueda de eficiencia.

Datos final

En los datos se pueden tener constantes de tiempo de compilación (valor que definimos de antemano y nunca va a cambiar) y de tiempo de ejecución (valor calculado). Estos tipos de constantes deben ser de tipos primitivos que se definen con la palabra final al momento de definirlos, hacerlo implica indicar su valor. Si se antepone la palabra static a final lo que sucedería es que el valor constante existirá en un único espacio de almacenamiento que no se podrá cambiar.

Usar final en referencias a objetos hace que sean constantes las referencias no los objetos. No se podrá hacer que la referencia apunte a otro objeto, pero el objeto si podrá modificarse.Lo mismo sucede con las matrices pues también son objetos.

Un ejemplo que nos propone Bruce Eckel es el siguiente, donde se describe el comportamiento de los elementos de datos de una clase utilizando final y static:

 

//: reusing/FinalData.java
//Efecto de final sobre los campos.
import java.util.*;
import static access.net.mindview.util.Print.*;

class Value {
 int i; // Acceso de paquete
 public Value(int i) { this.i = i; }
}

public class FinalData {
 private static Random rand = new Random(47);
 private String id;
 public FinalData(String id) { this.id = id; }
 // Pueden ser constantes de compilación:
 private final int valueOne = 9;
 private static final int VALUE_TWO = 99;
 // Constante pública típica:
 public static final int VALUE_THREE = 39;
 // No pueden ser constantes de tiempo de compilación:
 private final int i4 = rand.nextInt(20);
 static final int INT_5 = rand.nextInt(20);
 private Value v1 = new Value(11);
 private final Value v2 = new Value(22);
 private static final Value VAL_3 = new Value(33);
 // Matrices:
 private final int[] a = { 1, 2, 3, 4, 5, 6 };
 public String toString() {
  return id + ": " + "i4 = " + i4 + ", INT_5 = " + INT_5 + " a[0] = " + a[0] ;
 }
 public static void main(String[] args) {
  FinalData fd1 = new FinalData("fd1");
  //! fd1.valueOne++; //Error: no se puede modificar el valor
  fd1.v2.i++; // EL objeto no es constante
  fd1.v1 = new Value(9); // Ok -- no es final
  for(int i = 0; i < fd1.a.length; i++)
   fd1.a[i]++; // ¡El objeto no es constante!
  //! fd1.v2 = new Value(0); // Error: no se puede cambiar la referencia
  //! fd1.VAL_3 = new Value(1);
  //! fd1.a = new int[3];
  print(fd1);
  print("Creating new FinalData");
  FinalData fd2 = new FinalData("fd2");
  print(fd1);
  print(fd2);
 }
}

Espero pronto agregar otros temas que vaya viendo, ¡hasta pronto!

Advertisement
Categorías:Java, Programación
  1. Aún no hay comentarios.
  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.