Palabras clave estáticas de Java y variables estáticas de Java y métodos estáticos
El modificador estático se puede usar con variables y métodos para indicar que es "estático".
Se pueden acceder a variables estáticas y métodos estáticos a través de nombres de clases, y no es necesario crear un objeto de una clase para acceder a los miembros estáticos de la clase, por lo que los miembros modificados por estáticos también se denominan variables de clase y métodos de clase. Las variables estáticas son diferentes de las variables de instancia, y siempre se accede a las variables de instancia a través de objetos porque sus valores varían entre los objetos.
Consulte el siguiente ejemplo:
demostración de clase pública {static int i = 10; i);
Resultados de ejecución:
Variable de clase I = 10 Variable de instancia J = 20
asignación de memoria estática
Las variables estáticas pertenecen a las clases y no pertenecen a ningún objeto independiente, por lo que puede acceder a variables estáticas sin crear instancias de la clase. Este resultado se debe a que el compilador solo crea una copia de variables estáticas para toda la clase, es decir, solo asigna un espacio de memoria. Las variables de instancia son diferentes.
Consulte el siguiente código:
Demo de clase pública {static int i; ; obj2 .j = " + obj2.j);}}
Resultados de ejecución:
obj1.i = 10, obj1.j = 20obj2.i = 10, obj2.j = 0
Nota: Aunque también se puede acceder a las variables estáticas a través de objetos, no se recomiendan y el compilador también generará advertencias.
En el código anterior, I es una variable estática. Esto se debe a que obj1.i y obj2.i apuntan al mismo espacio de memoria, mientras que obj1.j y obj2.j apuntan a diferentes espacios de memoria.
Nota: La variable estática se inicializará cuando la clase esté cargada. Es decir, mientras se cargue la clase, se inicializará independientemente de si usa esta variable estática o no.
Resumen: las variables de clase se modifican con la palabra clave estática. Los cambios en las variables afectarán a otros objetos. Hay dos formas de acceder externamente: acceder a través de objetos o acceso a través de nombres de clases.
Método estático
Un método estático es un método que no puede realizar operaciones en un objeto. Por ejemplo, el método Pow () de la clase de matemáticas es un método estático con una sintaxis de matemáticas. objetos cuando se usa.
Debido a que los métodos estáticos no pueden operar objetos, no se puede acceder a las variables de instancia en métodos estáticos y solo pueden acceder a variables estáticas de su propia clase.
El método estático se puede usar en las siguientes situaciones:
Un método no necesita acceder al estado del objeto, y sus parámetros requeridos son proporcionados por parámetros explícitos (por ejemplo, math.pow ()).
Un método solo necesita acceder a variables estáticas de la clase.
Los lectores deben haber notado que Main () también es un método estático que no funciona en ningún objeto. De hecho, no hay objetos en el momento del inicio del programa, el método Main () es la entrada al programa y se ejecutará y se crean los objetos requeridos por el programa.
Resumen de variables estáticas y métodos estáticos:
Un método estático de una clase solo puede acceder a variables estáticas;
Un método estático de una clase no puede llamar directamente métodos no estáticos;
Si el permiso de control de acceso permite, también se puede acceder a las variables estáticas y los métodos estáticos a través de objetos, pero no se recomiendan;
El objeto actual no existe en el método estático, por lo que esto no se puede usar y, por supuesto, Super no se puede usar;
Los métodos estáticos no pueden sobrescribirse mediante métodos no estáticos;
El constructor no permite la declaración de estática;
Las variables locales no pueden modificarse con estática.
Ejemplos de métodos estáticos:
Public Class Demo {static int sum (int x, int y) {return x + y; "10 + 10 =" + suma);
Resultados de ejecución:
10+10 = 20
El método estático no requiere ninguna instancia de la clase a la que pertenezca se llamará, por lo que no hay valor de esto y no se puede acceder a la variable de instancia, de lo contrario causará un error de compilación.
Nota: Las variables de instancia solo se pueden acceder a través de objetos y no se puede acceder a través de clases.
Inicializador estático (bloque estático)
Un bloque es un código rodeado de aparatos ortopédicos. Un inicializador estático es un bloque estático que existe en una clase y fuera de un método. Los inicializadores estáticos solo se ejecutan una vez cuando la clase se carga (cuando la clase se usa por primera vez) y a menudo se usan para inicializar las variables estáticas.
Código de muestra:
Public Class Demo {public static int i; " + i);} public static void main (string [] args) {System.out.println (" dema.i = " + demo.i); new Demo (). Test ();}}
El resultado de la operación es:
Ahora en el bloque estático.demo.i = 10test método: i = 10
Importación estática
La importación estática es una nueva característica de Java 5, utilizada para importar variables estáticas y métodos estáticos de clases.
En general, escribimos esto en las clases de importación:
Importar PackageName.ClassName;
o
Importar PackageName.*;
Y la importación estática se puede escribir así:
importar static packagename.classname.methonName;
o
importar static packageName.classname.*;
Después de importar, puede llamar directamente al método estático con el nombre del método en la clase actual, y ya no necesita usar classname.methodname para acceder a él.
Para variables estáticas y métodos estáticos de uso frecuente, se pueden importar estáticamente. La ventaja de la importación estática es que puede simplificar algunas operaciones, como la declaración de salida. y directamente la próxima vez.
Consulte el siguiente código:
import static java.lang.system.*; import static java.lang.math.random; public class Demo {public static void main (string [] args) {out.println ("producido por número aleatorio:" + random () );
Resultados de ejecución:
Un número aleatorio generado: 0.05800891549018705
Palabra clave final de Java: Bloqueo de herencia y polimorfismo <r /> en Java, al declarar clases, variables y métodos, la palabra clave final se puede usar para modificarlo. Los datos modificados por final tienen las características de "estado final" y significa "final". Las regulaciones específicas son las siguientes:
La clase modificada por final no se puede heredar.
El método de modificación final no puede reescribirse por subclases.
La variable modificada por final (variable miembro o variable local) se convierte en una constante y solo se puede asignar una vez.
La variable miembro modificada por final debe asignarse al mismo tiempo que la declaración. usado.
La variable local modificada por final solo puede declarar que no asigna, y luego se asigna al mismo tiempo.
Final generalmente se usa para modificar datos que no se pueden cambiar a voluntad para evitar el uso indebido, como los métodos para implementar métodos de triángulo matemático, operaciones de exponencia y otras funciones, así como constante matemática π = 3.141593, e = 2.71828 et al.
De hecho, para garantizar el estado final, la clase Java.Lang.Math que proporciona los métodos y constantes anteriores también se ha definido como final.
Cabe señalar que si una variable que hace referencia a un tipo (el tipo de cualquier clase) está marcado como final, entonces la variable no puede apuntar a ningún otro objeto. Pero el contenido del objeto se puede cambiar, porque solo la referencia en sí es definitiva.
Si la variable está marcada final, el resultado es convertirla en constante. Querer cambiar el valor de la variable final causará un error de compilación. Aquí hay un ejemplo de definir correctamente las variables finales:
Public final int max_array_size = 25;
Las constantes no pueden ser heredadas porque tienen una modificación final.
Consulte el siguiente código:
Public Final Class Demo {public static final int total_number = 5; =+ Total_number; Realizar una tarea secundaria}}
Final también se puede usar para modificar las clases (antes de la palabra clave de la clase) para evitar que la clase deriva las subclases. Esto se hace por razones de seguridad, porque es necesario asegurarse de que una vez que se hace referencia a una cadena, debe ser una cadena de la cadena de clase, no una cadena de otra clase (la clase de cadena puede ser heredada y manipulada maliciosamente).
Los métodos también se pueden modificar por final, y los métodos modificados por final no pueden sobrescribirse; Una vez que una clase se declara como final, los métodos contenidos en esa clase también se declararán implícitamente como final, pero la variable no lo es.
El método modificado por final es la unión estática y no producirá polimorfismo (enlace dinámico). En Java, los métodos modificados por estáticos o privados se declararán implícitamente como final porque la unión dinámica no tiene sentido.
Dado que la unión dinámica consume recursos y a menudo no es necesario, algunos programadores creen que a menos que haya una razón suficiente para usar el polimorfismo, todos los métodos deben modificarse con final.
Esta comprensión es un poco extrema, porque el compilador instantáneo en el JVM puede monitorear la información de operación del programa en tiempo real y puede conocer con precisión la relación de herencia entre las clases. Si un método no se sobrescribe y es corto, el compilador puede optimizarlo, lo que se llama inscripción. Por ejemplo, una llamada en línea a E.GetName () se reemplazará con el acceso a la variable E.Name. Esta es una mejora significativa, porque la transferencia de ramas utilizada por la CPU al procesar las instrucciones que los métodos de llamada interrumpirán la política de la instrucción previa, por lo que esto se considera impopular. Sin embargo, si GetName () se sobrescribe en otra clase, el compilador no puede saber qué hará el código sobrescrito, por lo que no se puede ingresar.