1. UNIVERSIDAD TECNICA DE AMBATO
Facultad de Ingeniería en Sistemas Electrónica e Industrial
2. Las variables de clase o miembros estáticos son
aquellos a los que se antepone el modificador static.
Vamos a comprobar que un miembro dato estático
guarda el mismo valor en todos los objetos de dicha
clase.
3. Un dato estático es una variable miembro que no se
asocia a un objeto (instancia) de una clase, sino que
se asocia a la clase misma; no hay una copia del dato
para cada objeto sino una sola copia que es
compartida por todos los objetos de la clase.
4. class Punto {
int x , y ;
static int numPuntos = 0;
Punto ( int a , int b ) {
x = a ; y = b;
numPuntos ++ ;
}
}
5. es posible acceder a las variables estáticas a
través de una referencia a un objeto de la
clase.
Por ejemplo:
Punto p = new Punto();
int x = p.numPuntos;
7. Sea una clase denominada Alumno con dos miembros
dato, la nota de selectividad, y un miembro estático
denominado nota de corte. La nota es un atributo que
tiene un valor distinto para cada uno de los alumnos u
objetos de la clase Alumno, mientras que la nota de
corte es un atributo que tiene el mismo valor para a un
conjunto de alumnos.
8. public class Alumno {
double nota;
static double notaCorte=6.0;
public Alumno(double nota) {
this.nota=nota;
}
boolean estaAdmitido(){
return (nota>=notaCorte);
}
}
9. Creamos ahora un array de cuatro alumnos y
asignamos a cada uno de ellos una nota.
alumnos={new Alumno(5.5), new
Alumno(6.3), new Alumno(7.2), new Alumno(5.0)};
10. Contamos el número de alumnos que están admitidos
int numAdmitidos=0;
for(int i=0; i<alumnos.length; i++){
if (alumnos[i].estaAdmitido()){
numAdmitidos++;
}
}
System.out.println("admitidos "+numAdmitidos);
11. Accedemos al miembro dato notaCorte desde un objeto
de la clase Alumno, para cambiarla a 7.0
alumnos[1].notaCorte=7.0;
Comprobamos que todos los objetos de la clase Alumno
tienen dicho miembro dato estático notaCorte
cambiado a 7.0
for(int i=0; i<alumnos.length; i++){
System.out.println("nota de corte
"+alumnos[i].notaCorte);
}
12. El miembro dato notaCorte tiene el modificador static y
por tanto está ligado a la clase más que a cada uno de los
objetos de dicha clase
Si ponemos
Alumno.notaCorte=6.5;
for(int i=0; i<alumnos.length; i++){
System.out.println("nota de corte
"+alumnos[i].notaCorte);
}
Veremos que todos los objetos de la clase Alumno
habrán cambiado el valor del miembro dato estático
notaCorte a 6.5.
13.
14. Para los métodos, la idea es la misma
que para los datos: los métodos
estáticos se asocian a una clase, no a
una instancia.
16. class Punto {
int x , y ;
static int numPuntos = 0;
Punto ( int a , int b ) {
x = a ; y = b;
numPuntos ++ ;
}
static int cuantosPuntos() {
return numPuntos;
}
}
17. En ocasiones es necesario escribir código para inicializar
los datos estáticos, quizá creando algún otro objeto de
alguna clase o realizando algún tipo de control. El
fragmento de código que realiza esta tarea se llama
inicializador estático. Es un bloque de sentencias que no
tiene nombre, ni recibe argumentos, ni devuelve valor.
Simplemente se declara con el modificador static .
La forma de declarar el inicializador estático es:
static { bloque_codigo }
18. class Punto {
int x , y ;
static int numPuntos;
static {
numPuntos = 0;
}
Punto ( int a , int b ) {
x = a ; y = b;
numPuntos ++ ;
}
static int cuantosPuntos() {
return numPuntos;
}
}