Static es otra palabra clave importante en Java. Puede mejorar el rendimiento de la ejecución del programa y optimizar la estructura del programa. Sus aplicaciones principales son las siguientes:
1. Las variables del miembro modificadas por estática, llamadas variables de clase/variables estáticas, para realizar el intercambio de todos los objetos a ese miembro.
2. El método miembro modificado por Static, llamado método de clase/método estático, puede llamarse directamente a través del nombre de clase sin crear un objeto.
3. Forma bloques de código estático para optimizar el rendimiento del programa.
4. Paquetes de plomo estáticos, generalmente importan métodos de clase directamente en la clase actual, de modo que los métodos de clase se puedan llamar directamente utilizando el nombre del método, que es más conveniente.
5. Modifique la clase interna y llame a la clase interna sin instancias de la clase externa.
Se adjunta la siguiente descripción del código:
Estudiante de clase pública {nombre de cadena; edad estática int; public String toString () {return "nombre:" + nombre + ", edad:" + edad; } public static void main (string [] args) {Student s1 = new Student (); s1.name = "Zhang San"; s1.age = 20; Estudiante S2 = nuevo estudiante (); s2.name = "li si"; s2.age = 10; System.out.println (S1); System.out.println (S2); }}/** Nombre del resultado del resultado: Zhang San, edad: 10 Name: Li SI, Edad: 10*/Como se mencionó anteriormente, los dos objetos S1 y S2 se almacenan en diferentes direcciones en el área de montón en la memoria, por lo que no interferirán entre sí. Sin embargo, la palabra clave estática modifica la edad variable del miembro, por lo que la clase pertenece en lugar de que el objeto le pertenece, y cualquier objeto en la instancia de esa clase puede ser compartido y utilizado. Por lo tanto, las edades de salida son todas finales asignadas a 10. Si elimina estática, obviamente los objetos no se afectarán entre sí, y la salida es la siguiente:
Nombre: Zhang San, Edad: 20 Name: Li Si, Edad: 10
Como se mencionó anteriormente, se produjo un error cuando OUT1 llama a Out2. A partir de este código, se puede ver que los métodos estáticos no pueden llamar a variables de miembros no estáticos y métodos miembros. Los métodos no estáticos pueden llamar variables de miembros estáticos y métodos miembros. Tenga en cuenta que Static no afecta los derechos de acceso de los miembros. Las palabras clave que pueden afectar los derechos de acceso en Java son privadas, públicas, protegidas y predeterminadas.
La prueba de clase pública extiende la base {static {System.out.println ("Bloque estático estático 1"); } public test () {System.out.println ("Test Constructor"); } public static void main (string [] args) {nuevo test (); }} base de clases {static {System.out.println ("Bloque estático estático 2"); } public base () {System.out.println ("Base Constructor"); }}Como se mencionó anteriormente, recuerde dos oraciones, el bloque de código estático se carga con la carga de la clase. El método variable modificado por Static se carga primero y solo una vez que otros métodos variables. Cuando se carga una subclase, la clase principal se cargará primero. A partir de esto, podemos analizar: al comienzo de la ejecución, primero debemos encontrar el método principal, porque el método principal es la entrada al programa, pero antes de ejecutar el método principal, primero debemos cargar la clase de prueba. Al cargar la clase de prueba, encontramos que la clase de prueba hereda de la clase base, por lo que recurriremos para cargar la clase base primero. Al cargar la clase base, encontramos que hay un bloque estático y luego ejecutamos el bloque estático. Después de cargar la clase base, la clase de prueba continúa cargándose y luego descubre que hay bloques estáticos en la clase de prueba, por lo que se ejecuta el bloque estático. Después de cargar la clase requerida, el método principal comienza a ejecutarse. Al ejecutar nueva prueba () en el método principal, el constructor de la clase principal se llamará primero y luego el constructor propio. Por lo tanto, los resultados de la operación son los siguientes:
Bloque estático estático Bloque estático 2 estático 1 Constructor de prueba de constructor de base
/* A.Java File*/Package com.dogo.test; public class A {public static void outword (object o) {system.out.println (o); }}/*B.Java archivo*/import static com.dogo.test.a.*; Public class B {public static void main (string [] args) {outword ("¡Hola mundo!"); } /** Salida*¡Hola mundo! */}Como se mencionó anteriormente, A.Java contiene un método estático simple. En B.Java, utilizamos la palabra clave estática para importar la clase A. Por lo tanto, no es necesario usar el "nombre de clase. Nombre del método" para llamar al método de clase. Puede usar directamente el "Nombre del método" para llamar al método de clase, al igual que el método propio de la clase.
/*Outer.java*/public clase exterior {static {system.out.println ("bloque estático externo"); } public Outer () {System.out.println ("Constructor externo"); } clase estática interior {static {System.out.println ("bloque estático interno"); } public inner () {System.out.println ("Inner Constructor"); }}}/*Test.java*/public class test {public static void main (string [] args) {new Outer.inner (); }}Como se mencionó anteriormente, recuerde modificar la clase interna con Static, la clase externa puede llamar directamente a la clase interna, porque la clase interna modificada por estática se carga al cargar la clase externa, por lo que puede llamar directamente a la clase interna estática sin instancias de la clase externa. En el ejemplo, antes de ingresar el método principal de prueba, cargue la clase de prueba y luego ejecute nuevo externo.inner (); Nota aquí: Debido a que el interior es estático, no hay necesidad de cargar clases externas e instanciar clases externas aquí. El interior se puede cargar e instanciar directamente. Los resultados de la operación son los siguientes:
Bloque estático interno Constructor interno
DA Qiao Nota: Otra aplicación muy importante de Static es implementar el patrón de diseño Singleton. La característica del patrón de interés único es que la clase solo puede tener una instancia. Para realizar esta función, el constructor de clase debe estar oculto, es decir, el constructor se declara como privado y proporciona un método para crear un objeto. Dado que el constructor se declara como privado, el mundo exterior no puede crear directamente un objeto de este tipo y solo puede obtener el objeto de clase a través de los métodos proporcionados por la clase. Por lo tanto, el método para crear un objeto solo puede declararse como estático. El ejemplo del programa es el siguiente:
clase SingledEmo {private static singleledemo ins = null; privado singledEmo () {} public singledemo getins () {if (ins == null) {ins = new SingleDEMO (); } return ins; }}