Hola a todos, hoy os explicare que son y para que se usan los métodos y atributos estáticos.
Si has seguido mis posts desde el principio, seguro que te suena esta palabra static, vamos a explicar para que se usa.
Una variable o método estático es aquel es igual en todas las clases, es decir, que aunque creemos distintos objetos en todos sera igual. Se define escribiendo static en la definición del método o del atributo.
Vamos a ver un ejemplo, tenemos una clase Empleado con un atributo salarioBase que es estático.
/** * Clase Empleado * * Contiene informacion de cada empleado * * @author Fernando * @version 1.0 */ public class Empleado { //Atributos /** * Nombre del empleado */ private String nombre; /** * Apellido del empleado */ private String apellido; /** * Edad del empleado */ private int edad; /** * Salario del empleado */ private static double salarioBase=1000; //Metodos publicos /** * Devuelve el nombre del empleado * @return nombre del empleado */ public String getNombre() { return nombre; } /** * Modifica el nombre de un empleado * @param nombre */ public void setNombre(String nombre) { this.nombre = nombre; } /** * Devuelve la edad de un empleado * @return edad del empleado */ public int getEdad() { return edad; } /** * Modifica la edad de un empleado * @param edad */ public void setEdad(int edad) { this.edad = edad; } /** * Devuelve el salarioBase * @return salarioBse */ public double getSalarioBase() { return salarioBase; } /** * Modifica el salarioBase de los empleados * @param salarioBase */ public static void setSalarioBase(double salarioBase) { Empleado.salarioBase = salarioBase; } /** * Suma un plus al salario del empleado si el empleado tiene mas de 40 años * @param sueldoPlus * @return true: se suma el plus al sueldo y false: no se suma el plus al sueldo */ public boolean plus (double sueldoPlus){ boolean aumento=false; if (edad>40 && compruebaNombre()){ salarioBase+=sueldoPlus; aumento=true; } return aumento; } //Metodos privados /** * Comprueba que el nombre no este vacio * @return true: el nombre es una cadena vacia y false: el nombre no es una cadena vacia */ private boolean compruebaNombre(){ if(nombre.equals("")){ return false; } return true; } //Constructores /** * Constructor por defecto */ public Empleado(){ this ("", "", 0); } /** * Constructor con 4 parametros * @param nombre nombre del empleado * @param apellido nombre del empleado * @param edad edad del empleado */ public Empleado(String nombre, String apellido, int edad){ this.nombre=nombre; this.apellido=apellido; this.edad=edad; } }
Como vemos, el salarioBase es 1000, lo que significa que cuando creamos un objeto el salarioBase es de 1000, si en un momento cambiamos el salarioBase afectara a todas los objetos. Veamos un ejemplo:
public class EmpleadoApp { public static void main(String[] args) { //Creamos los objetos, el salarioBase = 1000 Empleado empleado1=new Empleado(); Empleado empleado2=new Empleado(); //Modificamos el salario base a 1200 Empleado.setSalarioBase(1200); //Mostramos el salarioBase de los Empleados, ahora es 1200 System.out.println("Salario base del empleado 1: "+empleado1.getSalarioBase()); System.out.println("Salario base del empleado 2: "+empleado2.getSalarioBase()); //Modificamos el salario base a 1500 Empleado.setSalarioBase(1500); //Mostramos el salarioBase de los Empleados, ahora es 1500 System.out.println("Salario base del empleado 1: "+empleado1.getSalarioBase()); System.out.println("Salario base del empleado 2: "+empleado2.getSalarioBase()); } }
Para acceder a un método o atributo estático (también depende de su visibilidad), no es necesario crear un objeto, para ello escribimos nombre_clase.metodo_estatico(parámetros); por ejemplo, Empleado.setSalarioBase(salario);
Debemos tener en en cuenta que si un método es estático, los atributos que estén dentro del método deben ser estáticos también, si hay alguno que no lo es, saltara un error.
Espero que os sea de ayuda. Si teneis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta