La palabra clave estática es una palabra clave que muchos amigos encuentran al escribir y leer código. También es uno de los puntos de conocimiento que los entrevistadores de las principales compañías les gusta preguntar durante las entrevistas. Primero hablemos sobre el uso de palabras clave estáticas y los malentendidos comunes. Finalmente, enumeramos algunas preguntas de prueba comunes sobre Static en la entrevista escrita. Aquí está el esquema del directorio de este artículo:
1. El propósito de las palabras clave estáticas
2. Conceptos erróneos de palabras clave estáticas
3. Preguntas comunes de la entrevista escrita
Si hay alguna incorrección, espero comprender y dar la bienvenida a las críticas y la corrección.
Respeta los logros laborales del autor. Indique el enlace original al reimprimir:
http://www.cnblogs.com/dolphin0520/p/3799052.html
1. El propósito de las palabras clave estáticas
"El método estático es un método sin esto. Los métodos no estatales no se pueden llamar dentro del método estático, que a su vez es posible. Y el método estático solo puede llamarse a través de la clase misma sin crear ningún objeto. Este es en realidad el objetivo principal del método estático".
Aunque este pasaje solo ilustra las características especiales del método estático, se puede ver que la función básica de la palabra clave estática. En resumen, se describe en una oración:
Es conveniente llamar (método/variable) sin crear un objeto.
Obviamente, los métodos o variables modificados por palabras clave estáticas no necesitan confiar en objetos para el acceso. Mientras se cargue la clase, se puede acceder a través del nombre de la clase.
La estática se puede utilizar para modificar los métodos de miembros de la clase y las variables de miembros de la clase. Además, se pueden escribir bloques de código estáticos para optimizar el rendimiento del programa.
1) Método estático
El método estático generalmente se llama método estático. Dado que se puede acceder a métodos estáticos sin confiar en ningún objeto, no hay esto para los métodos estáticos porque no depende de ningún objeto. Dado que no hay objetos, no hay tal cosa como esto. Y debido a esta característica, no se puede acceder a las variables de miembros no estatales y los métodos de miembros no estáticos de la clase en métodos estáticos, ya que los métodos/variables de miembros no estáticos deben depender de objetos específicos a llamar.
Pero debe tenerse en cuenta que, aunque no se puede acceder a los métodos miembros no estáticos y las variables miembros no estatales en métodos estáticos, se puede acceder a métodos/variables de miembros estáticos en métodos de miembros no estáticos. Demos un ejemplo simple:
En el código anterior, dado que el método Print2 existe independientemente del objeto, se puede llamar directamente por nombre de clase. Si se puede acceder a métodos/variables no estatales en métodos estáticos, entonces si hay la siguiente declaración en el método principal:
MyObject.print2 ();
En este momento, no hay objeto, y Str2 no existe en absoluto, por lo que habrá una contradicción. Lo mismo es cierto para los métodos. Dado que no puede predecir si se accede a las variables de miembros no estatales en el método PRINT1, también se prohíbe acceder a métodos de miembros no estáticos en métodos de miembros estáticos.
Y para los métodos de miembros no estáticos, obviamente es ilimitado para acceder a métodos/variables de miembros estáticos.
Por lo tanto, si desea llamar a un método sin crear un objeto, puede establecer este método en Static. Nuestro método estático más común es el método principal. En cuanto a por qué el método principal debe ser estático, ahora está muy claro. Debido a que el programa no crea ningún objeto al ejecutar el método principal, solo se puede acceder a través del nombre de la clase.
También recuerde que incluso si no se muestra como estático, el constructor de la clase es en realidad un método estático.
2) Variables estáticas
Las variables estáticas también se llaman variables estáticas. La diferencia entre las variables estáticas y las variables no estáticas es que las variables estáticas son compartidas por todos los objetos, con solo una copia en la memoria, que se inicializará si y solo cuando la clase se cargue por primera vez. Las variables no estáticas son propiedad de objetos y se inicializan al crear objetos. Hay múltiples copias, y las copias propiedad de cada objeto no se afectan entre sí.
El orden de inicialización de las variables de miembros estáticos se inicializa en el orden definido.
3) Bloque de código estático
Otra función clave de la palabra clave estática es formar bloques de código estáticos para optimizar el rendimiento del programa. El bloque estático se puede colocar en cualquier lugar de la clase, y puede haber múltiples bloques estáticos en la clase. Cuando la clase se carga por primera vez, cada bloque estático se ejecutará en el orden de bloques estáticos y solo se ejecutará una vez.
La razón por la cual los bloques estáticos se pueden usar para optimizar el rendimiento del programa se debe a su característica: solo se ejecutarán una vez cuando la clase esté cargada. Aquí hay un ejemplo:
Persona de clase {fecha de nacimiento de fecha privada; persona pública (fecha de nacimiento de fecha) {this.birthdate = birthdate;} boolean isbornboomer () {date startDate = date.valueOf ("1946"); date endDate = date.valueOf ("1964"); return birthdate.compareto (inicio)> = 0 & 0.com 0;}} Isbornboomer está acostumbrado a si esta persona nació en 1946-1964. Cada vez que se llama a Isbornboomer, se generarán dos objetos, lo que causará un desperdicio de espacio. Si se cambia a esto, será mejor:
Persona de clase {fecha de nacimiento de fecha privada; fecha de inicio de fecha estática privada, enddate; static {startDate = date.ValueOf ("1946"); enddate = date.valueOf ("1964");} public Person (date bucleDate) {this.birthedDate = birthdate;} boolean es bornboomer () {return.comparetate (startDate) cumpleaños.compareto (enddate) <0;}} Por lo tanto, muchas veces, algunas operaciones de inicialización que solo deben realizarse una vez se colocarán en el bloque de código estático.
2. Conceptos erróneos de palabras clave estáticas
1. ¿La palabra clave estática cambiará los derechos de acceso de los miembros en la clase?
Algunos principiantes confundirán estática en Java con funciones de palabras clave estáticas en C/C ++. Solo recuerde una cosa aquí: a diferencia de la estática en C/C ++, la palabra clave estática en Java no afectará el alcance de variables o métodos. En Java, las únicas palabras clave que pueden afectar los permisos de acceso son privadas, públicas y protegidas (incluidos los permisos de acceso al paquete). Mire los siguientes ejemplos para comprender:
El error de error "La persona no es visible", lo que significa que la palabra clave estática no cambia los permisos de acceso de variables y métodos.
2. ¿Se puede acceder a las variables de los miembros estáticos a través de esto?
Aunque no hay esto para los métodos estáticos, ¿se puede acceder a las variables de los miembros estáticos a través de esto en métodos no estáticos? Primero veamos el siguiente ejemplo. ¿Cuál es el resultado de esta salida de código?
clase pública Main {static int value = 33; public static void main (string [] args) lanza la excepción {new Main (). printValue ();} private void printValue () {int value = 3; system.out.println (this.value);}} 33
Este es principalmente el principal equipo de observación para comprender esto y estático. ¿Qué significa esto? Esto representa el objeto actual. Si PrintValue se llama a través de New Main (), el objeto actual es el objeto generado por New Main (). El objeto disfruta la variable estática, por lo que el valor de esto. Se puede acceder a todos los métodos estáticos y variables estáticas a través de objetos (siempre que los permisos de acceso sean suficientes).
3. ¿Puede actuar estática sobre las variables locales?
En C/C ++, las variables locales pueden alcanzar el alcance estático, pero recuerde en Java: no se permite que la estática se use para modificar las variables locales. No preguntes por qué, esta es la provisión de sintaxis de Java.
3. Preguntas comunes de la entrevista escrita
Las siguientes enumeran algunas preguntas sobre palabras clave estáticas que a menudo se encuentran en la entrevista escrita. Son solo para referencia. Si tiene algún suplemento, no dude en dejar un mensaje a continuación.
1. ¿Cuál es el resultado de salida del siguiente código?
La prueba de clase pública extiende la base {static {system.out.println ("test static");} public test () {System.out.println ("Test Constructor");} public static void main (string [] args) {nuevo test ();}} base de clases {static {system.out.println ("base static");}}}}}}} Base () {System.out.println ("Base Constructor");}} base estática
prueba estática
constructor base
Constructor de prueba
En cuanto a por qué este resultado es, no lo discutamos primero. Pensemos en el proceso de ejecución específico de este código. 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, la clase de prueba debe cargarse primero. Al cargar la clase de prueba, se encuentra que la clase de prueba hereda de la clase base, por lo que se convertirá en cargar primero la clase base. Al cargar la clase base, encuentra que hay un bloque estático y luego ejecuta 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, aparece el resultado de salida anterior.
2. ¿Cuál es el resultado de salida de este código?
Public Class Test {Person Person = New Person ("Test"); static {System.out.println ("test static");} public test () {System.out.println ("Test Constructor");} public static void main (string [] args) {new MyClassSsssS ();}} class de class {static {system.println ("persona;" "persona;") Persona (string str) {system.out.println ("persona"+str);}} class myClass extiende la prueba {persona persona = nueva persona ("myclass"); static {system.out.println ("myclass static");} public myClass () {System.Println ("MyClass Constructor");}}}}}}}}}}}}}}}}}}}}}}}}}} Prueba estática 1
Prueba estática 2
Aunque no hay declaraciones en el método principal, aún así saldrán, porque la razón se ha explicado anteriormente. Además, el bloque estático puede aparecer en cualquier lugar de la clase (siempre que no esté dentro del método, recuerde, ningún método puede hacerlo) y la ejecución se ejecuta en el orden de los bloques estáticos.
Lo anterior es un análisis completo de las palabras clave estáticas en Java presentadas por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!