Estático significa "global" o "estático" y se utiliza para modificar variables miembro y métodos miembro. También puede formar un bloque de código estático, pero no existe el concepto de variables globales en el lenguaje Java.
Las variables miembro y los métodos miembro modificados por estática son independientes de cualquier objeto de la clase. Es decir, no depende de una instancia específica de la clase y es compartido por todas las instancias de la clase.
Mientras esta clase esté cargada, la máquina virtual Java puede encontrarla de forma predeterminada en el área de método del área de datos de tiempo de ejecución según el nombre de la clase. Por lo tanto, se puede acceder a un objeto estático antes de que se cree cualquiera de sus objetos, sin hacer referencia a ningún objeto.
Las variables miembro estáticas y los métodos miembro modificados con public son esencialmente variables globales y métodos globales. Cuando se declara un objeto de su clase, no se genera una copia de la variable estática, pero todas las instancias de la clase comparten la misma variable estática.
Una variable estática puede ir precedida de una modificación privada, lo que significa que esta variable se puede usar en el bloque de código estático de la clase o en otros métodos miembros estáticos de la clase (por supuesto, también se puede usar en métodos no estáticos). métodos miembro), pero no se puede utilizar en otras clases. Es importante hacer referencia directamente al nombre de la clase. De hecho, debe comprender que privado significa restricción de permisos de acceso y estático significa que se puede usar sin creación de instancias, lo cual es mucho más fácil de entender. El efecto de agregar otras palabras clave de permiso de acceso antes de estático también es el mismo.
Las variables miembro y los métodos miembro modificados por estática generalmente se denominan variables estáticas y se puede acceder a ellos directamente a través del nombre de la clase.
Nombre de clase. Nombre del método estático (lista de parámetros...)
Nombre de clase. Nombre de variable estática
Un bloque de código modificado con estático representa un bloque de código estático. Cuando la máquina virtual Java (JVM) carga una clase, el bloque de código se ejecutará (muy útil, jaja).
1. variable estática
Las variables miembro de una clase se pueden clasificar en dos tipos según sean estáticas: una es una variable modificada por estática, llamada variable estática o variable de clase, la otra es una variable no modificada por estática, llamada variable de instancia;
La diferencia entre los dos es:
Para las variables estáticas, solo hay una copia en la memoria (para ahorrar memoria). La JVM solo asigna memoria una vez para las variables estáticas. La asignación de memoria de las variables estáticas se completa durante el proceso de carga de la clase. el nombre de la clase (conveniente, por supuesto, también se puede acceder a él a través de objetos (pero esto no se recomienda).
Por ejemplo, las variables de instancia, antes de que se cree una instancia, la memoria se asignará una vez para que la variable de instancia pueda tener varias copias en la memoria sin afectarse entre sí (flexible).
Por lo tanto, las variables estáticas se utilizan generalmente cuando es necesario implementar las dos funciones siguientes:
1).Al compartir valores entre objetos.
2).Cuándo acceder a las variables es conveniente
2. método estático
Los métodos estáticos se pueden llamar directamente a través del nombre de la clase y también se puede llamar a cualquier instancia.
Por lo tanto, las palabras clave this y super no se pueden usar en métodos estáticos, y no se puede acceder directamente a las variables de instancia y a los métodos de instancia de la clase a la que pertenecen (es decir, variables miembro y métodos miembro sin estática. Solo variables miembro estáticas y). Se puede acceder a los métodos miembros de la clase a la que pertenecen.
¡Porque los miembros de la instancia están asociados con objetos específicos! ¡Esto debe entenderse y resolverse, no memorizarse! ! !
Debido a que los métodos estáticos son independientes de cualquier instancia, los métodos estáticos deben implementarse y no pueden ser abstractos.
Por ejemplo, para facilitar la llamada a métodos, todos los métodos de la clase Math en la API de Java son estáticos, y los métodos estáticos dentro de las clases generales también facilitan que otras clases llamen al método.
Un método estático es un tipo especial de método dentro de una clase. El método correspondiente se declara estático sólo cuando es necesario. Los métodos dentro de una clase generalmente no son estáticos.
Tres, bloque de código estático
Un bloque de código estático también se denomina bloque de código estático. Es un bloque de declaración estático en una clase que es independiente de los miembros de la clase y no se puede colocar en ningún cuerpo de método. se ejecutará cuando la JVM cargue la clase. Si hay varios bloques de código estático, la JVM los ejecutará en el orden en que aparecen en la clase y cada bloque de código solo se ejecutará una vez. Por ejemplo:
clase pública Prueba5 {privado estático int a; privado int b; Test5.a=3; System.out.println(a); Test5 t=new tf(); println(tb); } static{ Test5.a=4; System.out.println(a } public static void principal(String[] args) { // TODO Generar automáticamente resguardos de métodos} static{ Test5.a=5; System.out.println(a } public void f(){ System.out.println("hhahhahah");
Resultados de ejecución:
3
jajajajaja
1000
4
5
Puede utilizar bloques de código estático para asignar valores a algunas variables estáticas. Finalmente, eche un vistazo a estos ejemplos. Todos tienen un método principal estático, de modo que la JVM pueda llamarlo directamente sin crear una instancia al ejecutar el método principal. .
4. ¿Qué significan estático y final cuando se usan juntos?
La final estática se utiliza para modificar variables miembro y métodos miembro, que pueden entenderse simplemente como "constantes globales".
Para las variables, significa que una vez que se proporciona un valor, no se puede modificar y se puede acceder a él a través del nombre de la clase.
Para los métodos, significa que no se pueden anular y se puede acceder a ellos directamente a través del nombre de la clase.
A veces desea definir un miembro de una clase para que su uso sea completamente independiente de cualquier objeto de esa clase. Normalmente, se debe acceder a un miembro de la clase a través de un objeto de su clase, pero es posible crear un miembro que pueda usarse por sí mismo sin hacer referencia a una instancia específica. Un miembro de este tipo se puede crear agregando la palabra clave estática (estática) antes de la declaración del miembro. Si un miembro se declara estático, se puede acceder a él antes de que se cree cualquier objeto de su clase sin tener que hacer referencia a ningún objeto. Puede declarar tanto métodos como variables como estáticos. El ejemplo más común de un miembro estático es main(). Debido a que se debe llamar a main() cuando el programa comienza a ejecutarse, se declara estático.
Las variables declaradas estáticas son esencialmente variables globales. Cuando se declara un objeto, no se produce una copia de la variable estática, pero todas las variables de instancia de la clase comparten la misma variable estática. Los métodos declarados estáticos tienen las siguientes restricciones:
1).Solo pueden llamar a otros métodos estáticos.
2).Solo pueden acceder a datos estáticos.
3).No pueden referirse a esto o super de ninguna manera (la palabra clave super está relacionada con la herencia y se describe en el siguiente capítulo).
Si necesita inicializar sus variables estáticas mediante cálculo, puede declarar un bloque estático. El bloque estático solo se ejecuta una vez cuando se carga la clase. El siguiente ejemplo muestra una clase con un método estático, algunas variables estáticas y un bloque inicializador estático:
// Demostrar variables, métodos y bloques estáticos. class UseStatic { static int a = 3; static void meth(int x) { System.out.println("x = " + x); println("a = " + a); System.out.println("b = " + b); static { System.out.println("Bloque estático inicializado."); } public static void main(String args[]) { meth(42);
Una vez cargada la clase UseStatic, se ejecutan todas las declaraciones estáticas. Primero, a se establece en 3, luego se ejecuta el bloque estático (imprimiendo un mensaje) y, finalmente, b se inicializa en a*4 o 12. Luego se llama a main(), main() llama a meth(), pasando el valor 42 a x. Las tres declaraciones println () se refieren a dos variables estáticas ayb, y a la variable local x.
Nota: Es ilegal hacer referencia a variables de instancia en un método estático.
Aquí está el resultado de este programa:
Copie el código de código de la siguiente manera:
Bloque estático inicializado.
x = 42
un=3
segundo = 12
Los métodos y variables estáticos se pueden utilizar independientemente de cualquier objeto fuera de la clase en la que están definidos. De esta manera, simplemente agrega el operador de punto después del nombre de la clase. Por ejemplo, si desea llamar a un método estático desde fuera de la clase, puede utilizar el siguiente formato general:
Copie el código de código de la siguiente manera:
nombre de clase.método()
Aquí, nombre de clase es el nombre de la clase en la que se define el método estático. Como puede ver, este formato es similar al formato de llamar a métodos no estáticos a través de variables de referencia de objetos. Se puede acceder a una variable estática en el mismo formato: el nombre de la clase seguido del operador de punto. Así es como Java implementa una versión controlada de funciones globales y variables globales.
A continuación se muestra un ejemplo. En main(), se accede al método estático callme() y a la variable estática b fuera de sus clases.
clase StaticDemo { static int a = 42; static int b = 99; static void callme() { System.out.println("a = " + a } } class StaticByName { public static void main(String args[]); { StaticDemo.callme(); System.out.println("b = " + StaticDemo.b);
Aquí está el resultado de este programa:
Copie el código de código de la siguiente manera:
a=42
segundo = 99
Las instancias creadas por su clase no pueden acceder a los miembros estáticos.
Si los miembros sin modificación estática son miembros de objetos, son propiedad de cada objeto.
Los miembros modificados con static son miembros de clase, lo que significa que una clase puede llamarlos directamente y son comunes a todos los objetos.