Se debe comprender primero la diferencia entre estático y dinámico en java.
Para comenzar a crear objetos de una clase, primero se debe cargar la clase en memoria por medio de lo que se conoce como ClassLoader (cargador de clases). Aquí entra por primera vez el concepto de contexto estático, y podrá ser utilizado hasta que la clase se elimine de la memoria, que normalmente ocurre cuando se detiene el proceso de lamáquina virtual de Java, es decir, que la clase está cargada durante todo el proceso de la ejecución de nuestra aplicación.
Una vez que la clase ya está cargada en memoria, es posible empezar a crear objetos de dicha clase. A esto se le
conoce como el contexto dinámico, ya que en este momento ya es posible crear objetos y empezar a interactuar entre los mismos.
En resumen, el contexto estático se carga primero y por lo tanto las clases que se vayan a utilizar, y posteriormente se crea el contexto dinámico y por lo tanto ya se pueden crear los objetos de las clases que se hayan cargado en memoria.
Como podemos observar en la lámina, el contexto estático tiene una mayor duración que el contexto dinámico, y de hecho el contexto estático incluye el contexto dinámico, pero no al revés.
Podemos utilizar la palabra static para interactuar con el contexto estático. Por ejemplo, si
definimos un atributo o un método como estático, lo que estamos indicamos es que el atributo o método pertenecen a la clase y no al objeto.
Por ejemplo, si creamos un atributo sin usar la palabra static, que es como normalmente los
definimos, cada que creamos un objeto se creará también una variable asociada al objeto que se crea, pero si definimos el atributo como estático, estamos indicando que el atributo solo se crea una vez, sin importar cuantos objetos se creen, sólo habrá una variable la cual se asocia a la clase y no al objeto. Y si un objeto accede al valor de la variable estática leerá el mismo valor que los demás objetos, y si un objeto modifica el valor estático, todos los demás objetos accederán almismo valor ya que este valor está almacenado en la clase y no en los objetos de dicha clase.