34. Java: final, static, constantes, colecciones
El modificador "final"
La palabra clave "final" se puede aplicar en:- variables
- métodos
- clases
Ejemplo:
Añadir final a un atributo es un mecanismo de prevención.
2. Métodos : cuando aplicamos "final" a un método, quiere decir que el método no podrá se redefinido en clases derivadas. Ejemplo:
El anterior código da error al compilar. Razon: tenemos una clase llamada "Bike" que implementa un método final ("run()"), y una clase "Honda" que deriva de "Bike" y que está intentado implementar ese método "final".
3. Clases: cuando aplicamos "final" a clases, quiere decir que la clase no podrá ser derivada.
En anterior código dar error de compilación. Razón: estamos intentando crear una clase "Honda1" que deriva de una clase final "Bike".
El módificador "static"
Si añadimos "static" a una variable o un método en una clase, se puede acceder a este sin declarar un objeto de dicha clase. Es decir, podemos usarlos sin instanciación previa de la clase que los contiene.En este caso se dice que la variable/método no pertenece a un objeto, sino a la propia clase donde está declarado.
Ejem:
En esta clase anterior, se ha declarado un método "static" que podrá ser llamado sin necesidad de crear un objeto lugar. Para llamarlo escribimos lo siguiente:
Principal.main();
Como se puede apreciar estamos llamando al método main() directamente desde la clase, es decir "Principal" no es un "objeto" sino una referencia la clase "Principal".
Otro ejemplo: "parseInt()" es un método "static" que incluye Java en su clase "Integer". Dicho método, recupera el valor númerico de una cadena de caracteres.
//devuelve el valor "243" en forma de entero
int a = Integer.parseInt("243");
Igual que antes, "Integer" no es un objeto, sino un a referencia a la clase "Integer" de Java.
Las clases de Java tienen otros muchos métodos "static" como "parseInt()" que pueden ser llamados sin instanciar la clase donde están definidos.
Las variables también pueden ser declaradas "static":
Para acceder a dicha variable, podemos escribir esto:
int a = JavaExample.var1; //la variable "a" valdrá 77.
Crearemos una variable "static" cuando queramos que en todos los objetos que estén instanciados o los que ser vayan a instanciar a continuación dicha variable tenga el mismo valor.
Nada mejor que un "BUEN" ejemplo para entender que provoca el modificador "static": imaginemos un aplicación informática que simula el comportamiento de varios péndulos a la vez. Para crear dicha aplicación, crearemos una clase "Pendulo".
class Pendulo {
...
}
Quizas no sea necesaria, si puede haber una interfaz gráfica que muestre el comportamiento de los pendulos, podría ser esta:
Dado que el movimiento de un péndulo depende del valor de fuerza de la gravedad, nuestra aplicación deberá de ofrecer la posibilidad de modificar dicho valor para todos los objetos "Pendulo" que se hayan creado hasta ese momento en el programa. Por tanto, la clase "Pendulo" deberá de contener un atributo "aceleraciónGravitacional", que sea común a todos, de manera que cuando se modifique dicho valor, se modifique en todos los objetos "Pendulo".
class Pendulo {
static float aceleraciónGravitacional = 9.8;
...
}
Otro ejemplo: todos conocemos el juego PacMan. Veamos que ocurre cuando PacMan se come una bolita grande:
https://www.youtube.com/watch?v=ce35SWOscOY
class Fantasma {
boolean comible = false;
}
Como vemos, durante la partida todos los fantasmas tienen siempre el mismo valor del atributo "comible". Cuando empieza la partida, el valor es "false", pero cuando PacMan se come una bola grande el valor del atributo "comible" pasa de "false" a "true" en todos los fantasmas. Por tanto, será recomendable poner como "static" el valor de la variable "comible".
class Fantasma {
static boolean comible = false;
}
Combinar "static" y "final" para crear constantes
En algunas ocasiones veremos atributos de una clase declarados así:
final static tipo_variable nombre_variable;
Como vemos, se han combinado los modificadores "final" y "static". Esta combinación se usa en muchas ocasiones para declarar "constantes".
Deberiamos de definir constantes cuando queramos definir un dato en nuestra aplicación que no vaya a variar (porque si no declarariamos una variable).
El modificador "static" establece que podamos acceder al atributo aun cuando no se haya declarado una instancia de dicha clase.
Y "final" asegura que el valor no se modifique despues de inicializarse.
Ejem.:
//el iva es un dato que no va a variar. Se podría almacenar en una variable, pero puesto que no se va modificar jamas, ¿¿¿no será mejor declararlo como constante???
static final float IVA = 0.21;
Una constante podría almacenarse aparte totalmente de una clase, pero como en Java todo se divide en clases, no tendemos más remedio que declararla en una clase.
Comentarios
Publicar un comentario