Métodos estáticos

Son métodos que no necesitan un objeto para invocarse.

Ejemplo 1: PruPunto.main(String[])

Ejemplo 2: Math.sqrt(double)

Ejemplo 3: un método que compara dos puntos

Punto p= new Punto(1,1);
Punto q= new Punto(1,1);

System.out.println(p==q); // false

System.out.println(Punto.sonIguales(p,q)); // true


public class Punto {
  ...
  public static boolean sonIguales(Punto p, Punto q) {
    return p.x==q.x && p.y==q.y;
  }
}
Cuidado!

  public static boolean sonIguales(Punto p, Punto q) {
    // return this.x==q.x && this.y==q.y;
    return x==q.x && y==q.y;
  }
Can't make a static reference to nonstatic variable x in class Punto.

Un método estático no puede usar this.


Restricciones de los métodos estáticos

Dado que dentro de un método estático no existe this:


Variables estáticas

Son variables que no necesitan un objeto para examinarlas o modificarlas.

Ejemplo: System.out, System.in, System.err

Variables de instancia: hay una de ellas por cada objeto construido

Variables estáticas: una de ellas compartida por todos los objetos


public class Punto
{
  int x,y;
  static int count= 0;
  int serie;

  public Punto(int x, int y) {
    this.x= x; this.y= y;
    serie= count++;
  }

  public String toString() {
    return "punto"+serie+"("+x+","+y+")";
  }
  ...
}


Ejemplo de uso:

Punto p= new Punto(10,10);
System.out.println(p);      // punto0(10,10)

Punto q= new Punto(1, 5);
System.out.println(q);      // punto1(1,5)

Punto r= new Punto(0, 0);
System.out.println(r);      // punto2(0,0)