La palabra clave estática en java depende de la JVM para que quede claro

¡Continúe creando, acelere el crecimiento! Este es el segundo día de mi participación en el "Nuggets Daily New Plan · June Update Challenge", haz clic para ver los detalles del evento

prefacio

  • La estática en Java debe haber sido utilizada por todos. Se utiliza para modificar una clase o variable miembro o método.
  • El uso de Static sigue siendo muy simple, porque es un modificador. Pero si no comprende el principio de funcionamiento de esta modificación, puede cometer un error

variable

imagen-20220509191420226.png

  • La figura anterior es un modelo simplificado de la estructura de memoria JVM. Cualquiera que haya estudiado la JVM sabe que los objetos que creamos normalmente están en el montón. Luego, las propiedades en el objeto al que accedemos se almacenan naturalmente en el montón.
  • Pero cuando el atributo de modificación estática cambió.
 ​
 class Demo {
   //成员变量
   public int num = 100;
   //静态成员变量
   public static int count = 200;
   //静态方法
   public static void method(){
     System.out.println(count);
   }
 }
复制代码
  • La propiedad num es una propiedad normal y la propiedad count es una variable estática. No son solo diferentes en el nombre. Desde el punto de vista de la JVM, su ubicación de almacenamiento también es diferente.
  • En primer lugar, num depende del objeto específico, por lo que él y el objeto se almacenan en el montón.
  • Y contar es independiente del objeto. Hay un espacio dedicado en la JVM para almacenar variables estáticas. Llamamos a este espacio el área del método.

método

  • Además de modificar variables, static también puede modificar métodos. El método modificado se llama método estático. Las características de los métodos estáticos, como las variables estáticas, pertenecen a clases más que a objetos. Dentro de un método estático, solo se puede acceder a las variables estáticas y no se puede acceder a las propiedades del objeto a través de este objeto.
  • En resumen, solo se puede acceder a las variables estáticas dentro de los métodos estáticos y no se puede acceder a las variables no estáticas.
  • Además de los métodos estáticos, existe un método especial llamado bloques de código estático. Este método no requiere que preparemos el nombre del método, los parámetros de entrada, los parámetros de salida, etc. Simplemente prepare el cuerpo del método. Los requisitos para el interior del cuerpo del método y el interior del método estático son los mismos.

imagen-20220514140752124.png

  • Otra diferencia importante entre los bloques de código estático y los métodos estáticos y los métodos ordinarios es el tiempo de ejecución. La diferencia entre las variables estáticas y las variables ordinarias es la ubicación de la distribución de la memoria, mientras que los métodos operan en la pila y no involucran almacenamiento en la memoria, por lo que la diferencia es el tiempo de ejecución del método. Aquí necesitamos entender el mecanismo de carga de clases de puntos de antemano.
  • En primer lugar, la carga de una clase se divide en cinco procesos. El primer paso es cargar la metainformación de la clase y el último paso es inicializarla. En cuanto a los primeros tres pasos, no podemos entender aquí. Es importante saber que la inicialización se realiza en la etapa final de la carga de clases, y la operación de inicialización consiste en ejecutar métodos estáticos y bloques de código estáticos.
  • Del proceso de carga de clases, también podemos ver que los métodos estáticos no dependen de la invocación de objetos. Porque solo las propiedades estáticas se pueden usar en métodos estáticos. Es decir, el objeto no ha sido creado cuando se usa la propiedad estática. Esto también respalda la afirmación de que las variables estáticas no dependen de los objetos.

Resumir

  • Este artículo explica principalmente los conceptos básicos de Java, por favor, perdónenme por no presentar un excelente artículo con hermosas palabras. Aunque básico, a menudo es un punto de conocimiento que tendemos a ignorar.
  • Solo el aprendizaje continuo puede hacer un progreso continuo. Con respecto a los escenarios de uso adicionales de la estática, todo lo que puedo pensar en este momento es que se usará en el modo singleton.

Supongo que te gusta

Origin juejin.im/post/7103332427287756831
Recomendado
Clasificación