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
Cuidado!public class Punto { ... public static boolean sonIguales(Punto p, Punto q) { return p.x==q.x && p.y==q.y; } }
Can't make a static reference to nonstatic variable x in class Punto.public static boolean sonIguales(Punto p, Punto q) { // return this.x==q.x && this.y==q.y; return x==q.x && y==q.y; }
Un método estático no puede usar this.
Dado que dentro de un método estático no existe this:
... x ... y // ˇNo! ... this.x ... this.y // ˇNo! ... p.x ... p.y // ˇSi!
... distanciaA(p) ... // ˇNo! ... this.distanciaA(p) ... // ˇNo! ... p.distanciaA(p) ... // ˇSi!
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)